Жизненный цикл программного обеспечения (ПО) включает в себя пять этапов: 1 - постановка задачи; 2 - анализ; 3 - проектирование и определение спецификаций; 4 - реализация, кодирование, тестирование и отладка; 5 - модификация и сопровождение. Рассмотрим их.
Этап 1. Постановка задачи формулируется заказчиком ПО. В ней должны быть получены четкие ответы на следующие вопросы:
· Что должна делать программа?
· В чем состоят реальные проблемы, разрешению которых она должна способствовать?
· Что представляют собой входные данные?
· Какими должны быть выходные данные?
· Какими ресурсами располагает проектировщик?
Уточняют среду функционирования ПО: комплектацию и параметры технических средств, версию используемой операционной системы (ОС) и др. В результате согласования между заказчиком и исполнителем составляют техническое задание (ТЗ) в соответствии с ГОСТ 19.210-78, которое служит основанием для дальнейшей работы [1, 2].
Этап 2. Анализ. На данном этапе по результатам условий задачи выбирают математические абстракции, строят модель задачи и определяют метод преобразования исходных данных в результаты (методы решения задачи).
Этап 3. Проектирование и определение спецификаций. Этот этап можно рассматривать как формулировку выводов, следующих из предыдущего этапа. Требования к алгоритмам и ПО должны быть представлены в виде ряда спецификаций, явно определяющих рабочие характеристики будущей программы. В число таких характеристик могут входить перечень данных (табл. 6), скорость выполнения, объем потребляемой памяти, гибкость применения и т.п. Создается общая структура программы, которая должна удовлетворять спецификациям; определяются общие принципы управления и взаимодействия между различными компонентами ПО.
|
Принято различать логическое и физическое проектирование. Логическое проектирование не учитывает особенностей среды, в которой будет выполняться программа (технические и программные средства компьютера). При выполнении физического проектирования все эти параметры должны быть учтены. Логическое проектирование при структурном подходе предполагает детальную проработку последовательности действий будущей программы. Его начинают с определения структуры будущего ПО: это будет отдельная программа или комплекс программных продуктов (подпрограмм). Затем переходят к разработке алгоритмов подпрограмм.
Существует три аспекта проверки алгоритма: на правильность; на эффективность реализации; на вычислительную сложность. Проверка правильности удостоверяет, что алгоритм делает в точности то, для чего он был предназначен. Проверка сложности, как правило, заключается в экспериментальном анализе сложности алгоритма, или сравнении двух или более алгоритмов, решающих одну и ту же задачу. Проверка эффективности реализации направлена на отыскание способа, заставить правильную программу работать быстрее или расходовать меньше памяти.
Этап 4. Реализация. Заключается в переводе на язык программирования конструкций, записанных на языке проектирования (алгоритмов). Язык программирования может быть определен в ТЗ, а может выбираться исходя из особенностей конкретной разработки. Для ввода используют специальную программу – текстовый редактор, с помощью которого создают файл, содержащий текст программы. Затем запускают специальную программу – компилятор для перевода программы в последовательность машинных команд. В процессе разбора и преобразования программы компилятор может обнаружить ошибки, тогда он аварийно завершает работу, выдав программисту сообщения о ошибках компиляции. После исправления ошибок, процесс компиляции повторяют. Сложная программа обычно состоит из нескольких частей (подпрограмм), каждая из которых компилируется отдельно. В процессе связывания подпрограмм также могут быть зафиксированы ошибки, они называются ошибками компоновки. Для исправления таких ошибок, как правило, необходимо сверить заголовки используемых подпрограмм и обращения к ним. Исправив обнаруженные ошибки, вновь запускают компилятор и компоновщик.
|
В процессе выполнения программа запрашивает ввод исходных данных, производит требуемые действия и вывод результатов. При этом могут быть обнаружены ситуации, когда продолжение работы программы теряет смысл, например, обнаружено «деление на ноль» или попытка открыть для чтения не существующий файл и др. Такие ошибки называют ошибками выполнения. Процесс исправления ошибок получил название отладки программы. Существуют также логические ошибки, когда программа выдает неправильные результаты. Для их обнаружения необходимо тестирование программы. Тестированием называют процесс выполнения программы при различных тестовых наборах данных с целью обнаружения ошибок. Правильный подбор тестовых данных – ответственная и сложная задача. При определении тестовых данных выполняют действия по алгоритму вручную, записывая результаты каждого шага на бумаге. Параллельно составляется соответствующая документация на ПО.
|
Этап 5. Модификация и сопровождение. Это этап эксплуатации программы. Каким бы ни было изощренным тестирование программы, к сожалению, в больших программных комплексах чрезвычайно тяжело устранить абсолютно все ошибки. Устранение обнаруженных при эксплуатации ошибок, неудачных проектных решений, «узких мест» – первейшая задача этого этапа. Помимо этого, сопровождение может включать в себя проведение консультаций, обучение пользователей, снабжение информацией о новых версиях программы. Качественное проведение этапа сопровождения в большой степени определяет коммерческий успех программного продукта.
При разработке ПО не следует забывать о правилах «хорошего программирования»:
· Сложение и вычитание выполняются быстрее, чем умножение и деление, таким образом Х+Х лучше, чем 2Х.
· Целочисленная арифметика быстрее арифметики вещественных чисел.
· Исключать избыточные циклы.
· Строить логические выражения так, что вычисления прекращаются, если результат становится очевидным, или располагать выражения по уменьшению вероятности возникновения логического результата.
· Проектировать как можно меньше вложенных циклов.
· Не вставлять комментарии внутрь циклов.
· Как можно меньше использовать операторы безусловного перехода.
· Сложные программы разбивать на модули (подпрограммы).
· Не забывать про уже готовые алгоритмы.
· Выполнять комментарии в тексте программы.