И. Соммервилл - Инженерия программного обеспечения (1133538), страница 102
Текст из файла (страница 102)
На основе опыта проведения инспектирования в компании 1ВМ сделаны следующие оценки. 396 х1асть У. Верификация и аттестация 1. На этапе предварительного просмотра за один час можно просмотреть приблизительно 500 операторов исходного кода. 2. Во время индивидуальной подготовки за один час можно проверить примерно 125 операторов исходноучкрда. 3. На собрании за один час можно проверить от 90 до 125 операторов.
Эти цифры также подтверждаются данными, полученными во время проведения инспектирования компании АТэгТ [221. Принято считать, что максимальная длительность инспектирования не должна пре. вышать двух часов, поскольку потом эффективность обнаружения дефектов снижается. Поэтому в процессе разработки ПО инспектирование относительно малых системных компонентов должно выполняться достаточно часто. Если команда инспектирования состоит из четырех человек, на проверку 100 строк кода требуется примерно один человеко-день. Считается, что сам процесс инспектирования занимает около часа, плюс каждый член команды тратит 1-2 часа на подготовку к инспектированию.
Расходы на тестирование также существенно зависят от количества ошибок в программе. Но, с другой стороны, на инспектирование программы требуется вполовину меньше затрат, чем на эквивалентное тестирование программ. Обеспечение инспектирования ПО требует квалифицированного управления и "правильного" отношения к результатам его проведения. Инспектирование — открытый процесс обнаружения ошибок, когда ошибки, допущенные отдельным программистом, неизбежно выявляются и становятся известны всей группе программистов.
Менеджеры должны четко разграничивать инспектирование программного кода и оценку кадров. При оценке профессиональных качеств специалистов ни в коем случае нельзя учитывать ошибки, обнаруженные в процессе инспектирования. Руководителям инспекционных групп необходимо пройти тщательную подготовку, чтобы грамотно управлять процессом н совершенствовать культуру отношений, которая гарантировала бы поддержку в процессе обнаружения ошибок и отсутствие каких-либо обвинений в связи с этими ов~нбками. 19.3. Автоматический статический анализ программ Статические анализаторы программ — это инструментальные программныс средства, которые сканируют исходный текст программы и вылвляют возможныс ошибки и проти. воречня.
Для анализаторов ие требуется исполняемая программа. Они выполняют синтаксический разбор текста программы и опознают различные типы операторов. Таким образом, с помощью анализаторов можно проверить, правильно ли составлены операторы, сделать выводы относительно потока управления в программе и во многих случаях вычислить множество значений данных, используемых про~раиной.
Анализаторы дополняют средства обнаружения ошибок, предоставляемых компилятором языка. Цель автоматического статического анализа — привлечь внимание проверяющего к аномалиям в программе, например к переменным, которые используются без инициализации или совсем не используются, или к данным, значения которых превышают задан. нос, и т.п. В табл.
19.3 перечислены типы ошибок, которые можно выявить с помощью статического анализа. Автоматический статический анализ лучше всего применять вместе с инспектированием ПО, так как он предоставляет дополнительную информацию инспекционной группе. 19. Верификация и аттестация ПО 397 Таблица 19.$. Ошибки, обнаруживаемые статическим анализом Опвсавие ошвбки Твп ошибки Переменные используются до их инициализации; переменные определены, но нигде не используютсадпеременным дважды присваиваются значения, однако между этими присвоениями они нигде не используются; выход за границы массива; переменные не определены Неиспользуемый код, "безусловные переходы в циклах Ошибки данных Ошибки управления Ошибки ввода-вывода Переменныс выводятся дважды без промежуточного присвоения Неправильный тип параметра; неправильное количество пара- метров; результаты функции не используются; есть иевызывае- мые процедуры и функции Ошибки в использовании указателей Ошибки интерфейса Ошибки управления памятью Статический анализ состоит из нескольких этапов.
1. Анализ коэкжа уп)маинкл'. На этом этапе идентифицируются и выделяются циклы, их точки входа и выхода, а также неиспользуемый код (зто код, окруженный безусловными операторами перехода, или код олной из ветвей условного оператора, условие перехода к которой никогда не будет истинным). 2. Акллиз кслазыавлнкл длннмх На этом этапе проверястсл использование переменных в программе. Анализ позволяет обнаружить перемснныс, которые исполыуются без предварительной инициализации, псрсменпыс, которые описаны дважды без промежуточного присвоения, а также объявленные.
но нигде нс использусмыс переменные. На этом этапе также можно выявить условные операторы с избыточны. ми условиями. Это такие условия, значения которых никогда пс изменяются: они либо всегда истинны. либо всегда ложны. 3. Анаакз ккэмрфекга. На этом этапе проверяется согласованность различных частей программы, правильность объявления процедур и их использования.
Данный этап оказывается лишним, если используется язык со строгим контролем типов, например )ача, так как подобный анализ выполняет компилятор этого языка. Анализ интерфейса помогает выявить ошибки в программах, написанных на языках со слабым контролем типов, например ГОйТКАМ или С. В процессе анализа интерфейса можно также выявить объявленные функции и процедуры, которые нигде нс вызываются, и функции, результаты которых не используются. 4. Анллкз намокав данных На этом этапе анализа определяются зависимости между исходными (входными) и результирующими (выходными) переменными. Хотя такой анализ не выявляет конкретных ошибок, он дает полный список значений, нсполь. зуемых в программе, благодаря чему легче обнаружить ошибочный вывод данных. На этом этапе также можно явно определить условия, которые влияют на значения переменных. 5.
Анллкз вежаек ярсг~аммьс На этом этапе семантического анализа определяются все ветви программы и выделяются операторы, исполняемые в каждой ветви. Анализ ветвей программы существенно помогает разобраться в управлении программой н позволяет проанализировать каждую ветвь отдельно. 398 Часть ч'. Верификация и аттестация Анализ потока данных и анализ ветвей генерируют огромное количество информации.
Эта информация не выявляет копкрстньш ошибок, а представляет программу в разных ас. псктах. Иэ-за огромного количества генерируемой информации зти этапы статического анализа иногда исключают нз.процесса анализа и используют только на ранних стадиях для обнаружения аномалий в разрабатываемой программе. Статические анализаторы особенно полезны в тех случаях, когда используются языки программирования, подобные С.
В языке С нет строгого контроля типов, и потому проверка, осуп(сствляемая компилятором языка С, ограниченна. В этом случае средствами статического анализа можно автоматически выявить широкий спектр ошибок програм. мнрования. Данный анализ особенно важен при разработке критических систем. В этом случае статический анализ позволяет значительно сократить расходы на тестирование. В системах ()п(х и (аппх есть статический анализатор 1.1)чТ для программ, написанных на С. Он обеспсчиваст статическую проверку, эквивалентную проверке компилятором в языках со строгим контролем типов, например (ача, В листинге 19.1 представлен образец результата проверки программы с помощью анализатора 1.(ХТ.
Первая команда анализа. тора просматривает программу. В программе определена функция рг(п(аггеу с одним параметром, которая затем вызывает ее с тремя парамстрамн. Переменные ) и с определены, однако значения им ниглс не присваиваются. Возвращаемое функцией значение также нигде нс используется. Листинг 19.1. Статический анализ, выполненный анализатором ЫХТ 158$ мохе 1эпг ех.с 41пс1ис)е <вес)до.Ь> ргапсаггау (Аиаггау) дпг Апаггау; ( рг1пгг("Ъс)",Апаггау)г ваап() ( 1пс Апагтау(5)г 1пс 1; спаг с; ргапгаггау(Апаггау,д.с); ргдпгагтау(Апаггау); ) 139$ сс 11пг ех.с 140$ 11пс 11пг ех.с 11пг ех.с(10): магпгпд: с жау Ье овес) Ьегоге вес 11пг ех.с(10): магпапд: 1 тау Ье овес) Ьеуоге вег ргдпгаггау: чагдаЬ1е З ог агдв.11пс ех.с(4) ::11пг ех.с(10) ргдпгаггау, агд. 1 пвед эпсопвдвгепг1у 11пг ех.с(4) ::11пг ех.с(10) ргдпсаггау, агд.
1 плес) 1псопвдвсепс1у 11пг ех.с(4) ;:11пс ех.с(11) рг1псг гесигпэ ча1пе мьбсЬ 1в а1маув 1дпогес) В строке 139 выполняется компиляция С-программы, в результате которой компилятор не обнаружил ни одной ошибки. В следующей за ней строке следует вызов анализато.
ра (.)ХТ, который находит ошибки и предоставляет отчет. Статический анализатор выявил, что используемые скалярные переменные с и ( не иннциализированы, функция рпп(аггау вызывается с другим количеством аргументов, чем указано при ес определении. Также обнаружено непоследовательное использование пср- 19. Верификация и аттестация ПО 399 вого арлумента в функции рпп(впву, кроме того, анализатор обнаружил, что значение функции нигде не используется. Анализ с помощью инструментальных средств не может заменить инспектирования, так как существуют такие типы ошибок, которые невозможно; выявить с помощью статического анализа.