Жанр: Учеба
Жизненный цикл программы
...чае хорошая система все же может быть разработана, если
обе стороны пойдут навстречу друг другу и точно определят все
требования и пожелания. Однако отдельные стороны проекта
могут быть неадекватно описаны или вообще упущены.
Анализ требований заказчика
Одно подключение к процессу разработки требуемых лиц с обоих
сторон не приведет к созданию полноценного документа,
описывающего задачу. Вся система не будет определена к
данному моменту. Главной целью является нахождение того, что
хочет пользователь. Иногда стоимость контракта и время
исполнения задачи оценивается после данного шага, и Вы можете
не подписать контракт вовсе или внести существенные поправки
в первоначальные договоренности на основе проделанного
исследования задачи. Важно сохранить простоту процесса
анализа требований и избегать обдумывания, как будет
реализована та или иная функция или процедура. Необходимо
помнить, что анализ требований заказчика может продлиться от
двух часов до нескольких недель, в зависимости от сложности
поставленной задачи.
Может существовать большое количество способов начать и проводить
анализ требований, но все они должны приводить к одному и
тому же результату - составлению документа, описывающего все
требования и пожелания пользователя.
Простейший прособ начать обследование - сверху вниз. Что является
главной целью системы? Каковы основные требования к системе?
Определение основных компонент системы может быть полезным
для введения пользователя в нужное pусло обсуждения проблемы.
Почти все системы требуют ввод некоей информации и вывод
каких-то отчетных форм (в виде отчетов и запросов), некоторый
вид конфигурации, возможности импорта и экспорта данных,
архивирования, и, возможно, сервисный раздел. Иногда процесс
импорта - единственный способ ввода данных в систему. Если же
пользователь требует многотабличную систему, тогда
конфигурация может стать главной частью системы. Также, какой
тип интерфейса требуется? Выпадающие окна? Графический
интерфейс? Исходя из этих данных, вы можете получить
информацию о том, что должно находиться в главном меню
программы, и прикинуть некоторые детали разработки еще до
полного определения проекта.Also, what type of user interface
is required?
Независимо от принятого подхода к расмотрению требований пользователя,
результатом анализа должно быть ясное понимание того, что
требует пользователь, и что он хочет. Тонкое различие между
этими двумя понятиями немаловажно. Требования пользователя
ограничиваются представлением пользователя о предлагаемой им
задаче. Эти требования пользователь явно обговаривает в
процессе дискуссии. Пожелания же пользователя нередко
остаются за кадром, не потому что пользователь не
обговаривает их специально, а потому, что он подсознательно
считает некоторые требования естественными и не не требующими
специального выделения. В одном из проектов я на конечной
стадии разработки проекта случайно узнал о том, что в
предложенной задаче под понятием "вывод отчета на печать"
пользователь понимал возможность вывода отчетов на все
имеющиеся y него печатающие устройства, включая лазерные
принтеры и АЦПУ со специальной системой команд.
Также необходимо расставить приоритеты отдельным участкам задачи.
Главная цель этой стадии - удостовериться в том, что вы понимаете
потребности пользователя и приоритеты направлений разработки.
Конечный документ составляется для пользователя. Если данная
фаза разработки проекта была тщательно проведена, то
следующая фаза - Функциональная спецификация - не составит
особого труда.
Функциональная спецификация
Функциональная спецификация - это мост между начальным обзором требований и
технической спецификацией, разрабатываемой позже.
Начальный обзор требований выделяет то, ЧТО система должна делать, а
техническая спецификация - это детализированное
проектирование каждого элемента системы.Это последняя стадия
перед непосредственным кодированием. Следовательно,
функциональная спецификация может рассматриваться как
транспорт, переносящий нас из точки A в точку B.
Функциональная спецификация описывает, ЧТО система будет делать, но не КАК
это будет выполнено. Это различие важно. Функциональная
спецификация также включает описание всех главных
функциональных модулей и учитываемые ограничения.
Что же она делает?
Как и любая стадия ЖЦРП, функциональная спецификация может
сильно изменяться от проекта к проекту. В крупных комплексных
проектах некоторые моменты функционального проектирования
могут быть отложены до стадии технического проектирования. В
любом случае, основной задачей функциональной спецификации
является предоставление пользователю некоторого документа со
следующими критериями:
' Документ должен быть читаем и хорошо логически
организован.
' Он должен учитывать все требования пользователя.
' Он должен отвечать на все вопросы пользователей и
разработчиков в области функциональной разработки
Функциональная спецификация иногда является наиболее пугающим аспектом
формального цикла разработки...Особенно для программистов,
которые ненавидят что-либо записывать. После того, как
программисты узнают, что хочет пользователь, y них появляется
естественный импульс немедленно начинать техническое
проектирование, если не кодирование, самостоятельно. Но
непонимание на данной стадии может вылиться бедствием после
начала непосредственного кодирования. Связь является здесь
ключевым элементом. Но даже самая хорошая связь между
пользователями и программистами не всегда является залогом
понимания..
Функциональная спецификация не должна представляться как бумажная работа,
которая должна быть формально выполнена. Если это происходит,
то документ не будет составлен правильно и качественно.
Пользователь должен понимать, что составляемый документ
необходим не только как формальность, но и как средство
ускорения, упрощения и улучшения разрабатываемой задачи.
Формат документа
Спецификация - это документ, объясняющий в бизнес-терминах, что должна
делать система. Все в нем должно представлять интерес для
пользователя. Документ не должен быть перегружен техническими
подробностями, структурами файлов и прочими технологическими
деталями. Часто пользователю более интересно, какие меню,
экраны и отчеты будут представлены в программе и как
программа будет осуществлять переход из одной точки в другую.
Догумент должен состоять из логических разделов типа краткого обзора
системы, сопровождаемого кратким описанием главных
фрагментов или функциональных объектов. Демонстрация
планируемых экранных форм должна показывать основные
направления действий с главными функциональными объектами и
модулями программы. Раздел описания отчетов должен содержать
все отчетные формы, которые вы планируете создавать. В
больших системах основные модули могут быть разбиты на более
простые с описанием того, что эти более простые модули будут
делать.
Планируйте данный документ таким образом, чтобы пользователь, который
не заинтересован в рассмотрении детальных особенностей
системы, мог бы прочитать только первую часть документа с
описанием основных функций, выполняемых системой.
Пользователи, заинтересованные в рассмотрении более подробных
деталей, могут продолжать читать документ дальше.
Требования пользователя
Ваши спецификации должны отвечать всем требованиям пользователей.
Убедитесь, обратившись опять к вашему начальному анализу
перед завершением спецификации, что вы учли все требования и
запросы пользователей. Если требование пользователя не может
быть удовлетворено, объясните, почему, а не просто исключите
его из спецификации.
Вы также должны обсудить с пользователем ограниченные ресурсы,
которые имеются y пользователя. Девяносто девять процентов
проблем, возникающих при программировании, могут быть решены
путем использования специфических внешних устройств,
драйверов и сторонних программ.
Отвечает ли документ на все вопросы?
После завершения генерации документа вам, очевидно, захочется,
чтобы пользовали просмотрели его и внесли какие-либо поправки
и комментарии. Это их первый взгляд на то, что вы хотите
создать. Когда пользователи завершат обзор документа, вам
придется еще несколько раз встречаться с ними для обсуждения
их поправок. Изменения и модификации должны быть немедленно
включены в последнюю версию спецификации, чтобы техническая
группа - люди, составляющие техническую спецификацию, имели
как можно больше информации.
Окончательнаый вариант функциональной спецификации в дальнейшем практически
не должен изменяться. Постарайтесь максимально полно
составить итоговый документ. Любое его изменение на
последующих стадиях вызовет ¦цепную реакцию¦ изменения всех
последующих стадий, на которых будет значительно сложнее
вносить изменения, нежели на стадии создания функциональной
спецификации.
Чего нужно избегать?
Предположим, функциональная спецификация разработана,
подписана и положена на полку. Она может оказаться полностью
бесполезна по ряду причин.
Если функциональная спецификация с самого начала разрабатывалась
с нежеланием или с непониманием ее значимости, то вне
зависимости от того, сколько дополнений было внесено в нее и
как долго над ней работали, функциональная спецификация так и
останется бесполезным документом. При неправильном отношении
к разработке функциональной спецификации она может быть плохо
написана, плохо организована или, что наиболее вероятно,
обременена томами описания ненужных технических подробностей.
Говоря другими словами, работать с таким документом будет
невозможно.
Если функциональная спецификация не будет максимально полно
описывать последние изменения, внесенные в проект на стадии
общения с заказчиком, то техническая группа проекта не будет
иметь представления о последних изменениях в функциональной
спецификации (на основе которой технические специалисты
создают техническую спецификацию). Это приведет к принятию
технической группой множества неверных решений, основанных на
неверной или устаревшей информации, что повлечет за собой
серьезные потери времени и средств. Избегайте данной ситуации
любой ценой.
Одной из наиболее опасных болезней жизненного цикла разработки
программ является синдром ¦ползущего проекта¦ или ¦оползня¦.
Он проявляется, когда функциональная спецификация неполно
рассматривает отдельные аспекты проекта. В этом случае, по
мере создания системы, пользователи, рассматривая отдельные
готовые модули, будут просить внести некоторые
усовершенствования, ссылаясь на неясные описания данного
модуля в функциональной спецификации. Постепенно система
будет приобретать вид огромного динозавра в заплатках,
поскольку глобальные изменения разработанных структур
программы производить уже нельзя, а изменения и
усовершенствования необходимо вносить. К чему приведет данная
ситуация, вы наверное уже догадываетесь...в перую очередь к
перерасходу временного лимита на создание отдельных модулей и
нестабильности работы системы из-за выпадания отдельных
функциональных кусков программы из строгой общей схемы всей
системы.
Новая техника
Другой общей проблемой современных жизненных циклов разработки
программ является неприемлимое время между начальным запросом
на создание проекта и концом разработки функциональной
спецификации. Сегодняшний мир бизнеса очень динамичен.
Требования к системе могут измениться за время начального
обследования, выяснения пожеланий и требований заказчика и
составления функциональной спецификации. Чтобы отслеживать
данные ситуации, необходимо применять современную технику
создания приложений и инструментальных средств.
Быстрое макетирование - метод проектирования, разработки и изменения
интерфейсов пользователя ¦на лету¦. Конечные пользователи
должны тесно включаться в данный процесс, поскольку
разработка интерфейса вместе с пользователем происходит
значительно быстрее, нежели без него. Использование
совместной разработки дает возможность ¦подогнать¦ интерфейс
под пользователя за несколько коротких сессий.
Computer Aided Software Engineering (CASE) средства также
играют огромную роль в сегодняшних инструментальных средствах
разработки приложений. С мощными CASE-средствами процесс
разработки приложений заметно упрощается. Проектировщик
использует программные средства для создания и компоновки
словарей данных, потоков данных и диаграм объекта, а в
некоторых случаях прототипов процессов обработки данных и
функционального кода.
Однако, использование CASE-средств разработки приложений не
очень распространено в сфере разработки промышленных
приложений. Это происходит по двум причинам. Во-первых, это
ограниченность возможностей CASE-систем. Любая система
автоматезированного проектирования обладает своей спецификой
и никогда не отражает всех требований того или иного
пользователя на 100 %. Во-вторых, если CASE-система
достаточно мощна и многофункциональна, то она требует больших
временных затрат на ее освоение. А поскольку большинство
проектов имеют тенденцию быть ¦завершенными вчера¦, то
необходимое время не может быть выделено.
В конце данной стадии, если Вы написали хорошую, легко
понимаемую, не перегруженную и не пустую функциональную
спецификацию, системный аналитик или техническая группа
сможет перейти к следующей стадии - созданию технической
спецификации - основываясь на информации, полученной на всех
предыдущих стадиях.
Техническая спецификация или техническое проектирование
Техническое проектирование - это мост между функциональной спецификацией
и фактической стадией кодирования. Часта команда
разработчиков пытается сократить и объединить стадию
разработки функциональной спецификации и техническое
проектирование и разработать один документ. Это ошибка.
Во-первых, вы принудите пользователя читать документ с большим
количеством технических подробностей, ему не понятных. Это
приведет к тому, что пользователь вскоре отбросит ваш
документ, что может привести к недостаточной его
законченности.
Во-вторых, функциональная спецификация концентрирует внимание
на требованиях и пожеланиях пользователя, а техническое
проектирование должно ориентироваться на создание методов
реализации данных требований. Только после того, как обе эти
фазы завершены и акценты расставлены, программист может
приступать к непосредственному кодированию.
Когда обе эти стадии объединены, разработчик не может
сконцентрироваться на каком-либо одном направлении мышления,
и в результате этого получается неясный и плохо отработанный
документ. Или, что еще хуже, программист начинает
реализовывать идею, которая еще не определена до конца
пользователем.
Лючшая характеристика хорошего технического документа, это
возможность прораммисту формировать систему без специфических
знаний о проекте, а только pуководствуясь технической
спецификацией.
Формат документа
Техническая спецификация должна быть разделена на спецификацию всей
системы в целом и низкоуровневое проектирования каждого
важного модуля. Документ должен состоять из одной или
нескольких следующих компонент:
Диаграмма зависимости объектов
Данная диаграмма - уникальный способ для неинформированного
программиста получить быстрый краткий обзор того, что система
делает. Эта диаграмма показывает все объекты системы и связи
между ними (один-к-одному, один-ко-многим и т.д.). Она может
также показывать спецификации ключевых полей и другие связи
по мере необходимости.
Структурная диаграмма
Это высокоуровневое пректирование программных модулей и связи
между ними, начиная с главного модуля и основных модулей,
определенных ранее в функциональной спецификации (например,
главное меню). Детализированная структурная диаграмма может
также включать информацию о передаваемых между модулями
параметрах. Эта диаграмма - хороший способ отдельным членам
команды программистов быстро выяснить общую структуру
программы и решить все проблемы по интеграции отдельных
модулей в систему. Это ¦моментальный снимок¦ разрабатываемой
системы.
Детализация модулей и псевдокод
Когда техническое проектирование высокого yровня закончено,
выполняется в деталях проектирование низкого yровня. Для
каждого модуля проектировщик должен определить все
требования, включая передаваемые параметры, глобальные
структуры и переменные, вызываемые подпрограммы и т.д. Эта
информация важна для тех членов команды программистов,
которые реализуют модули, взаимодействующие друг с другом.
Хорошо спроектированная техническая спецификация снимает все
проблемы, возникающие при соединении отдельных модулей
программы в единое целое.
Вторая часть проектирования низкого yровня - создание псевдокода,
является трудной, но очень важной частью процесса. Многие
программисты не любят писать псевдокод, поскольку им кажется,
что непосредственное кодирование осуществить быстрее. В
пятидесяти процентах случаев это действительно так. Для
маленьких процедур и модулей в несколько строк проще написать
сразу исходный код и не тратить время на переписывание одних
и тех же строк дважды.
Но в тех случаях, когда модуль имеет достаточно большой размер,
псевдокод часто снимает много проблем. В процессе проработки
псевдокода может вскрыться ранее не учтенная проблема,
решение которой на стадии технического проектирования
значительно упрощает дальнейшую разработку и написание
непосредственного кода. Тем более, если рассматриваемый
модуль некоторым образом связан с другими модулями, решение
проблемы на yровне псевдокода сэкономит время, которое
потребуется на изменение уже написанного другими членами
команды разработчиков кода на стадии непосредственного
кодирования.
Глобальные переменные и структуры
Данная информация требуется для всех членов команды разработчиков.
Чрезвычайно трудно формировать глобальные структуры ¦на лету¦
и одновременно сообщать о них остальным членам команды,
принуждая их подстраиваться под Вас. Необходимо, насколько
это возможно, как можно раньше описать все структуры данных,
задействуемые несколькими членами команды одновременно.
Среда разработки системы
Среда разработки позволяет всем членам команды знать размещение
всех файлов проекта, библиотек, документов и другой связанной
с проектом информации. Она должна быть создана таким образом,
чтобы все члены команды разработчиков с минимальными
затратами времени могли обратиться к любой информации,
относящейся к проекту.
Создание временной диаграммы проекта
На этой стадии необходимо составить детальное расписание сроков
начала и окончания разработки каждого модуля, частей проекта
и всего проекта в целом. Необходимо учитывать время,
затрачиваемое на дополнительные контакты с заказчиком,
разработку специфических инструментальных средств, а также
возможные проблемы, связанные с непредвиденными
обстоятельствами (например, болезнь сотрудника или частичная
потеря данных вследствие сбоев аппаратного обеспечения).
Библиотека функций
Хотя библиотека функций внутреннего использования и не должна
быть описана в проекционной документации, необходимо, чтобы
хотя бы где-нибудь она была описана. Библиотека функций, с
помощью которых реализуется проект - это очень важная часть
любой разработки. Иногда отсутствие хорошего описания
инструментальных средств, при помощи которых разрабатывается
система, приводит к написанию программистом своих собственных
инструментальных средств, дублирующих уже существующие.
Повторное ¦изобретение велосипеда¦ только занимает много
времени и не всегда приводит к хорошим результатам.
Обзор проекта
В области разработки аппаратных средств обзор проекта является
критичным для всего проекта в целом. В отличие от
программного обеспечения, когда новая плата или чип
передается в производство, процесс изменения первоначального
проекта может стать весьма дорогим. И если аппаратные
средства поступили в продажу или были поставлены большому
количеству заказчиков, последствия ошибки могут быть просто
непоправимыми.
В области программного обеспечения послепроизводственные
проблемы значительно более просто решаются, особенно если
программное обеспечение было поставлено небольшому количеству
конечных пользователей. И, даже когда программное обеспечение
распространилось более широко, новые инструментальные
средства и утилиты предоставляют возможность простой
модификации ошибочных модулей, например, по телефонным линиям
или путем почтовой рассылки.
Проблему неточностей и ошибок можно частично устранить на стадии постпроектировочного
обзора проекта. Таким образом, имеется
серьезная причина для выделения времени на обзор проекта
также, как это делается при проектировании аппаратного
обеспечения.
Идея, скрывающаяся под термином обзора проекта, достаточно
проста, особенно если члены группы проектировщиков хорошо
знакомы с процессом и требуемым результатом. В основном, вся
команда разработчиков должна встречаться на регулярном
основании для обсуждения отдельных или всех разработок
отдельных членов группы. На данных встречах будет
производиться как обзор всего проекта, так и обзор каждого
модуля низкого yровня, в отдельных случаях включая обзор
псевдокода, разработанного каждым членом группы.
Большинство групп разработчиков будут поражены количеством всплывающих
на данном yровне и решаемых проблем. Кроме того, это
позволяет всем членам группы получить больше информации о
всех аспектах системы. Это также позволяет членам группы
обсуждать новые идеи и изучать новую технику, применяемую
отдельными членами группы. Наибольшая проблема на данной
стадии - это нехватка времени для обсуждения всех важных
проблем, которые были подняты, и необходимость перехода как
можно скорее к стадии реализации.
Реализация
Обычно на стадии кодирования всплывают все неприятные проблемы,
которые только можно себе представить. Чем больше проект -
тем больше проблем. Вот почему первые три шага так важны.
Если все из вышеописанных шагов полностью пройдены, то реализация
программы значительно упрощается.В идеале, все потенциальные
узлы и ловушки были предусмотрены и обойдены. Техническая
спецификация может и должна быть передана команде
программистов, выполняющих непосредственное кодирование,
чтобы они могли записывать код согласно детализированному
проекту задачи. Любые проблемы, которые возникают на этой
стадии, должны отслеживаться программистами и помещаться в
относящиеся к проблеме документы, чтобы отражать все
возникающие изменения.
Тестирование модулей производится, когда все модули уже закончены, чтобы
была возможность определить не только отдельные неточночти
отдельных модулей, но и проблемы, связанные с объединением
отдельных модулей в общую систему для общего тестирования.
Обзор кода
Подобно обзору проекта, обзор кода является важным этапом в
жизненном цикле. Как и на стадии обзора проекта, при обзоре
кода отлавливается большое количество неточностей и ошибок,
выявляются неоптимальные участки программы. Также это
позволяет увидеть различным членам группы разработчиков
фактический код, выполненный коллегами по проекту. Поскольку
программирование является творческой специальностью, то
каждый член команды представляет видение одной и той же
проблемы по-разному. Кто-то решает данный конкретный вопрос
лучше, кто-то хуже. Обзор кода позволяет выявить хуже
написанные участки программы, и, при необходимости,
переписать их, воспользовавшись советом более опытного члена
команды. Также рассмотрение различных приемов, технологий и
подходов к программированию позволяет воспользоваться ими для
решегия предстоящих проблем в последующих проектах. Особенно
это полезно для новичков команды, хотя, как мы все знаем,
даже старую собаку можно научить новым трюкам.
Системные тесты
Стадия тестирования системы начинается, когда все или большинство
модулей системы уже завершены. Тестирование может состоять из
трех отдельных фаз:
' Системный тест или лабораторные испытания.
' Опытная эксплуатация.
' Приемочный тест
Альфа тест (лабораторные испытания)
Данная фаза тестирования преследует две цели. Во-первых, этот тест
должен подтвердить, что все фрагменты системы правильно
интегрированы в систему. Это позволяет группе тестирования
начать полное тестирование всей системы. Обычно используется
некоторая однородная технология тестирования для всех
компонент системы, позволяющая определить соответствие всех
частей определенным, заранее предусмотренным параметрам. Один
из путей создания сценариев тестирования - создавать методы
тестирования в процессе непосредственного кодирования.
Лабораторное тестирование - последняя возможность разработчиков исправить
все обнаруженные ошибки прежде, чем система будет передана
конечным пользователям. Бэта-тестирование - не та стадия, на
которой программисты хотели бы выявлять серьезные сбои
разработанной системы, поэтому лабораторное тестирование
должно проходить максимально полно. Если альфа-тестирование
проведено некачественно, общий процесс тестирование может
занять продолжительное время, так как исправление ошибок,
выявленных на последующих стадиях тестирования, занимает
значительно больше времени из-за невозможности исправления их
"на лету". Любые обнаруженные проблемы должны
протоколироваться, чтобы хронология проблем и их устранения
была доступна при возникновении последующих вопросов о ранее
существовавших проблемах.
Предпочтительнее, чтобы программное обеспечение не
передавалось для опытной эксплуатации, пока все известные
проблемы не будут решены. В действительности, программное
обеспечение часто выпускается для бэта-тестирования с уже
найденными, но еще не разрешенными проблемами, в связи с
нехваткой времени и окончанием сроков разработки проекта.
Данное упущение приводит к значительным непредвиденным
задержкам, связанным с трудностью последующего тестирования
из-за наличия каких-либо ошибок или неточностей.
Бэта тестирование (опытная эксплуатация)
Бета тестирование - это следующая фаза общего тестирования, при
которой программное обеспечение поставляется ограниченному
кругу
Поділитися у соцмережах