В каждой программе есть ошибки

Для начала вспомним три аксиомы одного из самых первых советских программистов с несколько необычной фамилией Шура-Бура.

Аксиома 1. В каждой программе есть ошибка.

Аксиома 2. Если в программе нет ошибок, значит, в исходном алгоритме есть ошибка.

Аксиома 3. Если ни в программе, ни в алгоритме ошибок нет, то такая программа никому не нужна.

При всей шутливости этих аксиом в них отражена суровая правда жизни.

Исходные идеи тестирования абсолютно понятны [9].

Вы написали программу, хотите убедиться в правильности ее работы, поэтому пропускаете один или несколько тестов и смотрите, что получилось. Понятно, что тесты должны быть простыми настолько, чтобы можно было предсказать правильный ответ , иначе как вы определите, правильно ли программа сработала?

А что делать со сложными тестами и, вообще, сколько тестов нужно пропустить? Ответ очевиден – бесконечно много, поэтому с помощью теста можно доказать наличие ошибок (если тест был достаточно «зубастым»), но нельзя доказать их отсутствие.

Я УЧЛА ВСЕ ОШИБКИ! Мой новый бокс красоты — подробный обзор, выбор наполнения, свотчи❤️

Бесконечность тестов определяется наличием циклов, рекурсии, разнообразием значений данных. Ситуация обычна для нашей специальности. Теоретическая невозможность не снимает с нас ответственности за поиск практических способов проверки – пусть не полных, но дающих какую-то степень уверенности. Итак, что же можно сделать?

Еще 30 лет назад был популярен критерий полноты тестирования, при котором набор тестов гарантировал, что по каждому ребру графа управления программы исполнение программы хотя бы один раз пройдет. Такой набор тестов можно создать, часто даже автоматически.

Чтобы проверить цикл, нужно создать тест, гарантирующий прохождение цикла 0, 1 и 2 раза. 0 – вдруг условие входа в цикл сразу было ложным, 1 – нормальное прохождение, 2 – не столь очевидно. Возможно, в конце цикла есть присваивание переменной, которая в начале цикла только читается. Понятно, что однократный проход по циклу не даст возможности проверки важного и весьма вероятного варианта.

Изложенные критерии носят только эвристический характер, но весьма полезны. Таким образом, мы видим, что программирование и тестирование – совершенно разные типы деятельности, требующие разных исполнителей.

Программирование – это конструктивный созидательный процесс, который требует высокой квалификации и определенного оптимизма (cм. аксиомы Шуры-Буры).

Тестирование – деструктивный процесс, который требует высокой дотошности, подозрительности, пессимистичности, но, вообще говоря, не требует высокой квалификации. Пусть не обижаются на меня настоящие системные программисты, которые создают инструментальные средства автоматизации тестирования , я говорю об обычных тестерах. В каждом коллективе есть люди с неуживчивым характером, любящие покритиковать коллег по работе. Цены им не будет в группе тестирования.

Еще раз повторим, что тестирование нужно вовсе не для того, чтобы показать, что программа работает правильно – это невозможно. Тестирование – это процесс исполнения программы с целью нахождения ошибок. Хороший тест – это тест, на котором с большой вероятностью ошибка найдется.

ОВР Шоу: Айтишники

Теперь приведем несколько организационных и технологических соображений относительно тестирования.

Тестирование (не считая начальных отладочных тестов) не должно проводиться самими авторами программы. Наблюдается определенная «замыленность» взгляда автора на программу, поэтому он и тесты будет готовить на те варианты, которые предусмотрел в программе.

Должна быть конкуренция между программистами и тестировщиками, нужен дух соревнования: «Я все равно тебя поймаю» против «Врешь, не поймаешь».

Читайте также:
Установить программу определитель номера для Андроид

Необходимо уметь оценивать вероятность и примерное количество оставшихся ошибок. Например, известен метод оценки количества рыб в пруду. Ловят, скажем, 100 рыбок, помечают их и выпускают обратно в пруд. Затем снова ловят 100 рыбок.

Если почти все они мечены, значит, в пруду примерно 100 рыбок и есть, если же меченых попалось мало, то рыб, скорее всего, больше, причем в той же пропорции, какова доля непомеченных из 100 вновь пойманных. Во многих фирмах применяют тот же прием: специальные люди вставляют некоторое количество разнообразных ошибок в программы и возвращают их на доработку авторам с требованием обнаружить ровно столько же ошибок. По тому, какая часть найденных ошибок относится к специально вставленным, а какая – к вновь найденным ошибкам, можно судить о числе оставшихся ошибок. Еще проще – поручить тестирование одной и той же программы двум группам тестировщиков и оценить процент ошибок, найденных обеими группами.

Должно проверяться не только нормальное поведение программы, но и поведение в случае неправильных входных данных и других ошибочных ситуаций на предмет устойчивости программы, осмысленности сообщений об ошибках и т.д.

