Содержание лекции: архитектура программного обеспечения; типы пользовательских интерфейсов; технологии работы с документами; языки и среды программирования.
Цель лекции: ознакомиться с особенностями принятия принципиальных решений начальных этапов проектирования.
После утверждения технического задания организация-разработчик непосредственно приступает к созданию ПО. Однако переход к этапу уточнения спецификаций требует принятия некоторых принципиальных решений, от которых во многом зависят характеристики, возможности разрабатываемого ПО, особенности разработки. К таким решениям относят выбор архитектуры программного обеспечения, типа пользовательского интерфейса, технологии работы с документами, выбор подхода к разработке, а также выбор языка и среды программирования. Другими словами, эти решения определяют, что проектируется, с какими потребительскими характеристиками, как и какими средствами. Часть решений может быть определена в техническом задании, образовав группу технологических требований, остальные должны быть приняты как можно раньше, так как представляют собой исходные данные для процесса проектирования. Рассмотрим их более подробно.
Архитектура программного обеспечения – это совокупность базовых принципов его построения. Она определяется сложностью решаемых задач, степенью универсальности разрабатываемого программного обеспечения и числом пользователей, одновременно работающих с одной его копией. Различают однопользовательскую архитектуру, при которой программное обеспечение рассчитано на одного пользователя, и многопользовательскую архитектуру, которая рассчитана на работу в локальной или глобальной сети. В рамках однопользовательской архитектуры различают программы, пакеты программ, программные комплексы и системы. Многопользовательскую архитектуру реализуют системы, построенные по принципу «клиент-сервер».
Программой называют адресованный компьютеру набор инструкций, точно описывающий последовательность действий, которые необходимо выполнить для решения конкретной задачи. При структурном подходе программы представляют собой иерархию подпрограмм, вызывающих друг друга в процессе решения поставленной задачи, при объектном подходе - совокупность обменивающихся сообщениями объектов, для реализации которых разработаны специальные классы. Программа в этом случае представляет собой отдельно компилируемую программную единицу, которая может использовать стандартные библиотеки подпрограмм, но не организует свои. Это самый простой вид архитектуры, используется при решении небольших задач.
Пакеты программ представляют собой совокупностьпрограмм, решающих задачи некоторой прикладной области. Программы пакета связаны между собой только принадлежностью к определенной прикладной области. Пакет программ реализуют в виде набора отдельных программ (библиотеки), каждая из которых сама вводит необходимые данные и выводит результаты.
Программные комплексы - совокупность программ, обеспечивающих совместное решение небольшого класса сложных задач одной прикладной области. Для решения может потребоваться решить несколько подзадач, последовательно вызывая программы комплекса с помощью специальной программы - диспетчера, который обеспечивает интерфейс с пользователем и выдачу некоторой справочной информации. Несколько программ комплекса могут последовательно или циклически вызываться для решения одной задачи, поэтому желательно хранить исходные данные и результаты вызовов в пределах одного пользовательского проекта. Программы в этом случае могут реализовываться как отдельно или совместно компилируемые программные единицы, а исходные данные храниться в оперативной памяти или в файлах.
Программные системы - организованная совокупность программ (подсистем), позволяющая решать широкий класс задач из некоторой прикладной области. Программы, входящие в программную систему, взаимодействуют через общие данные. Программные системы обычно имеют развитые пользовательский и внутренние интерфейсы, что требует их тщательного проектирования. Многопользовательские программные системыдолжны организовывать сетевое взаимодействиеотдельных компонентов ПО, что усложняет процесс его разработки, поэтому для разработки используют специальные технологии или платформы (технологии CORBA, COM, Java).
Тип пользовательского интерфейса во многом определяет сложность и трудоемкость разработки. По последним данным до 80 % программного кода может реализовывать именно пользовательский интерфейс [14]. Различают четыре типа пользовательских интерфейсов:
а) примитивные - реализуют единственный сценарий работы, используя операции ввода данных, их обработки и вывода результатов;
б) меню - реализуют множество сценариев работы, операции которых организованы в иерархические структуры;
в) со свободной навигацией - реализуют множество сценариев, операции которых не привязаны к уровням иерархии, и предполагают определение множества возможных операций на конкретном шаге работы; интерфейсы данной формы в основном используют Windows-приложения;
г) прямого манипулирования - реализуют множество сценариев, представленных в операциях над объектами, инициируемых перемещением пиктограмм объектов мышью; данная форма реализована в интерфейсе операционной системы Windows.
Появление объектно-ориентированных визуальных сред разработки программного обеспечения, использующих событийный подход к программированию и в основном рассчитанных на создание интерфейсов со свободной навигацией, существенно снизило трудоемкость разработки подобных интерфейсов и упростило реализацию интерфейсов прямого манипулирования. Выбор типа интерфейса включает выбор технологии работы с документами. Различают две технологии:
а) однодокументная, которая предполагает однодокументный интерфейс (SDI - Single Document Interface) и используется, если одновременная работа с несколькими документами не обязательна;
б) многодокументная, которая предполагает многодокументный интерфейс (MDI - Multiple Document Interface) и используется, если программное обеспечение должно работать с несколькими документами одновременно, например, с несколькими текстами или несколькими изображениями.
Трудоемкость реализации многодокументных интерфейсов с использованием современных библиотек примерно на 3...5 % выше, чем однодокументных, однако тип влияет на трудоемкость более существенно.
При выборе интерфейса прямого манипулирования или со свободной навигацией практически однозначно предполагается использование объектного подхода и событийного программирования, так как современные среды визуального программирования, такие как Visual C++, Delphi, Builder C++, предоставляют интерфейсные компоненты именно в виде объектов библиотечных классов. При этом в зависимости от сложности предметной области программное обеспечение может реализовываться как с использованием объектов и, соответственно, классов, так и чисто процедурно. Исключение составляют случаи использования специализированных языков разработки Интернет-приложений (Perl), построенных по совершенно другому принципу. Примитивный интерфейс и интерфейс типа меню совместимы как со структурным, так и с объектным подходами к разработке. Поэтому выбор подхода осуществляют с использованием дополнительной информации.
Практика показывает, что объектный подход эффективен для разработки очень больших программных систем (более 100000 операторов) и в случаях, когда объектная структура предметной области ярко выражена. Следует осторожно использовать объектный подход при жестких ограничениях на эффективность разрабатываемого ПО (при разработке систем реального времени). Во всех прочих случаях выбор подхода остается за разработчиком.
В большинстве случаев проблемы выбора языка программирования реально не существует. Язык может быть определен организацией, ведущей разработку; программистом, который по возможности всегда будет использовать хорошо знакомый язык, или устоявшимся мнением. Все существующие языки программирования модно разделить на четыре группы, которые позже будут рассмотрены более подробно [2].
Среда программирования - программный комплекс, включающий текстовый редактор, встроенные компилятор, компоновщик, отладчик, справочную систему и другие программы, использование которых упрощает процесс написания и отладки программ. Последнее время широкое распространение получили среды визуального программирования, позволяющие визуально подключать к программе коды из специальных библиотек компонентов. Наиболее часто используют визуальные среды Delphi, C++ Builder фирмы Borland (Inprise Corporation), Visual C++, Visual Basic фирмы Microsoft, Visual Ada фирмы IBM. Причем, среды фирмы Microsoft обеспечивают более низкий уровень программирования «под Windows». Это является их достоинством (уменьшается вероятность возникновения «нестандартной» ситуации) и недостатком (существенно загружает программиста «рутинной» работой, от которой избавлен программист, работающий с Delphi или C++ Builder). В общем случае, выбор среды в значительной степени должен определяться характером проекта.
Реальное применение любой технологии проектирования требует формирования или выбора ряда стандартов, которые должны соблюдаться всеми участниками проекта:
а) стандарт проектирования;
б) стандарт оформления проектной документации;
в) стандарт интерфейса пользователя.
Стандарт проектирования должен определять набор необходимых моделей (схем, диаграмм) на каждой стадии проектирования и степень их детализации, правила фиксации проектных решений на диаграммах (включая правила именования объектов и соглашения по терминологии, набор атрибутов для всех объектов и правила их заполнения на каждой стадии, правила оформления диаграмм, включая требования к форме и размерам объектов), требования к конфигурации рабочих мест разработчиков (включая настройки операционной системы и используемых CASE-средств), механизм обеспечения совместной работы над проектом (включая и правила интеграции подсистем проекта и анализа проектных решений на непротиворечивость).
Стандарт оформления проектной документации регламентирует: комплектность, состав и структуру документации на каждой стадии; требования к ее содержанию и оформлению; правила подготовки, рассмотрения, согласования и утверждения документов.
Стандарт интерфейса пользователя определяет: правила оформления экранов (шрифты и цветовую палитру), состав и расположение окон и элементов управления; правила пользования клавиатурой и мышью; правила оформления текстов помощи; перечень стандартных сообщений; правила обработки реакции пользователя.
Описанные проектные решения существенно влияют на трудоемкость и сложность разработки. Только после их принятия переходят к анализу требований и разработке спецификаций проектируемого ПО.
Дополнительную информацию по теме можно получить в [1, 2, 4, 14].