Скачиваний:
17
Добавлен:
09.09.2020
Размер:
164.83 Кб
Скачать

. Отладка компьютерных программ

Старший преподаватель Кафедры ВС, к.т.н. Поляков Артем Юрьевич

1

Отладка программ

Макконнел, С. Совершенный код (Code complete)

«Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете»

•"Отладка — это процесс определения и устранения причин ошибок. Этим она отличается от тестирования, направленного на их обнаружение..."

•"В некоторых проектах отладка занимает до 50% общего времени разработки…"

•"Большинство дефектов " – это "недосмотры и опечатки"

•В каждой группе есть … программист, бесконечно сражающийся с демоническими компьютерами, таинственными дефектами компилятора, скрытыми дефектами языка…" и "… заколдованным текстовым редактором…"

•"... Отладка включает в себя поиск дефекта и его исправление. Поиск и понимание дефекта обычно составляют 90% работы..."

2

Метод поиска дефекта, основанный на научном методе

1.Стабилизация ошибки.

2.Определение источника ошибки.

a.Сбор данных, приводящих к дефекту.

b.Анализ собранных данных и формулирование гипотезы, объясняющей дефект.

c.Определение способа подтверждения или опровержения гипотезы, основанного или на тестировании программы или на изучении кода.

d.Подтверждение или опровержение гипотезы при помощи процедуры, определенной в п. 2 (с)

3.Исправление дефекта

4.Тестирование исправления

•. Поиск похожих ошибок

3

Инструменты отладки программ

утилиты сравнения исходного кода (diff)

системы управления версиями

сообщения компилятора

утилиты расширенной проверки синтаксиса и логики (lint)

программные отладчики

профилировщики

©

4

Утилиты сравнения исходного кода (diff)

В вычислительной технике diff — утилита сравнения файлов, выводящая разницу между двумя файлами.

Эта программа выводит построчно изменения, сделанные в файле (для текстовых файлов). Современные реализации поддерживают также двоичные файлы.

5

Утилиты сравнения исходного кода (diff) (пример)

#include <stdio.h>

 

 

 

 

 

#include <stdio.h>

 

 

 

int main()

 

 

 

 

 

int main()

 

 

 

 

 

 

 

 

 

{

 

 

int x, y;

 

 

 

 

 

 

 

 

 

int x, y;

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if(y == 0)

 

 

 

 

 

 

 

 

 

 

if(y == 0){

 

 

 

 

}

 

x = 10;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x = 10;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

scanf("%d",&x);

 

 

 

 

 

 

 

 

 

 

scanf("%d",&x);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if( x > 5 )

 

 

 

 

 

 

 

 

 

 

if( x > 5 )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x = 5;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x = 5;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

printf("x = %d", x);

 

 

 

 

 

 

 

 

 

 

printf("x = %d", x);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

bad.c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

good.c

6

Утилиты сравнения исходного кода (diff) (пример)

$diff –Naur bad.c good.c > good.patch

---bad.c 2011-10-20 08:36:32.000000000 +0700

+++ good.c 2011-10-20 12:10:56.403033996 +0700 @@ -4,7 +4,7 @@

{

int x, y;

- if(y == 0)

+if(y == 0){ x = 10;

}

scanf("%d",&x);

7

Системы управления версиями

Система управления версиями (от англ. Version Control System, VCS или Revision Control System) — программное обеспечение для облегчения работы с изменяющейся информацией.

•Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости, возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение и

многое другое.

•Такие системы наиболее широко применяются при разработке программного обеспечения, для хранения исходных кодов разрабатываемой программы.

8

Типичный порядок работы с системой управления версиями

Начало работы с проектом: извлечение рабочей копии проекта или той его части, с которой предстоит работать.

Ежедневный цикл работы

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

Модификация проекта: разработчик модифицирует проект, изменяя входящие в него файлы в рабочей копии в соответствии с проектным заданием. Эта работа производится локально и не требует обращений к серверу VCS.

Фиксация изменений: Завершив очередной этап работы над заданием, разработчик фиксирует (commit) свои изменения, передавая их на сервер. Фиксации присваивается номер, по которому внесенные изменения будут доступны в дальнейшем.

9

Существующие системы управлениями версиями

CVS (Concurrent Versions System, "Система Одновременных Версий") - одна из первых широко распространенных свободных централизованных систем управления версиями.

Subversion (также известная как "SVN") - свободная централизованная система управления версиями, официально выпущенная в 2004 году компанией CollabNet Inc. Subversion реализует все основные функции CVS и свободна от ряда недостатков последней. Используется многими сообществами разработчиков открытого программного обеспечения, в их числе: Apache, GCC, Python, Ruby, Mono, FreeBSD.

Git - свободная распределённая система управления версиями файлов. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux. Проекты, использующие Git: ядро и некот. дистрибутивы Linux, Drupal, GNU Core Utilities, Wine, Chromium, jQuery.

10