Всегда должен быть четко оговорен конечный результат тестирования. В идеале еще до начала работ или на одной из ранних стадий (работа 2-10 из нашего примера) должен быть создан и согласован с заказчиком набор тестов, успешный пропуск которых свидетельствует об успешном окончании работы в целом. К сожалению, на практике такое встречается редко, поэтому сдача проекта – это всегда, скажем так, шумный процесс.

Источник: intuit.ru

Теория ошибок

Теория ошибок

На этой странице собраны постулаты теории ошибок, с большей частью которых сталкиваются в повседневной работе программисты, тестировщики и проект-менежеры. Этот раздел так и называется — «Теория ошибок».

Теория ошибок:
Ошибки так же неисчерпаемы, как и атом.

Аксиома теории ошибок:
В любой программе есть ошибки.

Закон пропорциональности:
Чем более программа необходима, тем больше в ней ошибок.
Следствие:
Ошибок не содержит лишь совершенно ненужная программа.

Фундаментальный закон теории ошибок:
На ошибках учатся.

Следствия:
● Программист, написавший программу, становится ученым.
● Чем больше программист делает ошибок, тем быстрее он делается ученым.
● Крупный ученый-программист никогда не пишет правильные программы.
Замечание:
На то он и ученый.

Закон необходимости ошибок:
Программист может обнаружить ошибку только в чужой программе.
Следствие:
Ошибке не всё равно, кто её обнаружит.

Определение языка ошибок:
Будем называть языком ошибок правила, в обход которых пишутся программы.

Свойства программных ошибок:
● Ошибки могут следовать друг за другом.
● От перестановки двух эквивалентных ошибок результат не меняется.
● Две последовательные ошибки можно объединить в одну, более сильную.
● Одинаковые ошибки необязательно делать каждый раз, достаточно сделать одну, а затем обращаться к ней по мере необходимости из любого места программы.
● Ошибки могут образовывать циклы. Наиболее устойчивый из них — бесконечный.
● Ошибки могут вызывать друг друга и сами себя (рекурсивность ошибок).
● Ошибки допускают многократное вложение друг в друга. Две одинаковые вложенные ошибки называются четной ошибкой и ошибкой не являются.

Свойство чётности ошибок:
Если написанная программа сработала правильно, то это значит, что во время её работы выполнилось четное число ошибок или программист не понял задание.
Cвойства чётности ошибок для политиков:
Ошибка, повторенная дважды, перестаёт быть ошибкой.

Читайте также:
Программа deja vu это

Взаимодействие ошибок с базовой операционной системой:
● Во время исполнения ошибки имеют наивысший приоритет.
● Прервать исполнение ошибки может только другая, более активная ошибка.
● Запросы операционной системы к ошибкам ошибками могут игнорироваться.
● Запросы ошибок к операционной системе игнорироваться не могут.
● При работе с файлами ошибки могут пользоваться файловой системой базовой ОС и её ошибками.
● На вычислительной машине с параллельной архитектурой может выполняться несколько ошибок одновременно.
● Системные программы облегчают процесс написания прикладных программ и их ошибок.

Первое правило успешного старта проекта:
До начала работы над проектом следует тщательно продумать все необходимые ошибки и связи между ними. Это значительно упростит работу над ошибками в самом проекте.

Определение тестирования:
Тестирование — это процесс нахождения ошибок в тесте.

Признак хорошего тестового скрипта:
Хороший тест должен содержать ошибки, компенсирующие их нехватку в тестируемой программе.

Главное свойство языкового редактора:
Языковый редактор, призванный уберечь программиста от синтаксических ошибок, позволяет вносить в программу весьма хитроумные ошибки, которые не удаётся обнаружить ни транслятором, ни отладчиком. Обычный текстовый редактор таких возможностей не предоставляет.

Парадокс транслятора:
Программа-транслятор, предназначенная для перевода программ с языка высокого уровня на машинный язык, при переводе порождает ошибки. Ошибки, которые содержались в исходном описании, переводятся безошибочно.

Совет начинающему программисту:
Никогда не исправляйте найденные ошибки, ибо это повлечет за собой появление неизвестного числа ненайденных. Лучше опишите их в сопроводительной документации как особенность программы.

Указание начинающему программисту:
Если вы с первого раза сумели написать программу, в которой транслятор не обнаружил ни одной ошибки, сообщите об этом системному программисту. Он исправит ошибки в трансляторе.

Принцип матёрого программиста:
Ошибка? Это не ошибка, это системная функция.

Требовать и эффективности, и гибкости от одной и той же программы — всё равно, что искать очаровательную и скромную жену. по-видимому, нам следует остановиться на чём-то одном из двух.

Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.

Выдавать глобальные идеи — это удовольствие; искать отвратительные маленькие ошибки — вот настоящая работа.

Как только проект окончательно принят, он становится устаревшим в смысле своих концепций.

