Определение требований к ПО и исходных данных для его проектирования

3.1. Классификация программных продуктов по функциональному признаку.

По назначению программные продукты делятся на 3 группы:

1) системные; 2) прикладные; 3) гибридные

К системным относятся:

1) операционные системы; 2)оболочки; 3) утилиты

Прикладные ориентированы на решение конкретных пользовательских задач. Различают пользователей:

1) разработчиков программ; 2) не программисты

Для разработчиков программ:

1) case-средства; 2) системы программирования; 3) среды разработки; 4) отладочные средства

Для не программистов:

1) программы общего назначения; 2) профессиональные; 3) системы автоматизации производственных процессов; 4) обучающие, развлекающие.

Гибридные:

1) автоматизированные системы управления; 2) системы реального времени

 

3.2. Основные эксплутационные требования к программным продуктам

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

Характеристики:

1) правильность – функционирование в соответствии с ТЗ.

2) универсальность – обеспечение правильной работы при любых допустимых данных и защита от неправильных данных.

3) надежность (помехозащищенность) – обеспечение полной повторяемости результатов, т.е. их правильности при наличии различных сбоев.

4) проверяемость – возможность проверки получаемых результатов.

5) точность результатов – обеспечение заданной погрешности.

6) защищенность – обеспечение конфиденциальности информации.

7) программная совместимость.

8) аппаратная совместимость.

9) эффективность – использование минимально возможного количества ресурсов технических средств.

10) адаптируемость.

11) повторная входимость

12) возможность параллельного использования несколькими процессами

Сложность программных систем не позволяет сразу сформулировать четкие требования к ним. Обычно для перехода от идеи создания ПО к четкой формулировке требований (ТЗ) выполняют предпроектные исследования в области разработки.

 

3.3. Предпроектные исследования предметной области

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

Существует два вида неопределенности:

1) неизвестны методы решения формулируемой задачи (при решении научно-технических задач)

2) неизвестна структура автоматизируемых информационных процессов (при построении АСУ)

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

Во втором случае определяют:

1) структуры и взаимосвязи автоматизируемых информационных процессов

2) распределение функций между человеком и системой, между аппаратурой и программным обеспечением

3) функции ПО, внешние условия его функционирования, особенности интерфейса (с пользователями и при необходимости с аппаратной частью)

4) требования к программным и информационным компонентам, необходимые аппаратные ресурсы, требования к базам данных и физические характеристики программных компонентов.

Результаты предпроектных исследований предметной области используются в процессе разработки ТЗ.

 

3.4. Принципиальные решения начальных этапов проектирования

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

1) Выбор архитектуры ПО.

2) Выбор типа пользовательского интерфейса и технологии работы с документами.

3) Выбор подхода к разработке: структурный и объектный.

4) Выбор языка и среды программирования.

 

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

- однопользовательскую архитектуру,

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

В рамках однопользовательской архитектуры различают программы, пакеты программ, программные комплексы, программные системы.

Многопользовательскую архитектуру реализуют системы, построенные по принципу клиент-сервер.

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

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

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

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

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

 

2) Выбор типа пользовательского интерфейса.

Различают четыре типа пользовательских интерфейсов:

примитивные- реализуют единственный сценарий работы, например ввод данных - обработка - вывод результатов,

меню - реализуют множество сценариев работы, операции которых организованы в иерархические структуры, например «вставка» «вставка файла», «вставка символа» и т. д.,

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

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

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

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

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

• однодокументная, которая предполагает однодокументный интерфейс (SDI - Single Document Interface),

• многодокументная, которая предполагает многодокументный интерфейс (MDI - Multiple Document Interface)

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

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

3) Выбор подхода к разработке.

 

Если выбран интерфейс со свободной навигацией или прямого манипулирования, то, как указывалось выше, это практически однозначно предполагает использование событийного программирования и объектного подхода, так как современные среды визуального программирования, такие как Visual C++, Delphi, Builder C++ и им подобные, предоставляют интерфейсные компоненты именно в виде объектов библиотечных классов. При этом в зависимости от сложности предметной области программное обеспечение может реализовываться как с использованием объектов и, соответственно, классов, так и чисто процедурно. Исключение составляют случаи использования специализированных языков разработки Интернет-приложений, таких как Perl, построенных по совершенно другому принципу.

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

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

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

