- •Глава II
- •12. Предварительные замечания о процессе разработки программ
- •12.1. Жизненный цикл математического обеспечения
- •12. Предварительные замечания о процессе разработки программ
- •12.1. Жизненный цикл математического обеспечения
- •12.2. Анализ требований
- •12.3. Пример задачи
- •13.1. Обзор процесса проектирования
- •13.2.1. Вводный раздел
- •13.2.2. Разделы абстракций
- •13.8. Абстракция строки
- •13.9. Обзор и обсуждение
- •14. Этап перехода от проектирования к реализации
- •14.1. Оценка проекта
- •14.1.1. Корректность и эффективность
- •14.1.2. Структура
- •15.2. Выбор подхода
12.2. Анализ требований
Предлагаемое заказчиком исходное описание программы обычно не является ни полным, ни точным. Назначение анализа требований заключается в изучении требований заказчика таким образом, чтобы мы смогли правильно понять и аккуратно описать эти требования. Этот анализ может предполагать консультацию,. поскольку главным судьей в данной ситуации является сам заказчик.
Зачастую лучше всего начать анализ требований с рассмотрения того, как обстоит дело заказчика в настоящий момент. Если имеющаяся у него система уже работала некоторое время, то наверняка уже были разработаны некоторые методы удовлетворительной работы, обработки ошибок и различных конфликтных ситуаций. Имеющаяся система может служить источником идей не только относительно имеющихся решений, но и относительно новых задач. Изучение системы заказчика может также облегчить процесс согласования новой системы с существующей организа-
1
1ццеи. Система должна быть совместима с уже имеющимися си-^стемами, а также согласовываться с имеющимися организацион-•ными требованиями.
При анализе требований необходимо рассматривать как нормальные, так и аварийные ситуации. Изучение поведения в нормальном режиме предполагает определение эффекта всех безошибочных взаимодействий пользователя с программой в предположении, что программа находится в нормальном состоянии. Случай рассмотрения нормального режима, пожалуй, является самой простой частью проблемы, поэтому рекомендуется начинать именно с него. Хорошим подходом также может служить разработка сценариев всех типовых взаимодействий с системой. В следующем разделе мы приведем пример такой ситуации.
Случаи, предполагающие безошибочную работу, представляют собой лишь весьма малую часть всех возможных вариантов поведения программы, поэтому весьма важно рассмотреть и описать поведение программы при наличии ошибок. Этой частью анализа никогда не следует пренебрегать или недооценивать ее. Аналитик должен попытаться обнаружить все возможные ошибки, которые могут произойти, и разработать соответствующие реакции программы во всех таких случаях. Ошибки исходят из двух источников: пользователей, работающих с программой, и программных и аппаратных сбоев. Для изучения ошибок пользователя очень удобно использовать сценарии, поскольку они позволяют нам выделить места внесения пользователями ошибок. Иногда грамотное проектирование интерфейса позволяет избежать ошибок пользователя, например предоставляя работающему в интерактивном режиме пользователю меню, содержащее только разрешенные команды. Другая возможность предполагает распознавание системой ошибочных вводов и отбрасывание их. Разумеется, всех ошибок избежать невозможно. Например, если банковский служащий сделает ошибку при введении номера счета вкладчика, то это будет обнаружено только при анализе вкладчиком ежемесячного отчета. Аналитик должен учитывать ситуации 'подобного рода и принять решение о том, что делать в подобном случае. Очень часто для принятия подобных решений необходимо консультироваться с заказчиком, поскольку в данной ситуации привлекаются методы ведения дел (например, принятие решения о том, как компенсировать вкладчику неприятности, связанные с тем, что его чек не был оплачен вследствие ошибки служащего банка).
До тех пор пока речь идет о программных ошибках, аналитик должен принять решение об объеме работы, который на этапе разработки программы необходимо затратить на локализацию, исключение и ограничение возможной сферы возникновения ошибок. Например, часто при необходимости ограничения области возник-9*
250 Глава 12
повения программных ошибок делается проверка выходных значений критичных к ним модулей на соответствие допустимым значениям. При обнаружении несоответствия система закрывается. Программист должен также решить, что делать в случае возникновения аппаратных обоев. К системе может быть предъявлено требованиеповышенной доступности,т. е. чтобы система могла функционировать непрерывно (или большой промежуток времени). Удовлетворение этого условия может потребовать избыточного программного и аппаратного обеспечения. Связанное с этим требование предполагаетвысокую надежность системы. Здесь речь идет об исключении возможности потери информации в результате программных или аппаратных сбоев Определение степени устойчивости системы к программным и аппаратным сбоям является важным аспектом анализа требований к ней.
Помимо функциональных требований программа также должна удовлетворять требованиям эффективности. Фактор времени выполнения и фактор объема используемой памяти должны рассматриваться вместе, поскольку обычно необходимо прийти к некоторому соглашению между этими критериями. В первую очередь должно быть установлено, не имеется ли жестких ограничений по первому или второму пункту. Например, программа может работать на микроЭВМ с объемом памяти в 128кбайт и одним гибким диском. Альтернативно, может иметься требование временного ограничения при работе в реальном масштабе времени (например, вычисление текущего уровня поверхности каждую десятую секунды). При рассмотрении временной эффективности важно различатьпроизводительностьивремя отклика.Под производительностью понимается объем данных, обрабатываемый системой за некоторый интервал времени. Время отклика характеризует время между двумя взаимодействиями с системой. Очень часто оптимизация одной из этих характеристик приводит к ухудшению другой. Например, для сети из ЭВМ увеличение производительности приводит к увеличению времени отклика за счет постановки сообщений в очередь.
Пространственно-временные соглашения заказчика должны быть проверены на согласованность с функциональными требованиями, аппаратной частью, которую заказчик предполагает использовать, и ценой, которую заказчик предполагает заплатить за систему. Например, заказчик может поставить условия, которые либо невыполнимы на существующей аппаратной части, либо требуют создания очень сложного программного обеспечения. Если имеется некоторая несовместимость, то необходимо произвести дополнительные переговоры с заказчиком и разработать новые требования.
Рассмотренные аспекты непосредственно влияют на требования спецификации. Имеется ряд других соображений, которые должны
^Предварительные замечания о процессе разработки программ
1быть рассмотрены на этапе анализа требований не потому, что1они влияют на спецификацию, а поскольку они обеспечивают раз-«работчика ценной информацией. К этим аспектам относятсямодифицируемостьиповторная используемость.Обычно имеется ряд областей, которые не изменяются, и ряд, в которых весьма вероятны возможные изменения. Информация о возможных изме--„,.T,ovп fivnvnieMочень полезна, поскольку в этом случае проек-
нениях в будущем очень
чтобы максимально
нениял " uj^j^— .. -
тирование может делаться таким образом, чтобы максимально упростить возможные изменения в дальнейшем. Эту информацию лучше всего получить из анализа ранних систем, выполнявших аналогичные задачи. Изменения скорее всего возможны в тех местах, в которых эти системы отличаются от разрабатываемой. Может также предполагаться, что разрабатываемая система будет первой системой, сходной с предыдущими, однако отличающейся рядом деталей. Построение дополнительных систем можно значительно упростить, если все созданной для первой системы математическое обеспечение или его часть было создано с учетом дальнейших модификаций. Если проектировщики знают сходства и различия, то они могут приспособить уже существующие системы, выделив сходные моменты. Хорошим примером может служить выделение части компилятора, зависящего от используемой вычислительной машины.
Важной частью анализа требований является также время выполнения всего проекта. Если заказчик спешит, то это, возможно, заставит разработчика упростить систему в ущерб ее дальнейшей расширяемости. Большое значение на график работ, а также и на саму разработку оказывает возможность создания на раннем этапе неполной системы, выполняющей при этом большинство функций окончательной версии.
В идеальном случае требования в спецификации должны быть точными и полными. Точной спецификацией называется такая, которая однозначно определяет поведение системы, а полной — такая, которая описывает все существенные аспекты поведения. Поскольку требования в спецификации обычно создаются на неформальном языке, то неполнота и неоднозначности неизбежны и труднообнаруживаемы. Программист должен стараться отыскать неоднозначности и неполноту во всех частях спецификации.
Помимо задачи разработки требования в спецификации могут также быть использованы для создания контрольных тестов, а также служить базой для написания руководства пользователя. Руководство пользователя должно быть создано в любом случае, при этом его составление представляет собой дополнительную проверку спецификации на корректность. Если системой трудно пользоваться, то это может стать очевидным при написании руководства. При знакомстве с руководством заказчик также может внести в спецификацию неучтенные ранее требования.
262 Глава 12
В дополнение к спецификации аналитик должен тг акже предоставить документ, поясняющий решения, сделанньзДе на этапе анализа, и возможные разумные альтернативы, кс»торые были отвергнуты (с объяснением, почему они были отвер» гнуты). Эта информация полезна при пересмотре спецификацигх вследствие ошибок или изменения требований заказчика.