Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЕХПРОГ.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
142.85 Кб
Скачать

2. Стандарты структурного программирования

1. Для улучшения процесса разработки сложной программы её делят на независимые части, называемые модулями, оформляемые по определенным правилам.

Модуль — это независимый блок, код которого физически и логически отделен от кода других модулей.

2. Модуль выполняет одну логическую функцию.

3. Размер модуля должен быть не больше 100 операторов.

4. У модуля должна быть одна входная и одна выходная точка.

5. Взаимосвязь модулей иерархическая.

6. Начинаться каждый блок должен с комментария.

7. Избегать ненужных меток и оператора GOTO.

8. Все имена должны быть смысловыми (мнемоническими).

9. Родственные группы имен должны начинаться с одинакового префикса.

10. Использовать только стандартные управляющие конструкции: выбор, цикл, блок , выход.

11. Записывать в строке один оператор. Если оператор не помещается на одной строке, то последующие строки записываются с отступами.

12. Вложенность операторов IF не более 3-х уровней.

13. Избегать программистских "трюков".

Структурировать программу – это значит составлять её из стандартных структур, соблюдая определённую форму записи.

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

3. Этапы процесса разработки программы

Процесс разработки программы можно разделить на два основных этапа:

  1. составление программы;

  2. доказательство её правильности.

Практически невозможно без ошибок составить программу для решения реальной задачи. Наличие ошибок во вновь составленной программе явление вполне нормальное и не стоит им удивляться, а лучше понимать справедливость древнего высказывания: "Человеку свойственно ошибаться".

Если программа проработала и выдала какой-то результат, то нельзя еще на этом основании делать вывод , что она правильная. В программе могут оставаться логические и другие ошибки, которые надо найти и исправить в процессе отладки и тестирования.

4. Отладка и тестирование

Одним из трудоемких этапов жизненного цикла программы является отладка – процесс обнаружения, локализации и устранения ошибок в программе.

Ошибки могут быть допущены на любых этапах решения задачи – от постановки до оформления. Все ошибки можно разделить на три вида: 1. синтаксические; 2. ошибки выполнения; 3. логические ошибки и ошибки, связанные с неправильной постановкой задачи, неправильным выбором модели и/или алгоритма решения задачи.

К синтаксическим относятся ошибки, заключающиеся в нарушении правил записи конструкций языка, такие, как отсутствие описания имени или разделителя между операторами, несоответствие типов или скобок, неверное написание служебных слов и т. д. [см п. 6.1]. Причиной возникновения таких ошибок являются недостаточное знание языка программирования, невнимательность и опечатки при наборе текста программы. Эти ошибки обнаруживаются компилятором, а потому они легко устраняются. К тому же Паскаль строго контролирует типы данных и потому все объекты, используемые в программе, должны быть описаны в разделе описаний, в противном случае при трансляции программы при обнаружении неизвестного идентификатора компилятор выдаст сообщение об ошибке. Но отсутствие синтаксических ошибок не является свидетельством правильности программы. Существует много ошибок, которые транслятор не в состоянии выявить, например: неправильное задание исходных данных, использование переменных без задания их начальных значений, индексы в массиве следуют в неправильном порядке, неправильное указание начала цикла, пропуск в программе одного или более блоков алгоритма, неполный учет возможных условий, неправильное указание числа повторений цикла и т. д. Все эти ошибки можно выявить с помощью тестирования.

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

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

До выполнения программы текст программы можно проконтролировать с помощью просмотра, проверки и прокрутки.

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

При проверке программы программисту следует мысленно по тексту программы выявить вычислительный процесс, который реализует программа, и сравнить его с требуемым.

Во время прокрутки программы программист имитирует выполнение программы с какими-то заданными исходными данными. Совокупность исходных данных надо выбирать так, чтобы при прокрутке проверялась работа всех ветвей программы. Прокрутка является трудоемким процессом, а потому ее надо применять лишь для контроля логически сложных участков программы.

Тестирование – это испытание, проводимое с целью проверки правильности работы программы в целом или ее отдельных частей.

Существует две стратегии тестирования: структурное ( по принципу "белого ящика" ) и функциональное ( по принципу "чёрного ящика" ).

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

При функциональном тестировании логика программы не учитывается, а анализируются лишь входные и выходные спецификации.

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

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

Разработка тестовых вариантов данных – задача довольно сложная. Но даже эффективное тестирование хотя и выявляет ошибки, но не гарантирует их отсутствие. Уменьшить число необнаруженных ошибок по сравнению с бессистемной проверкой программы позволяет следование нескольким практически полезным правилам тестирования.

1. Следует готовить не только исходные данные для тестовых вариантов, но и находить заранее ответы для них. Так как, если не знать эталонных результатов теста до выполнения программы, то очень легко принять неверные результаты за правильные.

2. Важно, чтобы среди наборов тестовых данных были представлены некорректные исходные данные, чтобы можно было проверить, осмысленно ли реагирует на них программа.

3. Составление тестов следует начинать практически до составления программы. Программу писать проще, когда выявлены случаи, подлежащие проверке.

4. Составление тестов продолжается параллельно с разработкой программы. Так, если в программе пишется условная конструкция, то тестовые данные пополняются, чтобы обеспечить проверку и для ложного , и для истинного условия.

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

6. Результаты выполнения тестов следует тщательно анализировать, иначе тестирование теряет смысл.

7. Первый тест должен быть простым чтобы проверить, работает ли программа.

8. Усложнение тестов должно происходить постепенно.

9. Система тестов должна быть такой, чтобы была проверена каждая ветвь программы.

10. Каждый новый тест должен контролировать то, что не было проверено ранее.

11. Вычисления должны быть минимизированы, но так, чтобы не снижать надежности контроля.

12. Систему тестов следует хранить чтобы тестирование при необходимости можно было повторить.

Тестовые данные должны обеспечить выявление всех возможных ошибок

Например, для программы решения квадратных уравнений надо проверить следующие случаи: 1) старший коэффициент равен нулю (некорректные исходные данные; уравнение линейное, корень один), 2) корни комплексные, 3) корни совпадают (крайний случай), 4) один из корней равен нулю (ещё один крайний случай), 5) уравнение имеет два различных корня, не равных нулю, 6) все коэффициенты равны нулю (любое число является корнем), 7) a=0, b=0, c не равно 0 (неправильное уравнение).

Тестирование устанавливает факт наличия ошибок, а отладка выясняет их причину.

При отладке происходит поиск, локализация и исправление ошибок, обнаруженных в программе при прогоне ее на компьютере.

Отлаживая программы, надо помнить:

– в начале отладки следует использовать простые тестовые данные;

– возникающие проблемы надо четко разделять и устранять поочередно;

– не стоит считать причиной ошибок машину, так как современные компьютеры и программные средства обладают высокой надежностью.

В процессе отладки используются точки прерывания, пошаговое выполнение программы, просмотр значений ряда переменных и выражений на различных шагах выполнения программы, может быть, попытаться изменить их и проследить реакцию программы. Перечисленные действия можно выполнить удобными средствами, предоставляемыми интегрированным отладчиком системы TURBO PASCAL. При этом используются "горячие" клавиши: F4, F7, F8, Ctrl/ F2, Ctrl/ F3, Ctrl/ F4, Ctrl/ F7, Ctrl/ F8 (см. п. 5.6 и 5.8, описание команд меню Run и Debug).

Программу условно можно считать правильной, если её выполнение для системы эталонных тестов дает правильные результаты.