Этапы разработки программы
Выражение "написать программу" отражает только один из этапов создания компьютерной программы, когда разработчик программы (программист) действительно пишет команды (инструкции) на бумаге или при помощи текстового редактора. Программирование — это процесс создания (разработки) программы, который может быть представлен последовательностью следующих шагов: 1. Спецификация (определение, формулирование требований к программе). 2. Разработка алгоритма. 3. Кодирование (запись алгоритма на языке программирования). 4. Отладка. 5. Тестирование. 6. Создание справочной системы. 7. Создание установочного диска (CD-ROM). Жизненный цикл ПО
1. Этап разработки технического задания (постановка задачи) На этом этапе формулируется желание заказчика в виде документа (ТЗ), содержащего описание цели разработки, исходных данных, результатов работы, требований к специальному программному обеспечению, аппаратным средствам, функциональным возможностям. Поскольку программист редко досконально разбирается в предметной области, а заказчик - в программировании, постановка задачи может стать весьма непростым итерационным процессом. Для этапа ТЗ очень важно ясно определить входные данные программы и результат ее работы.
2. Этап проектирования Проектирование можно разбить на более мелкие этапы:
3. Этап кодирования Реализация структурной схемы программы на выбранном языке
4. Этап отладки Испытание программы с целью проверки функциональных возможностей, надежности
5. Этап сдачи заказчику в эксплуатацию и сопровождение После получения исполняемых модулей и успешного тестирования программа передается заказчику для эксплуатации, в сопровождении с комплектом необходимой документации. Сопровождение программы заключается в устранении выявленных в течении работы ошибок (пропущенных на этапе отладки), своевременном их устранении и выпуске новых версий. Необходимо сделать несколько замечаний в связи с процессом разработки и сопровождения ПО. Наиболее распространенной ошибкой программистов является пренебрежение этапами технического
1.6. Восходящее и нисходящее проектирование ПО На этом шаге мы рассмотрим методы восходящего и нисходящего проектирования. Другой метод улучшения качества программирования заключается в применении нисходящего проектирования (Top-Down Programming - программирование "сверху вниз").
В методе нисходящего проектирования Вы вначале пишете основную программу, используя средства вызова подпрограмм, причем в качестве подпрограмм вначале Вы вводите "заглушки" вида: Вызвали подпрограмму номер.... Затем, будучи уверенным в правильности логического построения основной программы, Вы детально "расписываете" каждую подпрограмму, вызывая по мере необходимости подпрограммы более низкого уровня. Этот последовательный процесс продолжается, пока программа не будет завершена и проверена. При другом методе - восходящем проектировании (программировании "снизу вверх") - Вы вначале пишете подпрограммы нижнего уровня и тщательно их тестируете и отлаживаете. Далее Вы добавляете подпрограммы более высокого уровня, которые вызывают подпрограммы нижнего уровня, и так до тех пор, пока Вы не достигнете программы самого верхнего уровня. Метод проектирования "снизу вверх" пригоден при наличии больших библиотек стандартных подпрограмм. Учтите, что иногда лучшим является гибрид двух методов. Однако в обоих случаях каждая подпрограмма должна быть небольшой, так чтобы можно было охватить одним взглядом всю ее логику (для персональных компьютеров желательно, чтобы и основная программа, и подпрограммы целиком помещались в пределах 20-30 строк экрана дисплея!) Всякий велосипедист хорошо знает, что ехать сверху вниз быстрее и удобнее, чем снизу вверх. В программировании дело обстоит примерно так же: "сверху вниз" писать программы удобнее потому, что при таком методе мы точно знаем, какие подпрограммы описывать. Но есть у этого метода и недостаток: на верхнем уровне не всегда видно, куда спускаться, то есть как разделить решение задачи на такие части, каждую из которых было бы легко описать отдельной процедурой. У опытных программистов вырабатывается своеобразное чутье: они сразу видят, какие нужны процедуры, а новичкам иногда приходится туго. Метод "снизу вверх", хотя и требует большого труда, бывает очень полезен на первых порах. Пусть даже половину составленных Вами подпрограмм придется потом "выбросить", но зато Вы хорошо почувствуете, какие подпрограммы для исходной задачи необходимы. Да и отлаживать каждую написанную подпрограмму можно сразу: ведь все, что "под ней", уже описано (а обычно и отлажено). Словом, любишь кататься "сверху вниз" - люби и саночки возить (в обратном направлении). Опытные программисты иногда применяют метод "снизу вверх" для того, чтобы заранее заготовить для новой задачи набор подпрограмм, которые могут понадобиться в различных случаях. Так что "возить саночки" приходится не только новичкам!
Для оценки упомянутой производительности используется ряд критериев качества программ. Поскольку такое комплексное понятие производительности формально определить невозможно, критерии также оказываются не строго определенными, взаимосвязанными, а иногда противоречивыми. В разных источниках могут приводиться различные наборы критериев. Но, несмотря на это, как правило эти наборы сводимы один к другому и хорошо работают! Автор предлагает следующую совокупность критериев. 1. Работоспособность. 2. Правильность.(программа должна решать именно поставленную, а не более широкую, более узкую или измененную задачу). 3. Надежность (программа должна работать при любых исходных данных – анализировать их правильность и выдавать результаты или диагностику ошибок). 4. Читабельность (текст программы – итоговый носитель всей информации о решении, поэтому он должен иметь четкую и ясную организацию, отображающую решение). 5. Легкость отладки и тестирования. 6. Модифицируемость (возможность внесения изменений в программу). 7. Документированность (наличие документации по всему процессу разработки, начиная от постановки задачи); документированность обеспечивает возможность передачи программы другим лицам, или отчуждение программы. 8. Простота пользования, наличие сервиса. 9. эффективность применительно к компьютеру (использование минимума машинных ресурсов – памяти и времени выполнения). Видно, например, что критерии 4, 6, 7 взаимосвязаны, критерий 5 ими определяется; критерии 3 – 8 противоречат 9-му, и сам он внутренне противоречив. Делать акцент на тех или иных критериях следует в зависимости от реальной ситуации. Так, мощность современных компьютеров в большинстве случаев позволяет не слишком учитывать ресурсы. Однако если речь идет о специальных расчетных инженерных задачах, время решения которых объективно велико, на первый план выступают ресурсы. Цикл. Виды Циклов. Циклом называется многократное повторение однотипных действий. Телом же цикла будем называть те самые действия, которые нужно многократно повторять. Как вы понимаете, повторять одни и те же действия можно и при помощи оператора безусловного перехода. Если записать эти действия в программе одно за другим, а в конце поставить оператор перехода к началу этого блока. Однако таким образом можно получить только программу, которая работает вечно (зацикливается). Этого можно избежать, используя совместно с оператором перехода условный оператор, поставив выполнение перехода в зависимость от выполнения некого условия. Таким образом, мы получим структуру условного перехода и возможность организации конечного цикла. Вообще говоря, так мы можем решить практически любую задачу, требующую реализации циклического алгоритма. Конечно же, при помощи одного только топора можно построить дом. Поставим перед собой вопросы: "А будет ли этот дом красив? Сколько времени и сил можно сэкономить, используя всевозможные специальные инструменты?". Создатель языка Паскаль Никлаус Вирт также задался этими вопросами и решил их в пользу расширения языка тремя специальными возможностями организации циклов. Для чего? - Для удобства, краткости, простоты чтения программы и, не побоюсь этого слова, красоты. Итак, существует три вида цикла, имеющих собственные операторы на языке Паскаль для их записи. Эти виды имеют собственные условные названия: "Пока", "До", "С параметром". Друг от друга они несколько отличаются и используются каждый для своего класса задач. Цикл "ПОКА" Группа операторов, называемая "телом цикла", судя по этой схеме, будет выполняться пока истинно условие цикла. Выход из цикла произойдет, когда условие перестанет выполняться. Если условие ложно изначально, то тело цикла не будет выполнено ни разу. Если условие изначально истинно и в теле цикла нет действий, влияющих на истинность этого условия, то тело цикла будет выполняться бесконечное количество раз. Такая ситуация называется "зацикливанием". Прервать зациклившуюся программу может либо оператор (нажав Ctrl+C), либо аварийный останов самой программы, в случае переполнения переменной, деления на ноль и т.п., поэтому использовать структуру цикла следует с осторожностью, хорошо понимая, что многократное выполнение должно когда-нибудь заканчиваться. На языке Pascal структура цикла "Пока" записывается следующим образом: While <условие> Do <оператор>; Правда, лаконично? По-русски можно прочитать так: "Пока истинно условие, выполнять оператор". Здесь, так же как в формате условного оператора, подразумевается выполнение только одного оператора. Если необходимо выполнить несколько действий, то может быть использован составной оператор. Тогда формат оператора принимает такой вид: While <условие> DoBegin <оператор #1>;<оператор #2>;<оператор #3>;... End; Цикл "ДО" Этот вид цикла отличается от предыдущего в основном тем, что проверка условия повторения тела цикла находится не перед ним, а после. Поэтому цикл "До" называют циклом "с постусловием", а "Пока" - "с предусловием". Обратите также внимание на то, что новая итерация (повторное выполнение тела цикла) происходит не тогда, когда условие справедливо, а как раз тогда, когда оно ложно. Поэтому цикл и получил свое название (выполнять тело цикла до выполнения соответствующего условия). Интересно, что в случае, когда условие цикла изначально истинно, тело цикла все равно будет выполнено хотя бы один раз. Именно это отличие "до" от "пока" привело к тому, что в программировании они не подменяют друг друга, а используются для решения задач, к которым они более подходят. Формат цикла на языке Pascal:Repeat<оператор #1>; <оператор #2>; <оператор #3>;... Until <условие>; Читается так: "Выполнять оператор #1, оператор #2.: до выполнения условия". Здесь не требуется использование составного оператора, потому, что сами слова Repeat и Until являются операторными скобками. Цикл "С параметром". В данном случае параметром будет являться целочисленная переменная, которая будет изменяться на единицу при каждой итерации цикла. Таким образом, задав начальное и конечное значения для такой переменной, можно точно установить количество выполнений тела цикла. Нарисовать блок-схему такой структуры вы сможете сами после некоторых пояснений. Форматов у этого вида цикла предусмотрено два: For <И.П.>:=<Н.З.> To <К.З.> Do <оператор>; For <И.П.>:=<Н.З.> Downto <К.З.> Do <оператор>; Здесь И.П. - имя переменной-параметра, Н.З. - его начальное значение,К.З. - соответственно конечное значение параметра. В качестве начального и конечного значений Читается данная структура так: "Для переменной (далее следует ее имя) от начального значения до конечного выполнять оператор (являющийся телом цикла)". Иногда цикл с параметром даже называют "Для" или "For". В первом случае параметр с каждой итерацией увеличивается на единицу, во втором - уменьшается. Выполняется этот цикл по следующему алгоритму:1. переменной-параметру присваивается начальное значение;2. выполняется тело цикла;3. переменная-параметр автоматически увеличивается на 1 (в первом случае формата); 4. если параметр превышает конечное значение, то происходит выход из цикла, иначе - переход к пункту 2. Примечание: при использовании Downto параметр автоматически уменьшается на 1, а выход из цикла происходит тогда, когда параметр становится меньше конечного значения. Таким образом, в отличие от первых двух видов цикла, этот цикл используется тогда, когда известно необходимое количество выполнений тела цикла. | Вообще говоря, цикл "Пока" является универсальным, то есть любая задача, требующая использования цикла, может быть решена с применением этой структуры. Циклы "До" и "С параметром" созданы для удобства программирования. Итерационный цикл - оператор цикла, для которого число повторений тела цикла заранее неизвестно. В итерационных циклах на каждом шаге вычислений происходит последовательное приближение и проверка… В итерационных циклах производится проверка некоторого условия, и в зависимости от результата этой проверки происходит либо выход из цикла, либо повторение выполнения тела цикла. Если проверка условия производится перед выполнением блока операторов, то такой итерационный цикл называется циклом с предусловием (цикл "пока"), а если проверка производится после выполнения тела цикла, то это цикл с постусловием (цикл "до"). Особенность этих циклов заключается в том, что тело цикла с постусловием всегда выполняется хотя бы один раз, а тело цикла с предусловием может ни разу не выполниться. В зависимости от решаемой задачи необходимо использовать тот или иной вид итерационных циклов.
|