Калайда В.Т., Романенко В.В. Технология разработки программного обеспечения (1015641), страница 15
Текст из файла (страница 15)
В качестве примера можно рассмотреть операционные системы IBM S/370. В одной из версий операционной системы 47 % ошибок, обнаруженных пользователями, приходилось на 4 % модулей системы.Преимущество рассматриваемого принципа заключается втом, что он позволяет ввести обратную связь в процесс тестирования. Если в какой-нибудь части программы обнаруженобольше ошибок, чем в других, то на ее тестирование должныбыть направлены дополнительные усилия.Тестирование — процесс творческий.Вполне вероятно, что для тестирования большой программы требуется больший творческий потенциал, чем для ее проектирования.
Выше было показано, что нельзя дать гарантию построения теста, обнаруживающего все ошибки. В дальнейшемздесь будут обсуждаться методы построения хороших наборовтестов, но применение этих методов должно быть творческим.Чтобы подчеркнуть некоторые мысли, высказанные в настоящем разделе, приведем еще раз три наиболее важных принципа тестирования.Тестирование — это процесс выполнения программ с целью обнаружения ошибок.Хорошим считается тест, который имеет высокую вероятность обнаружения еще не выявленной ошибки.Удачным считается тест, который обнаруживает ещене выявленную ошибку.6.3 Ручное тестированиеВ течение многих лет большинство программистов былиубеждены в том, что программы пишутся исключительно длявыполнения их на машине и не предназначены для чтения чело-98веком, а единственным способом тестирования программы является ее исполнение на ЭВМ. Это мнение стало изменяться вначале 70-х годов, а значительной степени — благодаря книгеВейнберга «Психология программирования для ЭВМ».
Вейнберг доказал, что программы должны быть удобочитаемыми ичто их просмотр должен быть эффективным процессом обнаружения ошибок.По этой причине, прежде чем перейти к обсуждению традиционных методов тестирования, основанных на примененииЭВМ, рассмотрим процесс тестирования без применения ЭВМ(«ручного тестирования»), являющейся темой настоящего раздела. Эксперименты показали, что методы ручного тестирования достаточно эффективны с точки зрения нахождения ошибок, так что один или несколько из них должны использоватьсяв каждом программном проекте.
Описанные здесь методы предназначены для периода разработки, когда программа закодирована, но тестирование на ЭВМ еще не началось. Аналогичныеметоды могут быть получены и применены на более раннихэтапах процесса создания программ (т.е. в конце каждого этапапроектирования), но рассмотрение этого вопроса выходит зарамки данного пособия.Следует заметить, что из-за неформальной природы методов ручного тестирования (неформальной с точки зрения других, более формальных методов, таких, как математическое доказательство корректности программ) первой реакцией частоявляется скептицизм, ощущение того, что простые и неформальные методы не могут быть полезными. Однако их использование показало, что они не «уводят в сторону».
Скорее этиметоды способствуют существенному увеличению производительности и повышению надежности программы. Во-первых,они обычно позволяют раньше обнаружить ошибки, уменьшитьстоимость исправления последних и увеличить вероятностьтого, что корректировка произведена правильно. Во-вторых,психология программистов, по-видимому, изменяется, когда начинается тестирование на ЭВМ. Возрастает внутреннее напряжение, и появляется тенденция «исправлять ошибки так быстро,как только это возможно». В результате программисты допускают больше промахов при корректировке ошибок, уже найден-99ных во время тестирования на ЭВМ, чем при корректировкеошибок, найденных на более ранних этапах.6.3.1 Инспекции и сквозные просмотрыИнспекции исходного текста и сквозные просмотры являются основными методами ручного тестирования.
Так как этидва метода имеют много общего, они рассматриваются здесьсовместно. Различия между ними обсуждаются в последующихразделах.Инспекции и сквозные просмотры включают в себя чтение или визуальную проверку программы группой лиц. Эти методы развиты из идей Вейнберга. Оба метода предполагают некоторую подготовительную работу. Завершающим этапом является «обмен мнениями» — собрание, проводимое участниками проверки. Цель такого собрания — нахождение ошибок, ноне их устранение (т.е.
тестирование, а не отладка).Инспекции и сквозные просмотры широко практикуютсяв настоящее время, но причины их успеха до сих пор еще недостаточно выяснены. Не удивительно, что они связаны с некоторыми принципами (п. 6.2). Заметим, что данный процесс выполняется группой лиц (оптимально — три-четыре человека), лишьодин из которых является автором программы. Следовательно,программа, по существу, тестируется не автором, а другимилюдьми, которые руководствуются изложенными выше принципами, обычно не эффективными при тестировании собственнойпрограммы.
Фактически, «инспекция» и «сквозной просмотр»— просто новые названия старого метода «проверки за столом»(состоящего в том, что программист просматривает свою программу перед ее тестированием), однако они гораздо более эффективны опять-таки по той же причине: в процессе участвуетне только автор программы, но и другие лица. Результатом использования этих методов, по-видимому, также является болеенизкая стоимость отладки (исправления ошибок), так как вовремя поиска ошибок обычно точно определяют их природу.Кроме того, с помощью данных методов обнаруживают группыошибок, что позволяет в дальнейшем корректировать несколькоошибок сразу. С другой стороны, при тестировании на ЭВМобычно выявляют только симптомы ошибок (например, про-100грамма не закончилась или напечатала бессмысленный результат), а сами они определяются поодиночке.Эксперименты по применению этих методов показали,что с их помощью для типичных программ можно находить от30 до 70 % ошибок логического проектирования и кодирования(однако эти методы не эффективны при определении ошибокпроектирования «высокого уровня», например сделанных в процессе анализа требований).
Так, экспериментально установлено,что при проведении инспекций и сквозных просмотров определяются в среднем 38 % общего числа ошибок в учебных программах. При использовании инспекций исходного текста вфирме IBM эффективность обнаружения ошибок составляет80 % (в данном случае имеется в виду не 80 % общего числаошибок, поскольку, как отмечалось в п. 6.2, общее число ошибок в программе никогда не известно, а 80 % всех ошибок,найденных к моменту окончания процесса тестирования).
Конечно, можно критиковать эту статистику в предположении,что ручные методы тестирования позволяют находить только«легкие» ошибки (те, которые можно просто найти при тестировании на ЭВМ), а трудные, незаметные или необычные ошибки можно обнаружить только при тестировании на машине. Однако проведенные исследования показали, что подобная критика является необоснованной. Исследователи сделали также вывод о том, что при нахождении определенных типов ошибокручное тестирование более эффективно, чем тестирование наЭВМ, в то время как для других типов ошибок верно противоположное утверждение.
Подразумевается, что инспекции,сквозные просмотры и тестирование, основанное на использовании ЭВМ, дополняют друг друга; эффективность обнаружения ошибок уменьшится, если тот или иной из этих подходовне будет использован.Наконец, хотя эти методы весьма важны при тестировании новых программ, они представляют не меньшую ценностьпри тестировании модифицированных программ. Опыт показал,что в случае модификации существующих программ вноситсябольшее число ошибок (измеряемое числом ошибок на вновьнаписанные операторы), чем при написании новой программы.Следовательно, модифицированные программы также должныбыть подвергнуты тестированию с применением данных методов.1016.3.2 Инспекции исходного текстаИнспекции исходного текста представляют собой наборпроцедур и приемов обнаружения ошибок при изучении (чтении) текста группой специалистов.
При рассмотрении инспекций исходного текста внимание будет сосредоточено в основных процедурах, формах выполнения и т.д.; после краткого изложения основной процедуры мы изучим существующие методы обнаружения ошибок.Инспектирующая группа включает обычно четыре человека, один из которых выполняет функции председателя. Председатель должен быть компетентным программистом, но не автором программы; он не должен быть знаком с ее деталями. Вобязанности председателя входят подготовка материалов длязаседаний инспектирующей группы и составление графика ихпроведения, ведение заседаний, регистрация всех найденныхошибок и принятие мер по их последующему исправлению.Председателя можно сравнить с инженером отдела технического контроля. Членами группы являются автор программы,проектировщик (если он не программист) и специалист по тестированию.Общая процедура заключается в следующем.
Председатель заранее (например, за несколько дней) раздает листингпрограммы и проектную спецификацию остальным членамгруппы. Они знакомятся с материалами, предшествующими заседанию. Инспекционное заседание разбивается на две части:1. Программиста просят рассказать о логике работы программы. Во время беседы возникают вопросы, преследующие цель обнаружения ошибки. Практика показала, что даже только чтение своей программы слушателям представляется эффективным методом обнаружения ошибок и многие ошибки находит сам программист, а не другие члены группы.2.
Программа анализируется по списку вопросов для выявления исторически сложившихся общих ошибокпрограммирования (такой список будет рассмотрен вследующем разделе).Председатель является ответственным за обеспечение результативности дискуссии. Ее участники должны сосредоточить102свое внимание на нахождении ошибок, а не на их корректировке (корректировка ошибок выполняется программистом послеинспекционного заседания).По окончании заседания программисту передается списокнайденных ошибок.