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

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

      Эта статья предлагается к удалению. Пояснение причин и соответствующее обсуждение вы можете найти на странице Википедия:К удалению/30 июля 2012. Пока процесс обсуждения … Википедия

      - (англ. Software project management) особый вид управления проектами, в рамках которого происходит планирование, отслеживание и контроль за проектами по разработке программного обеспечения. Ключевым моментом в управлении проектом по… … Википедия

      - (ПО) период времени, который начинается с момента принятия решения о необходимости создания программного продукта и заканчивается в момент его полного изъятия из эксплуатации. Этот цикл процесс построения и развития ПО. Содержание 1 Стандарты… … Википедия

      Наиболее распространённый в настоящее время способ нумерации версий Жизненный цикл успешной компьютерной программы может быть очень долгим; изменения в программе бывают разными от исправления ошибки до полного переписывания. В бол … Википедия

      Когда Грейс Хоппер работала с компьютером Гарвард Марк II в Гарвардском университете, её коллеги обнаружили эту моль, застрявшую в реле и таким образом помешавшую работе устройства, после чего она отметила, что они «отлаживали»(debug) систему.… … Википедия

      Разработка программного обеспечения (англ. software engineering, software development) это род деятельности (профессия) и процесс, направленный на создание и поддержание работоспособности, качества и надежности программного обеспечения, используя … Википедия

      Новый Airbus A 380 использует довольно много ПО, чтобы создать современную кабину в самолете. Метод инженерии программного обеспечения позволил создать программное обеспечение самолёта, описываемое миллионами строк … Википедия

      Разработка программного обеспечения Процесс разработки ПО Шаги процесса Анализ Проектирование Программирование Докумен … Википедия

    Книги

    • Пользовательские истории. Гибкая разработка программного обеспечения , Кон Майк. В книге "Пользовательские истории: гибкая разработка программного обеспечения" Майка Кона, выхода которой с нетерпением ожидало сообщество сторонников гибких методологий разработки…
    • Пользовательские истории: гибкая разработка программного обеспечения , Кон Майк. В этой книге, выхода которой с нетерпением ожидало сообщество сторонников гибких методологий разработки программного обеспечения, описывается процесс подготовкитребований к разрабатываемой…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Анализ осуществимости

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

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

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

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

    1. Определение проблемы.

    2. Альтернативные решения и ожидаемые от них преимущества.



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

    Выявление, понимание и спецификация требований

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

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

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

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

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

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

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

    Ниже приведен возможный перечень пунктов документа спецификации требований, который может быть руководством специалиста по программному обеспечению:

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

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

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

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

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

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

    Кодирование и тестирование модулей

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

    Сборка и системное тестирование

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

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

    Поставка, развертывание и сопровождение ПО

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

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

    Другой тип классификации затрат на сопровождение был описан в работе Линца (Lienz) и Свонсона (Swanson) в 1980 г. Их анализ показал, что по­рядка 42 % затрат относятся на внесение изменений в требования пользова­телей, 17 % - на изменение формата данных, 12 % - на устранение ава­рийных неполадок, 9 % - на отладку процедур, 6 % - на модификацию аппаратных средств, 5 % - на исправление документации, 4 % - на повышение производительности и остальное - на прочие причины.

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

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

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

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

    Контрольные вопросы

    1. Что такое жизненный цикл ПО?

    2. Какой нормативный документ регламентирует ЖЦ ПО?

    3. На каких трех группах процессов базируется структура ЖЦ ПО?

    4. Опишите процесс разработки ЖЦ ПО

    5. Опишите процесс эксплуатации ЖЦ ПО

    6. Опишите процесс управления проектом ЖЦ ПО

    7. Опишите процесс управления конфигурацией ЖЦ ПО

    8. Опишите этапы процесса проектирования ЖЦ ПО

    9. Каким требованиям должна удовлетворять функциональная спецификация?

    10. Опишите основные характеристики и структуру каскадной модели ЖЦ

    11. Назовите недостатки каскадного подхода

    12. Изобразите схему реального процесса создания ПО

    13. Опишите основные характеристики и структуру спиральной модели ЖЦ

    14. Охарактеризуйте этап разработки программного обеспечения, на котором выполняется анализ осуществимости.

    15. Охарактеризуйте этап разработки программного обеспечения, на котором выполняется проектирование ПО.

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

    17. Дайте определение спецификации ПО. Из каких пунктов может состоять этот документ?

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

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

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

    – разработка модели и выбор метода решения;

    – разработка алгоритма решения задачи;

    – кодирование алгоритма;

    – компиляция программы;

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

    – создание документации;

    – сопровождение и эксплуатация.

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

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

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

    – управление режимами работы программы. Формулируются основные требования к способу взаимодействия пользователя с программой (интерфейс пользователь-компьютер).

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

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

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

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

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

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

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

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

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

    Компиляция программы. После того как закончено кодирование (написание программы на языке программирования) и исходный текст программы введен в память компьютера, производят компилирование программы, т.е. перевод исходного текста в машинный код. Этот процесс осуществляется специальной программой – компилятором. На рисунке 1 представлена схема подготовки исполняемой программы.

    Сначала программа передается препроцессору , который выполняет директивы , содержащиеся в ее тексте (например, #include - включение файла в текст программы).

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

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

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

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

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

    Руководство пользователя детальное описание функциональных возможностей и технологии работы с программным продуктом для конечного пользователя. Документы данного вида могут офор­мляться в печатном виде и (или) "встраиваться" в программный комплекс (в последнем случае помощь в виде подсказки вызывается самим пользо­вателем в процессе работы программного комплекса).

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

    Задание на разработку программного обеспечения (техническое зада­ние);

    Спецификация;

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

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

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

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

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

    Другие материалы, иллюстрирующие проект, например: блок-схемы программного комплекса и программных модулей.

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

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

    1. Определение входных и выходных данных, требований к программе.

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

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

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

    3. Кодирование (программирование).

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

    4. Компиляция и отладка.

    Исходный текст на Паскале не будет непосредственно исполняться компьютером -- для работы программы ее требуется откомпилировать , т. е., перевести в машинный код. Эту работу выполняет специальная программа-компилятор или оболочка языка. Оболочка Паскаля, с помощью которой мы будем разрабатывать свои программы, называется Turbo Pascal 7.1, она разработана компанией Borland International в 1983-97 гг. В результате преобразования компилятором исходного текста программы в машинный код получается исполняемый файл с расширением exe, который можно запустить (выполнить ) в той операционной системе (ОС), для которой разработан компилятор. Наша оболочка Паскаля создавалась для ОС MS-DOS, однако, в современных ОС семейства Windows программа, написанная на Паскале, работать все же будет, правда, без удобных интерфейсных возможностей Windows.

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

    Возможны программные ошибки трех видов:

    · синтаксические (ошибки в правилах языка);

    · алгоритмические (ошибки в логике программы);

    · ошибки времени исполнения , возникающие в процессе работы запущенной программы.

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

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

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

    6. Документирование и поддержка.

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