Во всех прочих случаях выбор подхода остается за разработчиком.

4) Выбор языка программирования.

 

В большинстве случаев никакой проблемы выбора языка программирования реально не существует. Язык может быть определен:

• организацией, ведущей разработку, например, если фирма владеет лицензионным вариантом C++ Builder, то она будет вести разработки преимущественно в данной среде;

• программистом, который по возможности всегда будет использовать хорошо знакомый язык;

• устоявшимся мнением («все разработки подобного рода должны выполниться на C++ или на Java или на …») и т. п. гели же все-таки выбор языка реально возможен, то нужно иметь в виду, что все существующие языки программирования можно разделить на следующие группы:

универсальные языки высокого уровня

• специализированные языки

• языки низкого уровня.

В группе универсальных языков высокого уровня безусловным лидером на сегодня является язык С (вместе с C++). Действительно различные версии С и C++ имеют целый ряд очень существенных достоинств:

• многоплатформенность - для всех используемых в настоящее время платформ существуют компиляторы с языка С и C++;

• наличие операторов, реализующих основные структурные алгоритмические конструкции (условную обработку, все виды циклов);

• возможность программирования на низком (системном) уровне с использованием адресов оперативной памяти;

• огромные библиотеки подпрограмм и классов.

Все это сделало С и C++ основными языками, используемыми для создания операционных систем, и, в свою очередь, служит для них дополнительной рекламой. Однако С и C++ имеют и серьезные недостатки:

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

• наличие синтаксических неоднозначностей, которые также не позволяют компилятору контролировать правильность программы;

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

Альтернативой С и C++ среди универсальных языков программирования, используемых для создания прикладного программного обеспечения, на сегодня является Pascal, компиляторы которого в силу четкого синтаксиса обнаруживают помимо синтаксических и большое количество семантических Ошибок. Версия Object Pascal, использованная в среде Delphi, сопровождается профессиональными библиотеками классов, упрощающими ведение больших разработок, в том числе и требующих использования баз данных, что делает Delphi достаточно эффективной средой для создания приложений Windows.

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

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

  • языки баз данных;
  • языки создания сетевых приложений;
  • языки создания систем искусственного интеллекта и т. д.

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

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

В настоящее время языки типа Ассемблера обычно используют:

• при написании сравнительно простых программ, взаимодействующих непосредственно с техническими средствами, например драйверов, поскольку в этом случае приходится кропотливо настраивать соответствующее оборудование, преимущества языков программирования высокого уровня становятся несущественными;

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

 

5) Выбор среды программирования

 

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

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

Наиболее часто используемыми являются визуальные среды Delphi, C++ Builder фирмы Borland (Inprise Corporation), Visual C++, Visual Basic фирмы Microsoft,Visual Ada фирмы IBM и др.

Между основными визуальными средами этих фирм Delphi, C++ Builder и Visual C++ имеется существенное различие: визуальные среды фирмы Microsoft обеспечивают более низкий уровень программирования «под Windows». Это является их достоинством и недостатком. Достоинством - так как уменьшается вероятность возникновения «нестандартной» ситуации, т. е. ситуации, не предусмотренной разработчиками библиотеки компонентов, а недостатком - так как это существенно загружает программиста «рутинной» работой, от которой избавлен программист, работающий с Delphi или C++ Builder. Много нареканий вызывает также интерфейс Visual C++, также ориентированный на «низкоуровневое» программирование.

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

 

Выбор или формирование стандартов разработки.

 

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

• стандарт проектирования;

• стандарт оформления проектной документации;

• стандарт интерфейса пользователя.

Стандарт проектированиядолжен определять:

• набор необходимых моделей (схем, диаграмм) на каждой стадии проектирования и степень их детализации;

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

• требования к конфигурации рабочих мест разработчиков, включая настройки операционной системы и используемых CASE-средств;

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

Стандарт оформления проектной документациидолжен регламентировать:

• комплектность, состав и структуру документации на каждой стадии;

• требования к ее содержанию и оформлению;

• правила подготовки, рассмотрения, согласования и утверждения документов.

Стандарт интерфейса пользователядолжен определять:

• правила оформления экранов (шрифты и цветовую палитру), состав и расположение окон и элементов управления;

• правила пользования клавиатурой и мышью;

• правила оформления текстов помощи;

• перечень стандартных сообщений;

• правила обработки реакции пользователя.

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