Какие основные этапы разработки программы существуют. Процесс разработки программного обеспечения

25.04.2019

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

Процесс разработки программного обеспечения можно разбить на этапы (фазы), показанные на рис. 15.

Рис. 15. Этапы разработки программного обеспечения

Работа над программным обеспечением начинается с составления документа, называемого “Задание на разработку программного обеспечения (техническое задание)”.

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

Техническое задание

Техническое задание включает в себя три этапа: 1) обоснование необхо­димости разработки программы; 2) проведение научно-исследовательских работ; 3) разработка и утверждение технического задания.

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

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

Разработка и утверждение технического задания включает в себя:

Определение требований к программе;

Разработку технико-экономического обоснования разработки программы;

Определение стадий, этапов и сроков разработки программы и документации на нее;

Выбор языков программирования;

Определение необходимости проведения научно-исследовательских работ на последующих стадиях;

Согласование и утверждение технического задания.

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

Какими должны быть входные данные?

Какие данные являются корректными и какие ошибочными?

Кто будет использовать программное обеспечение, и каким должен быть интерфейс (средство общения с пользователем)?

Какие упрощения, предположения и допущения можно сделать по отношению к программам?

Какими должны быть выходные данные?

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

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

Проектирование

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

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

1) он имеет средства взаимодействия с внешней средой;

2) он является самостоятельной программной единицей, выполняющей определенные функции.

Частью интерфейса являются потоки данных. При описании их для каждого модуля необходимо дать ответы на следующие вопросы:

Какие данные можно передать в модуль до начала его выполнения?

Какие упрощения, предположения и допущения сделаны по отношению к модулю?

Что будет с данными после того, как модуль завершит свою работу?

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

Рис. 16. Пример спецификации модуля

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

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

Рабочий проект

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

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

Кодирование должно быть простым. Должен соблюдаться так называемый KISS–принцип: Keep It Simple, Stupid (делай проще, глупец!). Изощренное программирование может обойтись слишком дорого при отладке и модификации программы. Необычное кодирование (например, использование скрытых возможностей машины) часто препятствует отладке программы и, конечно, затрудняет ее использование другими программистами.

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

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

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

Тестирование обычно производится в два этапа. Первый – это тестирование модулей. Проверяется поведение и надежность каждого модуля. Второй этап – тестирование интеграции. Модули компонуются в общую программу, и разработчик убеждается в правильности взаимодействия модулей. Программа, управляющая работой модулей, тестируется отдельно от модулей. Сами модули в ней заменяются так называемыми “заглушками”. В “модуле–заглушке” имеется вход, выход и необходимое сообщение. Сообщение может содержать перечень переданных модулю данных.

Тестирование – это проверка программы на работоспособность. Отладка имеет место тогда, когда программа со всей очевидностью работает неправильно. Отладка начинается всегда в предвидении отказа программы. Если же оказывается, что программа работает верно, то она тестируется. Часто случается так, что после прогона тестов программа вновь должна быть подвергнута отладке. Таким образом, тестирование устанавливает факт наличия ошибки, а отладка выявляет ее причину.

Для несложного приложения тестирование может оказаться простым. Большие программы поддаются тестированию с трудом. Возможны устранения ошибок на этапе эксплуатации.

Можно привести примеры ошибок в программных комплексах, допущенных при разработке и не обнаруженных при тестировании.

В “Справочнике Microsoft Works” в интерактивной помощи пакета интегрированной обработки информации Works 2.0 функция ЕСЛИ описана как

ЕСЛИ (Условие, ЗначениеЛожь, ЗначениеИстина).

Однако, в действительности, работа данной функции должна иметь следующий вид: ЕСЛИ (Условие, ЗначениеИстина, ЗначениеЛожь). В “Руководстве пользователя Microsoft Works для Windows” пакета Works 3.0 эта ошибка исправлена.

Неудача при запуске первого американского спутника к Венере случилась, вероятнее всего, из–за ошибки в программе – вместо требуемой в операторе точки программист поставил запятую. Оператор на языке Фортран был записан

Do 50 i = 12,525

На самом же деле он должен был выглядеть следующим образом:

Do 50 i = 12.525

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

В 1983 году произошло наводнение в юго–западной части США. Причина заключалась в том, что в компьютер были введены неверные данные о погоде, в результате чего он дал ошибочный сигнал шлюзам, перекрывающим реку Колорадо.

Для того чтобы пользователи не попали в ситуацию, когда программа работает, но делает не то, что должна делать, проводится тестирование для выявления “скрытых” ошибок. При тестировании используются планы и данные, разрабатываемые уже на этапе проектирования. О тестировании необходимо думать на протяжении всего периода разработки программы (табл. 2).

Таблица 2

