Лекции. Тестирование ПО (all in one) (1186159), страница 3
Текст из файла (страница 3)
Разработчики ПО тоже не всегда понимают, что именно нужно сделать.Дополнительным источником трудностей может служить отсутствие четкого пониманиязадач у самих пользователей и заказчиков — чаще всего они лишь приблизительномогут сформулировать проблему или могут попросить сделать несколько не то, что имдействительно нужно.Ошибки такого рода тяжелее всего обнаруживаются и стоят достаточно дорого.Для их предотвращения нужно проводить тщательный анализ предметной области,уточнять каждое сформулированное требование, анализировать его причины и связи сдругими требованиями и ограничениями, переформулировать выявленные пожелания итребования, выяснять и уточнять корректность полученных формулировок упользователей и экспертов в предметной области.
Поскольку суть таких ошибок —неадекватное понимание требований, защититься от них помогает постоянный контрольэтого понимания на основе формирования различных его следствий и проверки ихкорректности у экспертов и пользователей.•Неправильное решение задач.Даже правильно поняв, что нужно сделать, разработчики часто выбирают неправильныйподход к тому, как это делать. Выбираемые решения могут обеспечивать лишьнекоторые из требуемых свойств, могут решать поставленную задачу лишь для одногокласса ситуаций из нескольких возможных, они могут подходить для данной задачи втеории, но плохо работать на практике, в конкретных обстоятельствах и в томокружении, в которых должна будет работать создаваемая система.Помочь в выборе правильного решения может сопоставление альтернативных решений,тщательный их анализ на предмет соответствия всем требованиям, поддержаниепостоянной связи с пользователями и заказчиками, предоставление им информации опредлагаемых решениях, демонстрация прототипов, анализ пригодности выбираемыхрешений для работы именно в том контексте, в котором они будут использоваться,тестирование прототипов и моделей.•Неправильный перенос решений в код.Имея правильное решение правильно понятой задачи, люди, тем не менее, способнысделать достаточно много ошибок при его воплощении.
Корректному представлениюрешений в коде могут помешать как обычные опечатки, так и забывчивостьпрограммиста или его нежелание отказаться от привычных приемов, которые не даютвозможности аккуратно записать именно то, что нужно.Хотя такие ошибки обычно более легко устраняются, они способны нанести не меньшийущерб, чем ошибки предыдущих видов.С этими ошибками можно справиться при помощи инспектирования кода, взаимногоконтроля, при котором разработчики внимательно читают код друг друга, опережающейразработки модульных тестов и тестирования.Среди специалистов в программной инженерии установилось понимание того, что придостижении системой определенного уровня сложности ошибки в ней становятсянеустранимыми — сколько бы усилий не было потрачено на их поиск и отладку,гарантировать безошибочность такой системы невозможно.
Это связано, в первую очередь, ссуществованием определенного порога сложности, за пределами которого человек уже не всостоянии представлять себе происходящее в системе во всех деталях, в частности, сневозможностью абсолютно четко сформулировать полный и согласованный набортребований к системе, решающей большой набор сложных задач. С другой стороны,реальные требования к полезному ПО постоянно изменяются в связи с изменениями впотребностях пользователей, бизнеса и общества, для удовлетворения которых создаютсяпрограммные системы, поэтому разработка точных и согласованных требований можетпросто не успевать за развитием рынка.Ошибки в ПО иногда приводят к серьезным инцидентам и значительным убыткам дляиспользующих его организаций.
Конечно, чаще возникают мелкие ошибки, не приводящие ксерьезным последствиям. Зависимость между количеством ошибок и размером ихпоследствий подчиняется закону Ципфа (Zipf) [9] — количество случающихся сбоевпримерно обратно пропорционально величине наносимого ими ущерба.Далее описывается несколько примеров ошибок в программном обеспечении, имевшихсерьезные последствия.•Ошибка в системе управления космическим аппаратом Mariner 1 [10].Эта ошибка привела к уничтожению одного из первых кораблей, направлявшегося кВенере, через несколько минут после запуска 22 июля 1962 года.В ходе полета антенна связи вышла из строя, связь со службой управления былапотеряна, и управление полетом взял на себя бортовой компьютер. Однако в одной изформул для расчета положения было забыто усреднение скорости по несколькимпоследовательным измеренным значениям — в результате небольшие колебанияскорости, связанные с неточностью измерительной аппаратуры, стали рассматриватьсясистемой как серьезные, она стала предпринимать «корректирующие» действия, врезультате чего корабль сошел с курса и был уничтожен.•Ошибка в программном обеспечении, управляющем аппаратом радиационной терапииTherac-25 [11].За 1985-1987 годы зафиксировано 6 инцидентов со смертельным исходом, связанных сего работой.
В трех из них непосредственной причиной смерти пациентов былопризнано именно их повышенное облучение из-за ошибки в программной системеуправления аппаратом.Аппарат имел два режима облучения — мягкое облучение электронами и рентгеновскоеоблучение. Во втором случае с источника электронных лучей снимался фильтр, которыйослаблял их интенсивность, но между пациентом и источником излученияустанавливался специальный экран, падая на который мощные электронные лучивызывали рентгеновское излучение.Ошибка проявлялась, когда оператор сначала включал первый режим, а потом слишкомбыстро переключал аппарат на второй.
При этом ослабляющий фильтр снимался, аэкран не устанавливался, и пациент подвергался очень интенсивному облучениюэлектронными лучами. Кроме того, оператору при этом сообщалось, что пациент неполучил никакой дозы, что не позволяло адекватно среагировать на происходящее.Ошибка возникала лишь иногда и была связана с несинхронизованным выполнениеммодулей, управлявших различными элементами аппарата.
При эксплуатационномтестировании она не была обнаружена, поскольку операторы тогда еще не научилисьпереключать режимы достаточно быстро.•Ошибка в системе управления космическим аппаратом Фобос 1 [12].Привела к потере связи с кораблем, уже находившимся на пути к Марсу, 2 сентября 1988года. Корабль перестал ориентироваться в пространстве, не смог сориентироватьсолнечные батареи и израсходовал аккумуляторы, поскольку были отключенынавигационные приборы для определения положения относительно Солнца.Команда отключения приборов была в тестовой подпрограмме, использовавшейся наЗемле для проверки работоспособности отдельных систем, удалить этот код не успелиперед вылетом, поскольку он был записан в памяти, предназначенной только для чтения,а для ее замены требовалось существенное время.
Казалось, однако, что в ходе полетаэта программа никогда не будет вызвана. Но при передаче команд по корректировкекурса 29 августа 1988 года была допущена ошибка — пропущен один символ, чтопривело к выполнению этой тестовой программы.Другой корабль этой серии, Фобос 2, был также потерян из-за какой-то ошибки всистеме управления 27 марта 1989 года, уже на орбите вокруг Марса.•25 февраля 1991 года во время Первой войны в Персидском заливе американскаясистема ПВО Patriot не смогла сбить иракскую ракету Скад, которая в результате попалав барак американской армии, убив 28 человек и ранив около ста [13].Причиной промаха Patriot, как выяснилось, было накопление ошибок округления завремя работы системы. Время в ней измерялось в десятых долях секунды, а числа былипредставлены в 24-битном двоичном формате с плавающей точкой.
При представлении1/10 как двоичной дроби с 24-мя цифрами возникает небольшая ошибка.В рассматриваемом случае система Patriot работала без перезагрузки около 100 часов. Заэто время накопление погрешности определения времени дало ошибку около 1/3секунды. Поскольку ракета Скад летит со скоростью 1700 м/с, ошибка в 1/10 секундыпри расчете ее траектории уже не дает возможности ее сбить.•Многочисленные ошибки в системе управления двигателями и навигационной системесчитаются наиболее вероятной причиной катастрофы вертолета Chinook ZD 576 [14],произошедшей 2 июня 1994 года на мысе Кинтайр.
В этой катастрофе погибли 25экспертов и высокопоставленных сотрудников отдела разведки Великобритании вСеверной Ирландии, что на значительное время парализовало работу этого отдела.•Ошибка в системе управления ракеты Ариан-5 привела к ее уничтожению при первомзапуске этой ракеты 4 июня 1996 года [15].Долгое время эта ошибка, приведшая к убыткам в размере 500 миллионов долларовСША, считалась самой дорогостоящей ошибкой в программной системе.Ошибка состояла в том, что без изменений использовался модуль расчета траектории изсистемы управления ракетой Ариан-4.
В нем горизонтальная составляющая скоростиракеты представлялась 16-битным числом. Ариан-5 могла выдерживать болеезначительные ускорения и большую кривизну траектории, из-за чего в ходе полетазначение горизонтальной скорости вышло за пределы представимых 16-ю битами чисел.Специальной процедуры обработки такой ситуации не было, поэтому возникшееисключение обрабатывалось модулем обработки общих сбоев, который остановилданный процесс и запустил новый с теми же исходными данными, что вновь привело ктой же ошибке.