Перечень условных обозначений

АCM – Association for Computing Machinery

API – Application Progpam Interface

ER – Entity – Relationship

IEC– International Electrotechnical Commission

ISO – International System Organization

IDL – Interface Definition Language

ISO – International Standard Organization

ОМ – объектная модель

ООП– объектно-ориентированный подход

ОМА ­–Object Management Architecture

ООМ – объектно-ориентированная методология

CОД – система обработки данных

ОС – операционная система

ORB – Object Request Broker

ПС – программная система

СММ – Capability Maturity Model

СОМ – Component Object Model

СORBA – Common Object Request Broker Architecture

COP – Component-Oriented Programming

CBSE – Component-Based Software Engineering

СРР – структура разбивки работ в проекте

CPM – Critical Path Method (метод критического пути)

PERT – Program Evaluation and Review Technique (анализ за методом PERT)

PMBOK – Project Management Body of Knowledge (ядро знаний в области

управления проектами)

SQA – Software Quality Assurance (гарантирование качества)

V&V – Verification and Validation (верификация и валидация)

ПИК – повторного использования компонент

ПИ – программная инженерия

ПО – программное обеспечение

РП – распределенное приложение

ЖЦ – жизненный цикл

SWEBOK – SoftWare Engineering of Body Knowledge

RMI – Remote Method Invocation

ВСТУПЛЕНИЕ

Термину «программная инженерия» (Software engineering) уже более 30 лет. К моменту его появления компьютерные программы проникли во все cферы человеческой деятельности, а их разработка стала массовым занятием. Практически нет ни одной х сферы человеческой деятельности (медицина, экономика, коммерция, промышленность и т.д.), где бы не применялись компьютерные программы.

Примерно каждые 10 лет происходит смена языков программирования и ОС. Это приводит к необходимости изменять ранее изготовленные и функционирующие программы применительно к новым языкам и ОС. Например, преобразованием Фортран и Кобол программ в современные языки (С, JAVA и др.) занимаются огромные коллективы программистов из третьих стран и СНГ.

Эффективность разработчиков в зависимости от квалификации колеблется в отношении 20:200, отсюда требуется повышать уровень их знаний. На сегодня ядро стабильных знаний по программной инженерии составляет 75% от тех знаний, что используются в практической программисткой деятельности.

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

Знания разработчиков ПО отличаются большим разнообразием, являются не согласованными и разнородными, ориентированными на разные предметные области, поэтому мировая компьютерная общественность пришла к необходимости систематизировать знания в области программной инженерии, создав ядро знаний SWEBOK (Software Engineering Body Knowledge).

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

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

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

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

– менеджеры, которые планируют и управляют проектом, отслеживают сроки и затраты;

– инженеры службы хранения готовых компонентов;

– технологи, которые определяют инженерные методы и стандарты, регламентирующие и регулирующие процесс построения программных проектов;

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

Инструменты поддержки разработки ПО совершили гигантский скачок в своем развитии и теперь обычной практикой стало создание ПС с использованием современных визуальных и диаграммных средств UML.

Таким образом, возникновение программной инженерии определено следующими факторами:

– появление разнообразных сложных методов анализа и моделирования ПО;

– большое количество ошибок в ПО;

– необходимость в эффективной организации работы коллективов разработчиков ПО;

– повторное использование готовых программных компонентов и высокотехнологических средств разработки и управления ПО;

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

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

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

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

Тема 2. Модели жизненного цикла для разработки программных систем.Описываются основные модели ЖЦ, которые используются в практике проектирования программных систем. Дана характеристика фундаментальных моделей ЖЦ (водопадной, спиральной, инкрементной, эволюционной) и стандартной модели.

Тема 3. Методы определения требований в программной инженерии. Приведены методы и инженерия требований к системе. Рассмотрен процесс сбора, накопления и спецификации требований. Дана классификация требований и характеристика функциональных и нефункциональных требований.

Тема 4. Методы анализа и построения моделей ПрО. Приведены методы анализа предметной области и построения моделей. Рассмотрены объектно–ориентированные и стандартизованные, традиционные методы проектирования архитектуры системы.

Тема 5. Методы проектирования программных систем. Представлено описание базовых основ методов систематического (структурного, компонентного, аспектно–ориентированного и др.) и теоретического (алгебраического, композиционного и алгеброалгоритмичекого) программирования для ознакомления студентов с теорией и практикой проектирования ПС.

Тема 6. Инженерия приложений и инженерия предметной области. Излагаются современные тенденции и направления развития инженерии приложений в плане производства одиночных ПС из ПИК и инженерии ПрО с многоразовым применением используемых решений для семейства ПС.

Тема 7. Методы верификации и тестирования программ и систем. Посвящена описанию методов проверки правильности программ: формальным методам доказательства, основанных на аксиомах и утверждениях, верификации и тестирования ПС на этапах ЖЦ.

Тема 8. Методы интеграции, преобразования и изменения компонентов и данных. Рассмотрены основы интеграции и преобразования программ и данных, а также методы изменения (реинженерия, реверсная инженерия и рефакторинга) компонентов и систем.

Тема 9. Модели качества и надежности в программной инженерии. Посвящена представлению моделей качества ПС, метрикам и методам достижения и измерения качества ПС. Рассмотрен основной показатель качества – надежность, дано описание математических моделей надежности и способов их применения на практике.

Тема 10. Методы управления проектом, риском и конфигурацией. Проведен анализ и дано описание инженерии программирования, принципов и методов планирования и управления программным проектом, рисками и формированием версий ПС.

Тема 11. Средства и инструменты программной инженерии. Дан обзор современных средств программирования и характеристика широко используемых CASE-средств (Project Management, Rational Rose, MSF, RUP, CORBA, DCOM и др.), при объектно–ориентированном проектировании ПС.

Приложение 1. Набор основных терминов, используемых в программной инженерии.

Приложение 2. Характеристика стандартов разработки автоматизированных систем.

Приложение 3. Жизненный цикл компонентной разработки ПС.

Приложение 4. Кодекс этики в программной инженерии.

Приложение 5. Стандарты в программной инженерии.

Тема 1

Наши рекомендации