Виды и причины ошибок

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

В процессе выполнения всех вышеописанных этапов накапливается опреде­ленный опыт, который даст основание для усовершенствования программы.

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

Внедрение

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

Примером добавления новых функций в программный комплекс является текстовый редактор Лексикон 1.3. Данная версия получена из текстового процессора 1.2 путем включения в него функций – импортирование графических файлов в формате PCX в текстовые файлы.

Документация

На рис. 15 прямоугольник, отражающий каждый этап разработки програм­мы, соединен с прямоугольником “Документ”. При этом стрелки направлены в обе стороны. Идеи и решения, используемые на каждом этапе, влияют на документацию, сопровождающую этап, так же, как и документация влияет на идеи и решения.

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

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

Техническое задание должно содержать следующие разделы:

Введение;

Основания для разработки;

Назначение разработки;

Требования к программе и программному изделию;

Требования к программной документации;

Технико-экономические показатели;

Стадии и этапы разработки;

Порядок контроля и приемки.

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

Спецификация является основным программным документом и составляется в соответствии с ГОСТ. Спецификация представляет собой таблицу, состоящую из граф: “Обозначение”, “Наименование”, “Примечание”. В графе “Обозначение” записывают обозначения перечисляемых документов и программ. В графе “Документация” указывают наименования и вид документа или программы. В графе “Примечание” – дополнительные сведения, относящиеся к записанным в спецификации программам.

Описание программы содержит:

– прокомментированные исходные тексты (листинги) модулей программы и управляющего модуля;

– схему разбиения программного комплекса на программные модули;

– схему потоков данных программного комплекса;

– схему взаимодействия программных модулей;

– планы и данные для тестирования программного комплекса;

– другие материалы, иллюстрирующие проект, например, схемы алгоритмов.

Второй вид документов содержит информацию, необходимую для работы с программным комплексом. Эти документы могут оформляться в печатном виде и (или) “встраиваться” в программный комплекс.

Дисциплина программирования – это важный фактор успеха разработки программных продуктов. Принципы разработки программ, приведенные в последней главе, справедливы для процедурных языков программирования и для объектно-ориентированных языков.

Версия 6.0 Турбо Паскаля, выпущенная в 1990 году, наглядно продемонстрировала преимущества объектно–ориентированной технологии программирования. В комплект поставки новой версии вошла библиотека Turbo Vision, на которой многие тысячи программистов осваивали принципы ООП. За короткий срок появилось множество коммерческих программ, построенных на базе Turbo Vision. Эта библиотека поистине революционизирует процесс разработки интерактивных программ, сокращая до минимума сроки и обеспечивая высочайшее качество программ.

Эволюция технических средств персональных компьютеров привела к повсеместному вытеснению старой “доброй” ОС MS–DOS значительно более мощными системами Windows, программирование для которых существенно сложнее, чем программирование для MS–DOS. С выпуском системы Borland Pascal with Objects корпорация Borland предоставила в распоряжение программистов весьма эффективные средства разработки и отладки программ, рассчитанные на работу под управлением операционной оболочки Windows. Но все же несколько лет назад о создании своих собственных программ под Windows рядовому программисту оставалось только мечтать.

Этапы разработки программ

Моделирование – исследование каких либо явлений или систем путем построения и изучения их моделей.

Формализация – представление и изучение каких либо содержательных областей знания в виде формальной системы.

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

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

Второй этап - математическое описание задачи. Этот этап выполняет разработчик, способный разработать математическое описание задачи. Цель этого этапа – создать математическую модель решаемой задачи, которая может быть реализована в компьютере.

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

Четвертый этап - программирование задачи. Этот этап выполняет разработчик, умеющий программировать. Программа – это представление алгоритма с помощью специальных символов, воспринимаемых компьютером. Составление программы обеспечивает возможность физической реализации алгоритма и соответственно поставленной задачи.

При составлении программы возможно уточнение алгоритма – введение новых блоков, замена одних блоков на другие и т.д.

Пятый этап - разработка тестовой задачи (теста). Для того, чтобы убедиться в правильности составленной программы, необходимо разработать тестовую задачу, которая позволит осуществить проверку всех ветвей алгоритма. Тест или контрольный пример – это по сути дела совокупность таких исходных данных, на основании которых заранее определяется значения выходных данных. Тестовую задачу разрабатывает программист

Шестой этап - перенос программы на машинный носитель. При работе на ПК программа и исходные данные вводятся с клавиатуры.

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

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

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

1. Спецификация (определение, формулирование требований к программе).

2. Разработка алгоритма.

3. Кодирование (запись алгоритма на языке программирования).

4. Отладка.

5. Тестирование.

6. Создание справочной системы.

