75
1. Функциональные требования – определяют работу, которую должно выполнять
проектируемая система (например, «приложение будет вычислять стоимость портфеля
акций пользователя»).
2. Нефункциональные требования.
2.1. Производительность. Требования к производительности определяют временные
ограничения, которые должны быть выполнены в программе. Заказчики и
разработчики обсуждают ограничения по времени вычислений, использованию
оперативной памяти, объему запоминающих устройств и т. д.
2.2. Надежность и безопасность. Требования надежности определяют надежность в
измеряемых величинах. Требования такого типа предполагают вероятность
неидеальной работы программы и ограничивают область ее несовершенства. Особое
внимание в ПЗ необходимо уделить вопросам обеспечения безопасности системы с
учетом возможности искажения данных посредством несанкционированного
доступа, сбоя системного или прикладного ПО.
2.3. Обработка ошибок. Эта категория требований объясняет, как программа должна
реагировать на возникающие ошибки. Например, что должна делать программа, если
она получает сообщение из другой программы в неразрешенном формате? Это не
касается ошибок, генерируемых самой программой.
2.4. Интерфейсные требования. Интерфейсные требования описывают формат, в котором
программа общается с окружением.
2.5. Ограничения. Ограничения на проектирование или реализацию описывают границы
или условия того, как приложение должно быть задумано и разработано. Например,
накладываются ограничения на инструменты и языки программирования ввиду
сложившихся традиций организации, опыта программистов, совместимости и проч.
3. Обратные требования – это функционал, который система не обеспечивает.
Типичная последовательность получения функциональных D-требований с ис-
пользованием объектно-ориентированного подхода приведена ниже:
1. Процесс начинается с перечисления классов, упомянутых в вариантах использования –
это т.н. классы анализа.
2. Полученный набор классов обычно неполон и следует попытаться найти остальные
классы предметной области.
3. Для каждого из полученных классов выписывается вся необходимая функциональность
программы, за которую отвечает данный класс. Например, «у каждого клиента будет
имя» (атрибут класса Клиент) и «программа должна иметь возможность вычислять
капитал каждого клиента» (метод класса Клиент). События, которые должны
обрабатывать объекты класса, также должны быть определены. В это же время должны
быть разработаны и планы тестирования для каждого D-требования.
4. Связи между классами определяются в два этапа:
4.1. Начальный набор связей определяется на основе анализа диаграмм сотрудничества
(collaboration) или диаграмм последовательности. Если два объекта взаимодействуют
(обмениваются сообщениями), между ними на диаграмме должна существовать связь
(путь взаимодействия), которая преобразуется в двунаправленную ассоциацию
между соответствующими классами. Если сообщения между некоторой парой
объектов передаются только в одном направлении, то для соответствующей
ассоциации вводится направление навигации.
4.2. Анализируются и уточняются ассоциации между классами-сущностями. Задаются
мощности ассоциаций, могут использоваться множественные ассоциации, агрегации,
обобщения и ассоциации-классы.
5. D-требования проверяются и сравниваются с С-требованиями.
6. D-требования проверяются заказчиком и, затем, публикуются.