Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
###Cpp_лкц1_1.09_11_#дляБАК#29_01_12.doc
Скачиваний:
67
Добавлен:
29.04.2019
Размер:
6.42 Mб
Скачать

Глава 3. Технология создания программ

109

Проектирование и тестирование программы

Законы Мэрфи

Все сложнее, чем кажется.

Все тянется дольше, чем можно ожидать.

Если что-то может испортиться, оно обязательно портится.

Комментарий Каллагана к законам Мэрфи Мэрфи был оптимистом.

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

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

Когда программа впервые доходит до стадии выполнения, в нее вводятся произвольные значения, после чего экран на некоторое время становится объектом пристального удивленного изучения. «Работает» такая программа обычно только в бережных руках хозяина на одном наборе исходных данных, а внесение даже небольших изменений может привести автора к потере веры в себя и ненависти к процессу программирования.

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

1 Обязательно упоминается Билл Гейтс.

2 Мне очень нравится это выражение Б. Страуструпа, поэтому я повторяю его уже второй раз.

110

Часть I. Структурное программирование

ПРИМЕЧАНИЕ

Прежде чем говорить об основных этапах создания программы, хотелось бы упомянуть о более абстрактных вещах — принципах, которыми должен руководствоваться каждый программист. Очень часто программисты упрямо считают, что их основной целью является изобретение новых изощренных алгоритмов, а не выполнение полезной работы, и напоминают этим печально известную точку зрения «магазин — для продавца, а не для покупателя». Надо помнить о том, что программист в конечном счете всегда работает для пользователя программы и является членом коллектива, который должен обеспечить создание надежной программы в установленный срок.

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

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

I этап. Создание любой программы начинается с постановки задачи. Изначально задача ставится в терминах предметной области, и необходимо перевести ее в термины, более близкие к программированию. Поскольку программист редко досконально разбирается в предметной области, а заказчик — в программирова нии (простой пример: требуется написать бухгалтерскую программу), постанов ка задачи может стать весьма непростым итерационным процессом. Кроме того, при постановке задачи заказчик зачастую не может четко и полно сформулиро вать свои требования и критерии. В качестве иллюстрации приведу карикатуру «Качели» (рис. 3.1), которая появилась 1973 году в информационном бюллетене вычислительного центра Лондонского университета и сразу стала широко из вестной, поскольку очень точно отражала процесс создания программы.

Постановка задачи завершается созданием технического задания, а затем внешней спецификации программы, включающей в себя:

  • описание исходных данных и результатов (типы, форматы, точность, способ передачи, ограничения)1;

  • описание задачи, реализуемой программой;

  • способ обращения к программе;

  • описание возможных аварийных ситуаций и ошибок пользователя.

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

II этап. Разработка внутренних структур данных. Большинство алгоритмов за висит от того, каким образом организованы данные, поэтому интуитивно ясно,

Под типами и форматами не имеются в виду типы языка программирования.