7. Создание установочного диска (CD-ROM).

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

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

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

Отладка - это процесс поиска и устранения ошибок. Ошибки в программеразделяют на две группы: синтаксические (ошибки в тексте) и алгоритмические. Синтаксические ошибки - наиболее легко устраняемые. Алгоритмические ошибки обнаружить труднее. Этап отладки можно считать законченным, если программа правильно работает на одном-двух наборах входныхданных.

Тестирование - Этап тестирования особенно важен, если вы предполагаете, что вашей программой будут пользоваться другие. На этом этапе следует проверить, какведет себя программа на как можно большем количестве входных наборовданных, в том числе и на заведомо неверных.

Создание справочной системы - Если разработчик предполагает, что программой будут пользоваться другие, то он обязательно должен создать справочную систему и обеспечить пользователю удобный доступ к справочной информации во время работы с программой. В современных программах справочная информация представляется в форме СНМ-или HLP-файлов. Помимо справочной информации,доступ к которой осуществляется из программы во время ее работы, в состав справочной системы включают инструкцию по установке (инсталляции) программы, которую оформляют в виде Readme-файла в одном из


форматов: TXT, DOC или НТМ.

Создание установочного диска - Установочный диск или CD-ROM создаются для того, чтобы пользователь мог самостоятельно, без помощи разработчика, установить программу на свой компьютер. Обычно помимо самой программы на установочном диске находятся файлы справочной информации и инструкция поустановке программы (Readme-файл). Следует понимать, что современные программы, в том числе разработанные в Delphi, в большинстве случаев (за исключением самых простых программ) не могут быть установлены на компьютер пользователя путем простого копирования, так какдля своей работы требуют специальных библиотек и компонентов, которых может и не быть у конкретного пользователя. Поэтому установкупрограммы на компьютер пользователя должна выполнять специальнаяпрограмма, которая помещается на установочный диск. Как правило, установочная программа создает отдельную папку для устанавливаемойпрограммы, копирует в нее необходимые файлы и, если надо, выполняетнастройку операционной системы путем внесения дополнений и изменений в реестр.

Введение

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

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

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

В настоящее время при создании программных продуктов возникает ряд проблем, основными из которых являются следующие:

    Быстрая смена вычислительной техники и алгоритмических языков;

    Не стыковка ЭВМ друг с другом (VAX и IBM);

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

Этапы технологии программирования

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

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

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

    постановка задачи;

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

    построение модели

    разработка алгоритма;

    написание программы;

    отладка программы;

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

    документирование.

Кратко остановимся на каждом из этих этапов.

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

    как определить решение;

    каких данных не хватает и все ли они нужны;

    какие сделаны допущения и т. п.

Таким образом, кратко можно сказать, что на этапе постановки задачи необходимо:

    описание исходных данных и результата;

    формализация задачи;

    описание поведения программы в особых случаях (если таковые есть).

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

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

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

Методы проектирования архитектуры делятся на две группы:

    ориентированные на обработку

    ориентированные на данные.

Методы, ориентированные на обработку , включают следующие общие идеи.

а) Модульное программирование.

Основные концепции:

    каждый модуль реализует единственную независимую функцию;

    имеет единственную точку входа/выхода;

    размер модуля минимизируется;

    каждый модуль разрабатывается независимо от других модулей;

    система в целом построена из модулей.

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

б) Функциональная декомпозиция.

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

в) Проектирование с использованием потока данных.

Использует поток данных как генеральную линию проектирования программы.

Содержит элементы структурного проектирования сверху-вниз с пошаговой детализацией.

г) Технология структурного анализа проекта.

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

Методы проектирования, основанные на использовании структур данных , описаны ниже.

а) Методология Джексона.

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

б) Методология Уорнера.

Подобна предыдущей, но процедура проектирования более детализирована.

в) Метод иерархических диаграмм.

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

г) Объектно-ориентированная методология проектирования.

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

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

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

Рис. 1. Схема построения модели при дедуктивном способе

При дедуктивном подходе (рис. 1) рассматривается частный случай общеизвестной фундаментальной модели. Здесь при заданных предположениях известная модель приспосабливается к условиям моделируемого объекта. Например, можно построить модель свободно падающего тела на основе известного закона Ньютона ma = mg F сопр и в качестве допустимого приближения принять модель равноускоренного движения для малого промежутка времени.

Рис. 2. Схема построения модели при индуктивном способе

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

Технология построения модели при индуктивном способе:

1) эмпирический этап

    умозаключение;

    интуиция;

    предположение;

    гипотеза.

    постановка задачи для моделирования;

    оценки; количественное и качественное описание;

    построение модели.

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

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

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

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

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

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

Выделяют три базовых структурных элемента (управляющие структуры): композицию, альтернативу, итерацию.

