Главная страница
Навигация по странице:

  • Общие стратегии (General Strategies)

  • Функционально-ориентированное или структурное проектирование (Function-Oriented – Structured Design)

  • Объектно-ориентированное проектирование (Object- Oriented Design)

  • Проектирование на основе структур данных (Data- Structure-Centered Design)

  • Компонентное проектирование (Component-Based Design)

  • Другие методы (Other Methods)

  • Конструирование программного обеспечения

  • Основы конструирования (Software Construction Fundamentals)

  • Минимизация сложности (Minimizing Complexity)

  • Ожидание изменений (Anticipating Changes)

  • Конструирование с возможностью проверки (Constructing for Verification)

  • Стандарты в конструировании (Standards in Constructing)

  • Управление конструированием (Managing

  • Основы Программной Инженерии (по swebok) Введение Программная инженерия как дисциплина swebok руководство


    Скачать 3.21 Mb.
    НазваниеОсновы Программной Инженерии (по swebok) Введение Программная инженерия как дисциплина swebok руководство
    Анкорswebok
    Дата14.10.2022
    Размер3.21 Mb.
    Формат файлаpdf
    Имя файлаswebok_2004_ru.pdf
    ТипРуководство
    #733732
    страница7 из 30
    1   2   3   4   5   6   7   8   9   10   ...   30
    Поведенческие описания, динамический взгляд
    (Behavioral Descriptions, dynamic view)
    Следующие нотации и языки (часть из которых –
    графические, часть - текстовые) используются для описания динамического поведения программных систем и их компонентов. Многие из этих нотаций успешно используются для проектирования деталей дизайна, но не только для этого.

    Диаграммы деятельности или операций (Activity
    diagrams): используются для описания потоков работ и управления;
    Диаграммы сотрудничества (Collaboration
    diagrams): показывают динамическое взаимодействие, происходящее в группе объектов и уделяют особое внимание объектам, связям между ними и сообщениям, которыми обмениваются объекты посредством этих связей;
    Диаграммы потоков данных (Data flow diagrams,
    DFD): описывают потоки данных внутри набора процессов (не в терминах процессов операционной среды, но в понимании обмена информацией в бизнес-контексте);
    Таблицы и диаграммы <принятия> решений
    (Decision tables and diagrams): используются для представления сложных комбинаций условий и действий (операций);
    Блок-схемы и структурированные блок-схемы
    (Flowcharts and structured flowcharts): применяются для представления потоков управления (контроля) и связанных операций;
    Диаграммы последовательности (Sequence
    diagrams): используются для показа взаимодействий внутри группы объектов с акцентом на временной последовательности сообщений/вызовов;
    Диаграммы перехода и карты состояний(State
    transition and statechart diagrams): применяются для описания потоков управления переходами между состояниями;
    Формальные языки спецификации (Formal
    specification languages): текстовые языки,
    использующие основные понятия из математики

    (например, множества) для строгого и абстрактного определения интерфейсов и поведения программных компонентов, часто в терминах пред- и пост-условий;
    Псевдокод и программные языки проектирования
    (Pseudocode and program design languages, PDL):
    языки, используемые для описания поведения процедур и методов, в основном на стадии детального проектирования; подобны структурным языкам программирования.
    Стратегии и методы проектирования программного
    обеспечения (Software Design Startegies and Methods)
    Существуют различные общие стратегии, помогающие в проведении работ по проектированию. В отличие от общих стратегий, методы проектирования более специфичны и, в основном, предлагают и предоставляют нотации (или наборы нотаций) для использования совместно с этими методами, а также процессы,
    которым необходимо следовать в рамках используемого метода.
    Таким образом, методы в данном контексте это не просто некие “слабоформализованные” или просто частные практические подходы или техники. Методы здесь являются более общими понятиями, это - методологии, сконцентрированные на процессе (в частности, проектирования) и предполагающие следование определенным правилам и соглашениям, в том числе – по используемым выразительным средствам. Такие методы полезны как инструмент систематизации (иногда, формализации) и передачи знаний в виде общего фреймворка (то есть комплексного
    набора понятий, подходов, техник и инструментов) не только для отдельных специалистов, но для команд и проектных групп программных проектов.
    Общие стратегии (General Strategies)
    Это обычно часто упоминаемые и общепринятые стратегии:
    “разделяй-и-властвуй” и пошаговое уточнение проектирование “сверху-вниз” и “снизу-вверх”
    абстракция данных и сокрытие информации итеративный и инкрементальный подход и другие…
    Функционально-ориентированное или структурное
    проектирование (Function-Oriented – Structured Design)
    Это один из классических методов проектирования, в котором декомпозиция сфокусирована на идентификации основных программных функций и,
    затем, детальной разработке и уточнении этих функций
    “сверху-вниз”. Структурное проектирование, обычно,
    используется после проведения структурного анализа с применением диаграмм потоков данных и связанным описанием процессов. Исследователи предлагают различные стратегии и метафоры или подходы для трансформации DFD в программную архитектуру,
    представляемую в форме структурных схем. Например,
    сравнивая управление и поведение с получаемым эффектом.
    Объектно-ориентированное проектирование (Object-
    Oriented Design)

    Представляет собой множество методов проектирования, базирующихся на концепции объектов.
    Данная область активно эволюционирует с середины 80- х годов, основываясь на понятиях объекта (сущности),
    метода (действия) и атрибута (характеристики). Здесь главную роль играют полиморфизм и инкапсуляция, в то время, как в компонентно-ориентированном подходе большее значение придается мета-информации,
    например, с применением технологии отражения
    (reflection). Хотя корни объектно-ориентированного проектирования лежат в абстракции данных (к которым добавлены поведенческие характеристики), так называемый responsibility-driven design или проектирование на основе <функциональной>
    ответственности по SWEBOK* может рассматриваться как альтернатива объектно-ориентированному проектированию.
    *Такое противопоставление – достаточно спорный вопрос, так как функциональная ответственность столь же близка принципам современного объектно- ориентированного проектирования, сколь и абстракция данных. Это вопрос эволюционирования взглядов и степени их консерватизма.
    Проектирование на основе структур данных (Data-
    Structure-Centered Design)
    В данном подходе фокус сконцентрирован в большей степени на структурах данных, которыми управляет система, чем на функциях системы. Инженеры по программному обеспечению часто вначале описывают структуры данных входов (inputs) и выходов (outputs), а,
    затем, разрабатывают структуру управления этими данными (или, например, их трансформации).
    Компонентное проектирование (Component-Based Design)
    Программные компоненты являются независимыми единицами, которые обладают однозначно- определенными (well-defined) интерфейсами и зависимостями (связями) и могут собираться и развертываться независимо друг от друга. Данный подход призван решить задачи использования,
    разработки и интеграции таких компонент с целью повышения повторного использования активов (как архитектурных, так и в форме кода).
    Компонентно-ориентированное проектирование является одной из наиболее динамично развивающихся концепций проектирования и может рассматриваться как предвестник и основа сервисно-ориентированного подхода (Service-Oriented Architecture, SOA) в проектировании, не рассматриваемого, к сожалению, в
    SWEBOK, но все более активно использующегося в индустрии и смещающего акценты с аспектов организации связи интерфейс-реализация к обмену информацией на уровне интерфейс-интерфейс (то есть
    – межкомпонентному взаимодействию). По мнению автора книги, уже наступил тот момент, когда необходимо вводить отдельную тему, посвященную сервисно-ориентированному подходу в проектировании и сервисно-ориентированным архитектурам, как моделям. В частности, нотация UML 2.0 уже позволяет решать ряд вопросов, связанных с визуальным представлением соответствующих архитектурных решений, где сервисы (службы) могут рассматриваться
    как публикуемая функциональность одиночных компонентов и групп компонентов, объединенных в более “крупные” блоки, обеспечивающие предоставление соответствующей сервисной функциональности.
    Другие методы (Other Methods)
    Другие интересные, но менее распространенные подходы, в основном, представляют собой формальные и точные (строгие) методы, а также, методы трансформации.

    Конструирование программного
    обеспечения
    Глава базируется на IEEE Guide to the Software
    Engineering Body of Knowledge - SWEBOK.
    Содержит перевод описания области знаний
    SWEBOK “Software Construction”, с замечаниями и комментариями.
    Конструирование программного обеспечения
    (Software Construction)
    Термин конструирование программного обеспечения
    (software construction) описывает детальное создание рабочей программной системы посредством комбинации кодирования, верификации
    (проверки), модульного тестирования (unit testing),
    интеграционного тестирования и отладки.
    Данная область знаний связана с другими областями. Наиболее сильная связь существует с проектированием (Software Design) и тестированием
    (Software Testing). Причиной этого является то, что сам по себе процесс конструирования программного обеспечения затрагивает важные аспекты деятельности по проектированию и тестированию.
    Кроме того, конструирование отталкивается от результатов проектирования, а тестирование (в любой своей форме) предполагает работу с результатами конструирования. Достаточно сложно
    определить границы между проектированием,
    конструированием и тестированием, так как все они связаны в единый комплекс процессов жизненного цикла и, в зависимости от выбранной модели жизненного цикла и применяемых методов
    (методологии), такое разделение может выглядеть по разному.
    Хотя ряд операций по проектированию детального дизайна может происходить до стадии конструирования, большой объем такого рода проектных работ происходит параллельно с конструированием или как его часть. Это есть суть связи с областью знаний “Проектирование программного обеспечения”.
    В свою очередь, на протяжении всей деятельности по конструированию, инженеры используют модульное и интеграционное тестирование. Таким образом связана данная область знаний с
    “Тестированием программного обеспечения”.
    В процессе конструирования обычно создается большая часть активов программного проекта - конфигурационных элементов (configuration items).
    Поэтому в реальных проектах просто невозможно рассматривать деятельность по конструированию в отрыве от области знаний “Конфигурационного управления” (Software Configuration Management).
    Так как конструирование невозможно без использования соответствующего инструментария и,
    вероятно, данная деятельность является наиболее инструментально-насыщенной, важную роль в конструировании играет область знаний
    “Инструменты и методы программной инженерии”
    (Software Engineering Tools and Methods).
    Безусловно, вопросы обеспечения качества значимы для всех областей знаний и этапов жизненного цикла. В то же время, код является основным результирующим элементом программного проекта.
    Таким образом, явно напрашивается и присутствует связь обсуждаемых вопросов с областью знаний
    “Качество программного обеспечения” (Software
    Quality).
    Из связанных дисциплин программной инженерии
    (Related Disciplines of Software Engineering) наиболее тесная и естественная связь данной области знаний существует с компьютерными науками (computer scince). Именно в них, обычно, рассматриваются вопросы построения и использования алгоритмов и практик кодирования. Наконец, конструирование касается и управления проектами (project management), причем, в той степени, насколько деятельность по управлению конструированием важна для достижения результатов конструирования.

    Рисунок 4. Область знаний
    “Конструирование программного обеспечения” [SWEBOK, 2004, с.4-2, рис. 1]
    Основы конструирования (Software Construction
    Fundamentals)
    Фундаментальные основы конструирования программного обеспечения включают:
    Минимизация сложности
    Ожидание изменений
    Конструирование с возможностью проверки
    Стандарты в конструировании

    Первые три концепции применяются не только к конструированию, но и проектированию, и лежат в основе современных методологий управления жизненным циклом программных систем.
    Минимизация сложности (Minimizing Complexity)
    Основной причиной того, почему люди используют компьютеры в бизнес-целях, являются ограниченные возможности людей в обработке и хранении сложных структур и больших объемов информации,
    в частности, на протяжении длительного периода времени. Это соображение является одной из основных движущих сил в конструировании программного обеспечения: минимизация сложности. Потребность в уменьшении сложности влияет на все аспекты конструирования и особенно критична для процессов верификации (проверки) и тестирования результатов конструирования, т.е.
    самих программных систем.
    Уменьшение сложности в конструировании программного обеспечения достигается при уделении особого внимания созданию простого и легко читаемого кода, пусть и в ущерб стремлению сделать его идеальным (например, с точки зрения гибкости или следования тем или иным представлениям о красоте, утончённости кода,
    ловкости тех или иных приемов, позволяющих его сократить в ущерб размерам и т.п.). Это не значит,
    что должно ущемляться применение тех или иных
    развитых языковых возможностей используемых средств программирования. Это подразумевает
    “лишь” придание большей значимости читаемости кода, простоте тестирования, приемлемому уровню производительности и удовлетворению заданных критериев, вместо постоянного совершенствования кода, не оглядываясь на сроки, функциональность и другие характеристики и ограничения проекта.
    Минимизация сложности достигается, в частности,
    следованием стандартам (обсуждаются в теме 1.4
    “Стандарты в конструировании”), использованием ряда специфических техник (освещаются в 3.3
    “Кодирование”) и поддержкой практик, направленных на обеспечение качества в конструировании (3.5
    “Качество конструирования”).
    Ожидание изменений (Anticipating Changes)
    Большинство программных систем изменяются с течением времени. Причин этому – множество.
    Ожидание изменений является одной из движущих сил конструирования программного обеспечения.
    Программное обеспечение не является изолированным от внешнего окружения (как системного, так и с точки зрения области деятельности, для автоматизации задач и проблем которого оно применяется). Более того,
    программные системы являются частью изменяющейся среды и должны меняться вместе с
    ней, а, иногда, и быть источником изменений самой среды.
    Ожидание изменений поддерживается рядом техник,
    представленных в теме 3.3 “Кодирование”.
    Конструирование с возможностью проверки
    (Constructing for Verification)
    “Конструирование для проверки” (а именно такой смысл заложен в оригинальное название данной темы) предполагает, что построение программных систем должно вестись таким образом, чтобы сама программная система помогала вести поиск причин сбоев, будучи прозрачной для применения различных методов проверки (и, кстати, внесения необходимых изменений), как на стадии независимого тестирования (например, инженерами- тестировщиками), так и в процессе операционной деятельности - эксплуатации, когда особенно важна возможность быстрого обнаружения и исправления возникающих ошибок.
    Среди техник, направленных на достижение такого результата конструирования:
    обзор, оценка кода (code review)
    модульное тестирование (unit-testing)
    структурирование кода для и совместно с применениям автоматизированных средств тестирования (automated testing)
    ограниченное применение сложных или тяжелых для понимания языковых структур
    Стандарты в конструировании (Standards in
    Constructing)
    Стандарты, которые напрямую применяются при конструировании, включают:
    коммуникационные методы (например,
    стандарты форматов документов и
    <оформления> содержания)
    языки программирования и соответствующие стили кодирования (например, Java Language
    Specification, являющийся частью стандартной документации JDK – Java Development Kit и Java
    Style Guide, предлагающий общий стиль кодирования для языка программирования Java)
    платформы (например, стандарты программных интерфейсов для вызовов функций операционной среды, такие как прикладные программные интерфейсы платформы Windows
    - Win32 API, Application Programming Interface или .NET Framework SDK, Software Development
    Kit)
    инструменты (не в терминах сред разработки, но возможных средств конструирования –
    например, UML как один из стандартов для определения нотаций для диаграмм,
    представляющих структура кода и его
    элементов или некоторых аспектов поведения кода)
    Использование внешних стандартов.
    Конструирование зависит от внешних стандартов,
    связанных с языками программирования,
    используемым инструментальным обеспечением,
    техническими интерфейсами и взаимным влиянием
    Конструирования программного обеспечения и других областей знаний программной инженерии (в том числе, связанных дисциплин, например,
    управления проектами). Стандарты создаются разными источниками, например, консорциумом
    OMG – Object Management Group (в частности.
    Стандарты CORBA, UML, MDA, …),
    международными организациями по стандартизации такими, как ISO/IEC, IEEE, TMF, …, производителями платформ, операционных сред и т.д. (например,
    Microsoft, Sun Microsystems, CISCO, NOKIA, …),
    производителями инструментов, систем управления базами данных ит.п. (Borland, IBM, Microsoft, Sun,
    Oracle, …). Понимание этого факта позволяет определить достаточный и полный набор стандартов, применяемых в проектной команде или организации в целом.
    Использование внутренних стандартов.
    Определенные стандарты, соглашения и процедуры могут быть также созданы внутри организации или даже проектной команды. Эти стандарты поддерживают координацию между определенными
    видами деятельности, группами операций,
    минимизируют сложность (в том числе при взаимодействии членов проектной группы и за ее пределами), могут быть связаны с вопросами ожидания и обработки изменений, рисков и вопросами конструирования для проверки и дальнейшего тестирования. В сочетании со внешними стандартами, внутренние стандарты призваны определить общие правила игры для всех членов проектной команды, договорившись о терминах, процедурах и других значимых соглашениях, вне зависимости от степени формализации процессов конструирования, в частности, и процессов жизненного цикла, в общем случае.
    Управление конструированием (Managing
    1   2   3   4   5   6   7   8   9   10   ...   30


    написать администратору сайта