tehnologia (1018792), страница 47
Текст из файла (страница 47)
Перечислите известные вам виды контроля качества программного обеспечения. Накаких этапах применяют каждый их них?3. Какие подходы к тестированию вы знаете? В чем они заключаются?4. Почему функциональное тестирование называют «тестированием по методучерного ящика»? Перечислите методы функционального тестирования и определите, в какихслучаях следует использовать каждый из них.5. Почему структурное тестирование называют «тестированием по методу белого илипрозрачного ящика»? Перечислите методы структурного тестирования и определитевозможности каждого из них.
Какой метод структурного тестирования обеспечиваетнаибольшую вероятность обнаружения ошибок?2856. Используя методы обоих подходов, сформируйте пакет тестов для тестированияпрограммы, вычисляющей действительные корни квадратного уравнения. Какие методы выиспользовали и почему?7. Чем нисходящее тестирование отличается от восходящего? Что понимают подкомплексным тестированием и чем оно отличается от тестирования компонент? Когдаможно прекращать тестирование компонентов?8. Перечислите виды тестирования системы в целом.
В каких случаях применяюткаждый из них?28610. ОТЛАДКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯОтладка программы - один их самых сложных этапов разработки программного обеспечения, требующийглубокого знания:• специфики управления используемыми техническими средствами,• операционной системы,• среды и языка программирования,• реализуемых процессов,• природы и специфики различных ошибок,• методик отладки и соответствующих программных средств.Обсуждению последних двух вопросов и посвящается данная глава.10.1. Классификация ошибокОтладка - это процесс локализации и исправления ошибок, обнаруженных притестировании программного обеспечения.
Локализацией называют процесс определенияоператора программы, выполнение которого вызвало нарушение нормальноговычислительного процесса. Для исправления ошибки необходимо определить ее причину, т.е. определить оператор или фрагмент, содержащие ошибку. Причины ошибок могут быть какочевидны, так и очень глубоко скрыты.В целом сложность отладки обусловлена следующими причинами:• требует от программиста глубоких знаний специфики управления используемымитехническими средствами, операционной системы, среды и языка программирования,реализуемых процессов, природы и специфики различных ошибок, методик отладки исоответствующих программных средств;• психологически дискомфортна, так как необходимо искать собственные ошибки и,как правило, в условиях ограниченного времени;• возможно взаимовлияние ошибок в разных частях программы, например, за счетзатирания области памяти одного модуля другим из-за ошибок адресации;• отсутствуют четко сформулированные методики отладки.287В соответствии с этапом обработки, на котором проявляются ошибки, различают (рис.10.1):синтаксические ошибки - ошибки, фиксируемые компилятором (транслятором,интерпретатором) при выполнении синтаксического и частично семантического анализапрограммы;ошибки компоновки - ошибки, обнаруженные компоновщиком (редактором связей)при объединении модулей программы;ошибки выполнения - ошибки, обнаруженные операционной системой, аппаратнымисредствами или пользователем при выполнении программы.Синтаксические ошибки.
Синтаксические ошибки относят к группе самых простых,так как синтаксис языка, как правило, строго формализован, и ошибки сопровождаютсяразвернутым комментарием с указанием ее местоположения. Определение причин такихошибок, как правило, труда не составляет, и даже при нечетком знании правил языка занесколько прогонов удается удалить все ошибки данного типа.Следует иметь в виду, что чем лучше формализованы правила синтаксиса языка, тембольше ошибок из общего количества может обнаружить компилятор и, соответственно,меньше ошибок будет обнаруживаться на следующих этапах.
В связи с этим говорят оязыках программирования с защищенным синтаксисом и с незащищенным синтаксисом. Кпервым, безусловно, можно отнести Pascal, имеющий очень простой и четко определенныйсинтаксис, хорошо проверяемый при компиляции программы, ко вторым - Си со всеми егомодификациями. Чего стоит хотя бы возможность выполнения присваивания в условномоператоре в Си, например:if (с=n) х=0; /* в данном случае не проверятся равенство с и n, а выполняетсяприсваивание с значения n, после чего результат операции сравнивается с нулем, еслипрограммист хотел выполнить не присваивание, а сравнение, то эта ошибка будетобнаружена только на этапе выполнения при получении результатов, отличающихся отожидаемых*/288Ошибки компоновки.
Ошибки компоновки, как следует из названия, связаны спроблемами, обнаруженными при разрешении внешних ссылок. Например, предусмотренообращение к подпрограмме другого модуля, а при объединении модулей даннаяподпрограмма не найдена или не стыкуются списки параметров. В большинстве случаевошибки такого рода также удается быстро локализовать и устранить.Ошибки выполнения.
К самой непредсказуемой группе относятся ошибкивыполнения. Прежде всего они могут иметь разную природу, и соответственно по-разномупроявляться. Часть ошибок обнаруживается и документируется операционной системой.Выделяют четыре способа проявления таких ошибок:• появление сообщения об ошибке, зафиксированной схемами контроля выполнениямашинных команд, например, переполнении разрядной сетки, ситуации «деление на ноль»,нарушении адресации и т. п.;• появление сообщения об ошибке, обнаруженной операционной системой, например,нарушении защиты памяти, попытке записи на устройства, защищенные от записи,отсутствии файла с заданным именем и т. п.;• «зависание» компьютера, как простое, когда удается завершить программу безперезагрузки операционной системы, так и «тяжелое», когда для продолжения работынеобходима перезагрузка;• несовпадение полученных результатов с ожидаемыми.Примечание.
Отметим, что, если ошибки этапа выполнения обнаруживает пользователь, то в двухпервых случаях, получив соответствующее сообщение, пользователь в зависимости от своего характера,степени необходимости и опыта работы за компьютером, либо попробует понять, что произошло, ища своювину, либо обратится за помощью, либо постарается никогда больше не иметь дела с этим продуктом. При«зависании» компьютера пользователь может даже не сразу понять, что происходит что-то не то, хотя егопечальный опыт и заставляет волноваться каждый раз, когда компьютер не выдает быстрой реакции навведенную команду, что также целесообразно иметь в виду. Также опасны могут быть ситуации, при которыхпользователь получает неправильные результаты и использует их в своей работе.Причины ошибок выполнения очень разнообразны, а потому и локализация можетоказаться крайне сложной.
Все возможные причины ошибок можно разделить на следующиегруппы:• неверное определение исходных данных,• логические ошибки,•накопление погрешностей результатов вычислений (рис. 10.2).Неверное определение исходных данных происходит, если возникают любые ошибкипри выполнении операций ввода-вывода: ошибки передачи, ошибки преобразования, ошибкиперезаписи и ошибки данных. Причем использование специальных технических средств и289программирование с защитой ошибок (см. § 2.7) позволяет обнаружить и предотвратитьтолько часть этих ошибок, о чем безусловно не следует забывать.Логические ошибки имеют разную природу. Так они могут следовать из ошибок,допущенных при проектировании, например, при выборе методов, разработке алгоритмовили определении структуры классов, а могут быть непосредственно внесены прикодировании модуля.
К последней группе относят:• ошибки некорректного использования переменных, например, неудачныйвыбор типов данных, использование переменных до их инициализации, использованиеиндексов, выходящих за границы массивов, нарушения соответствия типов данных прииспользовании явного или неявного переопределения типа данных, расположенных в памятипри использовании нетипизированных переменных, открытых массивов, объединений,динамической памяти, адресной арифметики и т.п.;290• ошибки вычислении, например, некорректные вычисления над неарифметическимипеременными, некорректное использование целочисленной арифметики, некорректноепреобразование типов данных в процессе вычислений, ошибки, связанные с незнаниемприоритетов выполнения операций для арифметических и логических выражений, и т.
п.;• ошибки межмодульного интерфейса, например, игнорирование системныхсоглашений, нарушение типов и последовательности при передаче параметров,несоблюдение единства единиц измерения формальных и фактических параметров,нарушение области действия локальных и глобальных переменных;• другие ошибки кодирования, например, неправильная реализация логики программыпри кодировании, игнорирование особенностей или ограничений конкретного языкапрограммирования.Накопление погрешностей результатов числовых вычислений возникает, например,при некорректном отбрасывании дробных цифр чисел, некорректном использованииприближенных методов вычислений, игнорировании ограничения разрядной сеткипредставления вещественных чисел в ЭВМ и т.п.Все указанные выше причины возникновения ошибок следует иметь в виду впроцессе отладки.