Разработка сложных программных изделий


Трудности отладки


Отладка (debugging) — процесс нахождения местоположения ошибок в программе и их исправление. Процесс отладки начинает­ся после обнаружения факта ошибки в результате тестирования и осуществляется в два этапа.

Первый этап — установление причины ошибки и ее локализа­ция (определение ее местоположения в программе); второй — ис­правление ошибки и проверка правильности работы программы.

Таким образом, основным средством обнаружения ошибок при отладке является тестирование. Тестирование и отладка при этом обычно проводятся одновременно. Принято выделять три стадии тестирования для:

• обнаружения ошибки в программе;

• установления местонахождения ошибки;

• подтверждения правильности работы программы после прове­денной корректировки.

Как показывает опыт разработки программного обеспечения, трудоемкость отладки превышает суммарную трудоемкость разра­ботки алгоритма, программирования (кодирования) и тестирова­ния. Затраты времени на отладку составляют (по результатам ряда исследователей) от 50 до 80% общего времени разработки програм­мы, поэтому отладку иногда называют искусством обнаружения местоположения ошибок в программе.

В результате разработки многочисленных программных изде­лий было установлено, что даже опытные программисты испыты­вают серьезные трудности в обнаружении причины ошибки. Они не знают, какие из ошибок наиболее вероятны, какие участки про­грамм подвержены ошибкам в наибольшей степени, какие страте­гии поиска ошибок наиболее эффективны и т.п. Это обусловлено тем, что обычно учат алгоритмизации и программированию задач, но не учат отладке и тестированию. Кроме этого, программисты относятся к процессу отладки, как правило, негативно, предпочитая ему более творческий процесс разработки алгоритма.

К причинам, определяющим значительную трудоемкость про­цесса отладки, следует отнести и нарушение программистами дис­циплины структурной методологии, т.е. принципа формальности, который требует следования при проектировании и кодировании формальным правилам и методам разработки структурных про­грамм.
Выполнение структурных требований позволяет избежать большинства ошибок и заметно упростить процедуру отладки про­граммы. К сожалению, многие программисты стремятся как можно быстрее написать программу, а затем обнаруживать ошибки путем многократного ее выполнения с разнообразными тестовыми данны­ми без их внимательного анализа и тщательного проектирования. Такой подход, обусловленный во многом леностью разработчика, приводит к значительным затратам времени при установлении при­чин ошибок и их локализации, а также к заметному снижению на­дежности программ, что в дальнейшем проявляется на этапе сопро­вождения программного изделия.

Машинные методы отладки для опытных и творческих про­граммистов оказываются наименее эффективными. Как показыва­ют исследования, наиболее существенными для повышения эффек­тивности отладки являются априорные знания о статистике ошибок и их наиболее вероятных типах, а также знания о структуре про­граммы и об участках программы, в наибольшей степени предрас­положенных к ошибкам. Такими участками, как показывает опыт, являются прежде всего участки с высокой сложностью, поэтому вы­сокое цикломатическое число какого-либо модуля программы по­зволяет предполагать более высокую вероятность появления в нем ошибок.

С точки зрения организации работ по отладке программы наи­более эффективным считается групповой метод отыскания ошибок (их причин и местоположения в программе), когда два программис­та сначала независимо, а затем совместно осуществляют этот про­цесс. Такой подход более предпочтителен, чем индивидуальная ра­бота одного программиста. Повышение эффективности работы по обнаружению и локализации ошибок может быть достигнуто путем попеременного внимательного анализа программы за столом и ма­шинного тестирования.

К трудностям отладки программ следует также отнести и разно­образие ситуаций, возникающих перед началом ее выполнения. Си­туации могут быть следующие:

1. Компилятор не выдает сообщений об ошибках, но программа не компилируется.

2. Программа откомпилирована, но при выполнении не выдает никаких результатов.

3. Программа откомпилирована, но при выполнении происхо­дит преждевременный останов. '

4. Программа зацикливается.

5. Программа выдает неверные результаты.


Содержание раздела