Настойчивость руководителя может определить график выполнения задания, но не в состоянии определить срок его действительного завершения.

Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование.

Если за две минуты омлет ещё не готов, у заказчика два выбора — подождать или съесть его сырым.

Генерация случайных чисел — слишком важный вопрос, чтобы оставлять его на волю случая.

Я не знаю причины, по которой нам не следует этого делать, но, возможно, позже мы придумаем какую-нибудь.

Пользователь не знает, чего он хочет, пока не увидит то, что он получил.

На пустом диске можно искать вечно.

Если отладка — процесс удаления ошибок, то программирование должно быть процессом их внесения.

Вы уже дошли до состояния, когда у вас нет времени, чтобы разрешить те проблемы, которые отнимают у вас все время?

Компьютеры бесподобны: за несколько минут они могут совершить такую грандиозную ошибку, какую не в состоянии сделать множество людей за многие месяцы.

Читайте также:
Программа для того чтобы поставить живые обои

Источник: parfumclub.org

Теория ошибок

Закон пропорциональности. Чем более программа необходима, тем больше в ней ошибок.

Следствие. Ошибок не содержит лишь совершенно ненужная программа.

Фундаментальный закон теории ошибок. На ошибках учатся.

Следствие 1. Программист, написавший программу, становится ученым.

Следствие 2. Чем больше программист делает ошибок, тем быстрее он делается ученым.

Следствие 3. Крупный ученый–программист никогда не пишет правильные программы.

Замечание. На то он и ученый.

Указание начинающему программисту. Если вы с первого раза сумели написать программу, в которой транслятор не обнаружил ни одной ошибки, сообщите об этом системному программисту. Он исправит ошибки в трансляторе.

Закон необходимости ошибок. Программист может обнаружить ошибку только в чужой программе.

Следствие. Ошибке не все равно кто ее обнаружит.

Совет начинающему программисту. Никогда не исправляйте найденные ошибки, ибо это повлечет за собой появление неизвестного числа не найденных. Лучше опишите их в сопроводительной конфигурации как особенность программы.

Определение. Будем называть языком ошибок правила, в обход которых пишутся программы.

  • Ошибки могут следовать друг за другом.
  • От перестановки двух эквивалентных ошибок результат не меняется (коммутативность эквивалентных ошибок).
  • Две последовательные ошибки можно объединить в одну более сильную.
  • Одинаковые ошибки необязательно делать каждый раз, достаточно сделать одну и обращаться к ней по мере необходимости из любого места программы.
  • Ошибки могут образовывать циклы. Наиболее устойчивый из них бесконечный.
  • Ошибки могут вызывать друг друга и сами себя (рекурсивность ошибок).
  • Ошибки допускают многократное вложение друг в друга. Две одинаковые вложенные ошибки называются четной ошибкой и ошибкой не являются.

Свойство четности ошибок. Если написанная программа сработала правильно, то это значит, что во время ее работы выполнилось четное число ошибок или программист не понял задание.

Формулировка вышеприведенного свойства, предназначенная для политиков.Ошибка, повторенная дважды, перестает быть ошибкой.

  • Во время исполнения ошибки имеют наивысший приоритет.
  • Прервать исполнение ошибки может только другая, более активная ошибка.
  • Запросы операционной системы к ошибкам ошибками могут игнорироваться.
  • Запросы ошибок к операционной системе игнорироваться не могут.
  • При работе с файлами ошибки могут пользоваться файловой системой базовой ОС и ее ошибками.
  • На ЭВМ с параллельной архитектурой может выполняться несколько ошибок одновременно.

Системные программы. Системные программы облегчают процесс написания прикладных программ и их ошибок.

Определение. Тестирование – это процесс нахождения ошибок в тесте. Хороший тест должен содержать ошибки компенсирующие их нехватку в тестируемой программе.

Языковой редактор, призванный уберечь программиста от синтаксических ошибок, позволяет вносить в программу весьма хитроумные ошибки, которые не удается обнаружить ни транслятором, ни отладчиком.Обычный текстовый редактор таких возможностей не предоставляет.

Программа – транслятор, предназначенная для перевода программы с языка высокого уровня на машинный язык, при переводе порождает ошибки. Ошибки,которые содержались в исходном описании, переводятся безошибочно.

Заключительный совет тем, кто до него добрался. До начала работы над проектом следует продумать все необходимые ошибки и связи между ними. Это значительно упростит работу над ошибками в самом проекте.

Еще записи по теме

  • Анеген
  • 50 причин любить девушек
  • Самые идиотские преступления XX века
  • Одностишья
  • 15 признаков того, что на улице мороз
  • Не казаться странным
  • 5 женских типажей
  • 40 признаков того, что ваша бабушка — волк
  • Какие бывают дураки
  • Новые извечные вопросы русской интеллигенции

Источник: www.kabanik.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru