Некоторые из самых скандальных ошибок

advertisement
Lecture 1
2/12/2016 1:42:00 AM
Введение
Виды программных ошибок. Причины появления ошибок. Цена/последствия ошибок. Роль и цели
тестирования в процессе разработки. Аксиомы тестирования. Термины и определения
тестирования.
Введение
Программное обеспечение получило большое распространение в последние десятилетия. Практически все
машины, приборы и устройства контролируются программных обеспечением. Например, автомобили –
двигатель, трансмиссия, системы тормозов.
Скорость и качество работы различных организаций напрямую зависит от надёжности программного
обеспечения – банки (обработка денежных транзакций), медицина (постановка диагноза), производство
(управление машинами). Программы и компьютеры заменили чиновников во многих сферах.
Принимая во внимание выше сказаное и области, в которых применяются компьютеры становится
очевидным критичность качества используемых програмных продуктов.
Тестирование программ стало технической профессией к тому же очень важной.
 ПОЧЕМУ ТЕСТИРОВАНИЕ НЕОБХОДИМО? ПРИМЕРЫ?
Некоторые из самых скандальных ошибок:
1. Медицинский aпарат для радиоактивной терапий „Therac-25”
- 6 несчастных случаев со смертельным исходом или тяжело раненными (1985-87, США,
Прямая причина: ошибки в программе контролирования
Ретроспективный анализ[Левесон 1995]:
1) Чрезмерная уверенность в программах software
2) Надежность ≠ уверенность
2. Авиа ракета Ariane 5
- Авторазрушение после 40 секунд неисправности от момента запуска(1996)
Причина: 500 миллионов долларов (ракета), 7 миллионов долларов (проект)
Ретроспективный анализ:
1) главная причина: неразумное переиспользование software
2) Принят код от Ariane 4 без перепроверки
Виды программных ошибок:
Сrash

(IEEE Institute of Electrical and Electronics Engineers)
Неожиданный и полный отказ системы или компонента
(IEEE) the sudden and complete failure of a computer system or component.
Defect (syn. with anomaly, fault, issue)


(IEEE) Анамалия в продукте
Проблема качества обнаруженая после того как программа была получена тестеровщиком (или
пользователем)
(1) (IEEE) a product anomaly;
Канада)
Lecture 1
2/12/2016 1:42:00 AM
(2) synonymous with fault, both imply a quality problem discovered after the software has been released to end-users
(or to another activity in the software process); [Pressman, 203]
Error

