Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow Архитектура и проектирование программных систем

Становление и развитие программной инженерии

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

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

Ф. Брукс, руководитель проекта разработки операционной системы ОБ/ЗбО, отмечал, что самым существенным свойством программных систем является их сложность [5]. По причине уникальности и несхожести своих составных частей программные системы отличаются от технических систем, например компьютеров, в которых преобладают повторяющиеся элементы. Сами компьютеры сложнее большинства продуктов человеческой деятельности. Количество их возможных состояний очень велико, поэтому их так трудно понимать, описывать и тестировать. У программных систем количество возможных состояний на порядок превышает количество состояний компьютеров.

Дополнительно к отмеченным выше особенностям ПО нужно добавить следующие [4, 8, 9, 20]:

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

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

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

По мнению Г. Буча [6], моделирование - центральное звено всей деятельности по созданию качественного программного обеспечения. Модели строятся, чтобы понять и осмыслить структуру и поведение будущей системы, облегчить управление процессом ее создания, уменьшить возможный риск, а также документировать принимаемые проектные решения. Модель - это полное описание программной системы с определенной точки зрения. Ни одна модель не является абсолютно достаточной. Напротив, чтобы понять большинство систем, кроме самых тривиальных, требуется множество взаимосвязанных моделей. Хорошие модели являются основой взаимодействия участников проекта и гарантируют корректность архитектуры.

Модели разрабатываются на специальных языках. Язык моделирования должен включать:

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

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

Уже почти 15 лет унифицированный язык моделирования UML (Unified Modeling Language) является промышленным стандартом для визуализации, специфицирования, конструирования и документирования артефактов систем, в которых главная роль принадлежит программному обеспечению. Артефакты являются строительными блоками при моделировании физических аспектов системы. Артефакт - это физическая и заменяемая часть системы. Артефакты используются для моделирования таких физических сущностей, которые могут располагаться на узлах-физических элементах, представляющих собой вычислительный ресурс, например на исполняемых программах, библиотеках, таблицах, в файлах и документах. Будучи де-факто стандартным языком моделирования, UML дает разработчикам возможность достичь взаимопонимания и избежать разночтений [6, 14].

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

  • 1. При изучении методов проектирования. Программисты, многие годы работавшие до появления объектно ориентированной технологии, отмечают серьезные трудности, связанные с освоением объектно ориентированных методов, и в первую очередь со сменой парадигмы. Графические средства облегчают решение этой проблемы.
  • 2. При общении с заказчиками программной системы - будущими пользователями и экспертами организации. Графические методы наглядно и понятно представляют архитектуру системы и объясняют, что эта система будет делать.
  • 3. При получении общего представления о системе. Графические методы показывают, какого рода абстракции существуют в системе и какие ее части нуждаются в дальнейшем уточнении. Эта информация полезна при появлении в коллективе разработчиков новых сотрудников.

Следует отметить, что в версии UML 2.0 возможности языка были расширены (формальная спецификация версии UML 2.0 опубликована в августе 2005 г., последняя версия UML 2.3 опубликована в мае 2010 г.). Благодаря свой выразительности он позволяет моделировать буквально все - от офисных информационных систем и распределенных web-приложений до встроенных систем реального времени. Язык UML- нечто большее, чем просто набор графических символов. Каждый из этих символов имеет четкую семантику. Это означает, что один разработчик может описать модель на языке UML, а другой разработчик и даже инструментальное средство - однозначно интерпретировать ее.

Язык UML - это язык специфицирования, он позволяет специфицировать все важные решения, касающиеся анализа, дизайна и реализации, принимаемые в процессе разработки и внедрения программных систем. UML не является языком визуального программирования, но его модели могут быть непосредственно ассоциированы с такими языками программирования, как Java, C++, C# или Visual Basic. Отображение модели на языке программирования позволяет осуществить прямое проектирование - генерацию кода из модели, обратное проектирование (восстановление модели по коду) также возможно. Многие компании, специализирующиеся на разработке программных продуктов, помимо исполняемого кода производят и другие продукты. Сюда относится все, что связано с разработкой требований, архитектурой, проектными решениями (дизайном), исходным кодом, проектными планами, тестами, прототипами, релизами (версиями) и др.

Корпорация IBM, крупнейшая в мире компания, работающая в области информационных технологий, лидер в разработке и внедрении инновационных решений, предлагает полный комплекс решений, сетевых технологий и услуг, которые помогают преобразовать традиционные процессы в компаниях - разработчиках программного обеспечения и максимально эффективно использовать их интеллектуальные ресурсы и новые рыночные возможности. В 2003 г. в состав компании IBM вошла корпорация Rational Software. Платформа Rational вместе с Lotus, Tivoli, WebSphere и DB2 вошла в число ключевых компонентов стратегии IBM по созданию программного обеспечения. IBM Rational выпускает CASE-средства, системы автоматизированного проектирования ПО, а также средства управления проектами, связанными с разработкой, документированием и сопровождением крупных информационных систем.

Например, продукт IBM Rational Software Architect (RSA) предназначен для построения моделей разрабатываемых программных систем с использованием унифицированного языка моделирования UML 2.0, прежде всего моделей архитектуры разрабатываемого приложения. Тем не менее RSA объединяет в себе многие функции таких программных продуктов, как Rational Application Developer, Rational Web Developer и Rational Software Modeler, тем самым предоставляя возможность архитекторам и аналитикам создавать различные представления разрабатываемой информационной системы с использованием языка UML 2.0, а разработчикам - выполнять разработку J2EE, XML, веб-сервисов и т.д.

В процессе развития практики и науки создания программных систем сложились определенные технологии программирования [7, 9, 10, 17, 18]. Эти технологии целесообразно рассмотреть в историческом контексте, выделяя основные этапы развития программирования как науки.

 
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
< Пред   СОДЕРЖАНИЕ   След >
 

Популярные страницы