Перечень условных обозначений
А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