Несоответсвие между вычесленным, полученым или замереным значением и значением принятым за
правильное.
(1) (ISO) a discrepancy between a computed, observed, or measured value or condition and the true, specified, or
theoretically correct value or condition;
(или второй вариант Борис Бейзер «Тестирование чёрного ящика»:
Отказ (IEEE94) – наблюдаемое аномальное поведение любого объекта (не обязательно тестируемого), такое
как несоответствие требованиям или возникновение незапланированих явлений.
Exception

(IEEE) Событие, которое ведёт к приостановке нормального исполнения программы.
(IEEE) an event that causes suspension of normal program execution; types include addressing exception, data
exception, operation exception, overflow exception, protection exception, underflow exception.
Failure

(IEEE) Неспособность системы или компонента выполнить нужные задачи в заданые критерии
производительности
(IEEE) the inability of a system or component to perform its required functions within specified performance
requirements.
Mistake

(IEEE) Действие человека, которое влечёт за собой неправильный результат и неправильное поведение
тестируемого объекта
(IEEE) a human action that produces an incorrect result, and the subject of the quality improvement process.
(или второй вариант Борис Бейзер «Тестирование чёрного ящика»:
Ошибка (сбой IEEE94) - просчёт в проектировании, ведущий к возникновению симптомов у какого-либо
объекта (тестирумого и не только) при прохождении этим объектом определённого теста)
Часто все эти понятия обобщаются одним словом – баг
Bug


Действия, которые программа не должна делать или наоборот невозможность осуществить в программе
действия, которые должны поддерживаться.
Сбой в программе, который ведёт к непредусмотренному поведению
(1) things the software does that it is not supposed to do, [or] something the software doesn't do that it is supposed to.
[Telles and Hsieh, 5];
(2) a fault in a program which causes the program to perform in an unintended or unanticipated manner.
Lecture 1
2/12/2016 1:42:00 AM
 КАКОВЫ ПРИЧИНЫ ПОЯВЛЕНИЯ ОШИБОК В ПО?
Причины появления ошибок
Теоретически, ошибки, сделанные компетентным программистом, работающим на современном
программной обеспечении, в соответствующей среде разработки программного обеспечения, не являются
дефектами (предполагается отсутсвие недостатков добросовестности, лени и некомпетентности
программсита). В хорошем, продуманном программном обеспечении источником ошибок являются
сложность и ограниченная способность людей к борьбе со сложностью, а не тупость. Чем лучше
программный процесс, тем менее вероятно, что ошибки, которые сохраняются в течение тестирования,
являются ошибками конкретных программистов. Большинство ошибок, которые мы находим при помощи
тестирования в хорошо разработанном, качественном программном обеспечении, являются следствием
непредсказуемого взаимодейтвия между компонентами или между объектами, или результатом
непредсказуемых побочных эффектов. Появление ошибок в программе указывает на несовершенство
технологического процесса, а не на вину программиста. Однако, это в идеале («гипотеза компетентного
программиста»)
Безусловно, все люди делают ошибки. Люди делают ошибки, т.к. расположены к ним. Такие внешние
факторы как дэдлайны, сложность систем и организации процесса увеличивают вероятность появления
ошибок. В том числе ошибок не только в самом коде, но и в списках требований к будущему продукту.
Многие основные системные ошибки происходят из документации, на которую ориентируется программист.
Если документ содержит ошибку, до и компонент/программа написаная по этому документу будет
содержать ошибку, которая в свою очередь может привести к системной ошибке.
 КОГДА НАДО НАЧИНАТЬ ТЕСТИРОВАНИЕ ПРОДУКТА?
Именно по этим причинам тестирование должно проводиться на протяжении всего процесса разработки
программного продукта.
 КАКОВЫ ПОСЛЕДСТВИЯ ПЛОХОГО ТЕСТИРОВАНИЯ?
Цена/последствия ошибок
Ошибки в программном обеспечении ведут к:
 Потере денег
 Потере времени
 Потере репутации
 И даже к смерти, вреду окружающей среде и т.п.
Стоимость исправления ошибок растёт со временем:
Stage error is found
Requirements
Coding
Program testing
System testing
User acceptance testing
Live running
Comparative cost
$1
$10
$100
$1000
$10000
$100000
Lecture 1
2/12/2016 1:42:00 AM
Роль и цели тестирования в процессе разработки
 В ЧЁМ ЦЕЛЬ ТЕСТИРОВАНИЯ?
 В ЧЁМ ЦЕЛЬ QUALITY ASSURANCE?
Тестирование - это процесс, целью которого является выявление качества продукта, т.е. соответствие
продукта заявленным требованиям
Oсновной задачей тестирования ПО является получение информации о статусе готовности заявленной
функциональности системы или приложения.
Проведённое тестирование чего-либо не является эквивалентом утверждения, что это что-то свободно от
ошибок.
QA - это процесс, который обеспечивает качество продукта заявленным требованиям
То есть
- Тестинг - просто индикатор качества.
- QA - его гарант
Цели тестирования:
1. Обеспечеие программистов информацией, которую они смогут использовать для предотвращения
ошибок
2. Обеспечение менеджеров информацией, которая необходима им для разумной оценки риска при
использовании объекта
3. Создание объекта, максимально свободного от ошибок.
4. Проверить соответсвие объекта (убедиться в его действенности), то есть показать, что он работает
правильно.
Когда надо остановиться
Тестирование и качество
Общее качество в глобальном понимании очень сложно определить. Программа может соотвествовать
списку требований озвученым клиентом. Отличный показатель, но программа может проявить поведение,
которое не описано клиентом. И если ограничится только списком документированых требований, то
подобная произвольная ошибка будет упущена. Поэтому необходимы другие виды тестирования, чтобы
постепенно исключать ошибки всех типов. Однако, надо помнить, что тестирование, как и любой процесс
требуем времени и денег. И всегда есть лимит по обоим параметрам.
Поэтому всегда существует баланс между временем, денежными средставами и качеством:
Lecture 1
2/12/2016 1:42:00 AM
Когда надо остановиться
 КОГДА ТЕСТИРОВАНИЕ МОЖНО СЧИТАТЬ ОКОНЧЕНЫМ?
Процесс тестирования потенциально бесконечен, как с теоретичекой, так и с практической точки зрения. Тем
не менее, даже зная, что ошибки остались, мы должны завершить тестироване.
Если у нас есть большое количество опытных данных, то можно создать статистическую модель, которая даст
нам понимание того, насколько рискованно прекратить тестирование и предложить программу для
коммерческого использования.
Самым главным аспектом при решении окончить тестирование является опредеоение критерия, того
допустимого уровня ошибок при котором продолжение тестирования будет минимально влиять на
улучшение качества продукта.
Ещё одним метод, который дополняет первый это определение приоритетов. Первым делом делаются тесты,
наибольшим приоритетом. Самые важные тесты покроют наиболее важные части системы и, даже если
тестирование всего продукта будет прервано в середине, наиболее выжные части будут уже покрыты.
Приоритеты и «выходной критерий» (допустимый уровень ошибок) определяется Project Manager'ом.
Aксиомы тестирования
1. Невозможно полное тестирование программы:
 Число возможных входных данных велико.
 Число возможных результатов/выходных данных велико
 Число решений и возможностей в программе велико
 Программные спецификаций субъективны
2. Тестирование не может показать, что продукт не содержит ошибок.
«Безбажных» продуктов не существует. Существуют «недотестированные» продукты.
Всегда можно усовершенстовать или расшиить тесты, которые выявят новые ошибки.
3. Чем больше выявлено ошибок, тем больше вероятность появления других ошибок.
Тестирование вокруг выявленой ошибки в большинстве случаев выявляет смежные ошибки. Одна
ошибка может быть лишь частным случаем большой проблемы в программе.
Lecture 1
2/12/2016 1:42:00 AM
4. Парадокс пестецида
(по аналогии с явлением в сельском хозяйстве: насекомые приспосабливаются к яду, что заставляет
искать принципиально новое решение)
Если работа по выявлению ошибок была сделана хорошо и результаты были переданы корректно
программистам, то они, скореее всего, не повторят прошлых ошибок. Хороший программист, если у
него есть время и необходимые ресурсы, обычно изучает проблемы, выявленные тестировщиками,
обобщает идеи и затем исследует своё программное обеспечение на предмет выявления и
исправления в нём таких же или подобных ошибок.
Каждый метод тестирования нацелен на определённый набор ошибок. Если программист реагирует
на результаты тестирования и информацию об ошибках сокращением и удалением этих ошибок, из
этого следует, что его программа улучшается, а эффективность предыдущих тестов постепенно
уменьшается. То есть ваш тест устаревает и вам приходится изучать, создавать и использовать новые
тесты, основанные на новых методах отслеживания новых ошибок.
5. Не все выявленные ошибки будут исправлены.
Причины могут быть следующими:
 Недостаток времени
 Найденая «ошибка» не является ошибкой
 Велик риск появления ещё большего количества ошибок при починке проблемы
 Ошибка незначительна и допустимо её присутсвие в программе (ресурсы потраченные на
исправление не будут соотвествовать результату)
6. Невсегда возможно определить является ли наблюдаемое поведение действительно ошибкой
Как правило, это утверждение относится к поведению не описаному чётко в спецификациях. В этом
случае поведение рассматриватся более авторитетными личностями проекта – Project Manager или
даже клиент. Возможно дополнение спецификаций новыми деталями, которые допускали бы
наблюдаемое поведение как нормальное.
7. Спецификаций продуктов не всегда чётки и однозначны.
Спецификации обновляются и дополняются на протяжении всего процесса разработки.
Note: QA should challenge PMs on this point
8. Тестеры не являются самыми популярными членами команды.
Несколько полезных советов:
 Находите ошибки как можно раньше. Все будут довольны если вы их обнаружите за две
недели а не за день до окончания периода тестирования.
 Укрепляйте энтузиазм. Каким бы счастливым ты не был при выявление критической ошибки,
будь дипломатичным когда демонстрируешь ее программисту.
Download