Композиция – это линейная конструкция алгоритма, составленная из последовательно следующих друг за другом функциональных вершин:

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

if B then S1 else S2

и неполной развилки:

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

и с постусловием:

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

Процесс структурного программирования обычно начинается с разработки блок-схемы.

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

Для иллюстрации технологии структурного программирования сверху-вниз рассмотрим пример.

Пример. Технология разработки программы решения квадратного уравнения.

На рис. 4.6 проиллюстрирована пошаговая детализация процесса построения алгоритма. Заметим, что для начального шага разработки программы имеем в качестве входных данных коэффициенты а, b, с квадратного уравнения ах 2 +bх + с = 0, а на выходе - значения двух корней х1, х2.

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

На этапе написания программы по разработанному алгоритму на выбранном языке программирования составляется программа.

Отладка программы – это процесс обнаружения и исправления ошибок. Программные ошибки можно разделить на два класса: синтаксические (синтаксис языка программирования) и алгоритмические (логические). Синтаксические ошибки выявляются в процессе компилировании программы – это наиболее простые с точки зрения исправления ошибки. Алгоритмические ошибки программы выявить гораздо труднее: программа работает, а результат выдает неправильный. Для обнаружения ошибок этого класса требуется этап тестирования программы.

Тестирование - это процесс исполнения программ с целью выявления (обнаружения) ошибок.

Существуют различные способы тестирования программ.

Тестирование программы как «черного ящика» (стратегия «черного ящика» определяет тестирование с анализом входных данных и результатов работы программы). Критерием исчерпывающего входного тестирования является использование всех возможных наборов входных данных.

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

Разумная и реальная стратегия тестирования - сочетание моделей «черного» и «белого ящиков».

Принципы тестирования:

    описание предполагаемых значений выходных данных или результатов должно быть необходимой частью тестового набора;

    тесты для неправильных и непредусмотренных входных данных следует разрабатывать так же тщательно, как для правильных и предусмотренных;

    необходимо проверять не только делает ли программа то, для чего она предназначена, но и не делает ли она то, что не должна делать;

При разработке программ очень полезным бывает метод «ручного тестирования» без компьютера на основе инспекции и сквозного просмотра (тестирование «всухую»).

Инспекция и сквозной просмотр - это набор процедур и приемов обнаружения ошибок при чтении текста.

Основные типы ошибок, встречающихся при программировании:

    обращения к переменным, значения которым не присвоены или не инициализированы;

    выход индексов за границы массивов;

    несоответствие типов или атрибутов переменных величин;

    явные или неявные проблемы адресации памяти;

    ошибочные передачи управления;

    логические ошибки.

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

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

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

В процессе отладки программы используют метод грубой силы - использование выводов промежуточных данных по всей программе (трассировка) или использование автоматических средств. Например, в Турбо-Паскале имеется в наличии мощный аппарат автоматической отладки программ (режим DEBUG).

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

Есть золотое правило программистов - оформляй свои программы в том виде, в каком бы ты хотел видеть программы, написанные другими. К каждому конечному программному продукту необходимо документированное сопровождение в виде помощи (help), файлового текста (readme.txt).

В этой статье попробуем раскрыть основные этапы разработки программы, написанной на любом языке программирования.

Спецификация (определение требований к программе):

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

Разработка алгоритма:

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

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

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

Кодирование:

После проведения спецификации и составления алгоритма решения, используемый алгоритм в итоге будет записан на необходимом языке программирования (Pascal, Delphi, C++ и др.). Результатом этапа кодирования является готовая программа.

Этапы разработки программы. Отладка:

На данном этапе программист занимается отладкой программы, то есть поиском и устранением ошибок. Последние делятся на две группы: алгоритмические и синтаксические (ошибки в тексте исходной программы). Из этих двух групп ошибок наиболее легко устранить синтаксические ошибки, тогда как алгоритмические ошибки определить достаточно трудно.

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

Тестирование:

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

Создание справочной системы:

Если программист разрабатывает программу, чтоб ею впоследствии пользовались другие, то программисту необходимо разработать справочную систему и установить для пользователя легкий быстрый доступ к этой справочной системе при работе с программой. Современные программы обладают справочной информацией, имеющей форму CHM- или HLP-файлов.

Кроме справочной информации справочная система содержит необходимые инструкции по инсталляции программы. Обычно их представляют в виде файла Readme разных форматов: *.doc, *.txt, *.htm. Более подробно рассматриваемый этап разработки программы будет описан позже.

Создание установочного диска (CD-ROM):

Инсталяционный диск (CD-ROM) разработчики создают для того, чтобы пользователи могли самостоятельно, без помощи программиста, проинсталировать данную программу на свой ПК.

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