- •Программная инженерия и swebok
- •Введение
- •Программная инженерия как дисциплина
- •Swebok: Руководство к своду знаний по программной инженерии
- •Структура и содержание swebok
- •Перевод swebok на русский язык
- •1. Программные требования(Software Requirements по swebok)
- •1. Основы программных требований (Software Requirements Fundamentals)
- •2.1 Модель процесса определения требований:
- •2.2 Участники процессов (Process Actors)
- •2. Процесс работы с требованиями (Requirements Process)
- •2.3 Управление и поддержка процессов (Process Support and Management)
- •2.4 Качество и улучшение процессов (Process Quality and Improvement)
- •3. Извлечение требований (Requirements Elicitation)
- •3.1 Источники требований (Requirement Sources)
- •3.2 Техники извлечения требований (Elicitation Techniques)
- •4. Анализ требований (Requirements Analysis)
- •4.1 Классификация требований (Requirements Classification)
- •4.2 Концептуальное моделирование (Conceptual Modeling)
- •4.3 Архитектурное проектирование и распределение требований (Architectural Design and Requirements Allocation)
- •5. Спецификация требований (Requirements Specification)
- •5.1 Определение системы (System Definition Document)
- •5.2 Спецификация системных требований (System Requirements Specification)
- •5.3 Спецификация программных требований (Software Requirements Specification - srs)
- •6. Проверка требований (Requirements Validation)
- •6.1 Обзор требований (Requirements Review)
- •6.2 Прототипирование (Prototyping)
- •6.3 Утверждение модели (Model Validation)
- •6.4 Приемочные тесты (Acceptance Tests)
- •7. Практические соображения (Practical Considerations)
- •7.1 Итеративная природа процесса работы с требованиями (Iterative Nature of the Requirements Process)
- •7.2 Управление изменениями (Change Management)
- •7.3 Атрибуты требований (Requirements Attributes)
- •7.4 Трассировка требований (Requirements Tracing)
- •7.5 Измерение требований (Measuring Requirements)
- •2. Проектирование программного обеспечения (Software Design по swebok)
- •1. Основы проектирования (Software Design Fundamentals)
- •1.1 Общие концепции проектирования (General Design Concepts)
- •1.2 Контекст проектирования (Context of Software Design)
- •1.3 Процесс проектирования (Software Design Process)
- •1.4 Техники применения (Enabling Techniques)
- •2. Ключевые вопросы проектирования (Key Issues in Software Design)
- •2.1 Параллелизм (Concurrency)
- •2.2 Контроль и обработка событий (Control and Handling of Events)
- •2.3 Распределение компонентов (Distribution of Components)
- •2.4 Обработка ошибок и исключительных ситуаций и обеспечение отказоустойчивости (Errors and Exception Handling and Fault Tolerance)
- •2.5 Взаимодействие и представление (Interaction and Presentation)
- •2.6 Сохраняемость данных (Data Persistence)
- •3. Структура и архитектура программного обеспечения (Software Structure and Architecture)
- •3.1 Архитектурные структуры и точки зрения (Architectural Structures and Viewpoints)
- •3.2 Архитектурные стили (Architectural Styles)
- •3.3 Шаблоны проектирования (Design Patterns)
- •3.4 Семейства программ и фреймворков (Families of Programs and Frameworks)
- •4. Анализ качества и оценка программного дизайна (Software Design Quality Analysis and Evaluation)
- •4.1 Атрибуты качества (Quality Attributes)
- •4.2 Анализ качества и техники оценки (Quality Analysis and Evaluation Techniques)
- •4.3 Измерения (Measures)
- •5. Нотации проектирования (Software Design Notations)
- •5.1 Структурные описания, статический взгляд (Structural Descriptions, static view)
- •5.2 Поведенческие описания, динамический взгляд (Behavioral Descriptions, dynamic view)
- •6. Стратегии и методы проектирования программного обеспечения (Software Design Startegies and Methods)
- •6.1 Общие стратегии (General Strategies)
- •6.2 Функционально-ориентированное или структурное проектирование (Function-Oriented – Structured Design)
- •6.3 Объектно-ориентированное проектирование (Object-Oriented Design)
- •6.4 Проектирование на основе структур данных (Data-Structure-Centered Design)
- •6.5 Компонентное проектирование (Component-Based Design)
- •6.6 Другие методы (Other Methods)
- •3. Конструирование программного обеспечения (Software Construction по swebok)
- •1. Основы конструирования (Software Construction Fundamentals)
- •1.1 Минимизация сложности (Minimizing Complexity)
- •1.2 Ожидание изменений (Anticipating Changes)
- •1.3 Конструирование с возможностью проверки (Constructing for Verification)
- •1.4 Стандарты в конструировании (Standards in Constructing)
- •2. Управление конструированием (Managing Construction)
- •2.1 Модели конструирования (Construction Models)
- •2.2 Планирование конструирования (Construction Planning)
- •2.3 Измерения в конструировании (Construction Measurement)
- •3. Практические соображения (Practical Considerations)
- •3.1 Проектирование в конструировании (Construction Design)
- •3.2 Языки конструирования (Construction Languages)
- •3.3 Кодирование (Coding)
- •3.4 Тестирование в конструировании (Construction Testing)
- •3.5 Повторное использование (Reuse)
- •3.6 Качество конструирования (Construction Quality)
- •3.7 Интеграция (Integration)
- •3. Конструирование программного обеспечения (Software Construction по swebok)
- •1. Основы конструирования (Software Construction Fundamentals)
- •1.1 Минимизация сложности (Minimizing Complexity)
- •1.2 Ожидание изменений (Anticipating Changes)
- •1.3 Конструирование с возможностью проверки (Constructing for Verification)
- •1.4 Стандарты в конструировании (Standards in Constructing)
- •2. Управление конструированием (Managing Construction)
- •2.1 Модели конструирования (Construction Models)
- •2.2 Планирование конструирования (Construction Planning)
- •2.3 Измерения в конструировании (Construction Measurement)
- •3. Практические соображения (Practical Considerations)
- •3.1 Проектирование в конструировании (Construction Design)
- •3.2 Языки конструирования (Construction Languages)
- •3.4 Тестирование в конструировании (Construction Testing)
- •3.5 Повторное использование (Reuse)
- •3.3 Кодирование (Coding)
- •3.6 Качество конструирования (Construction Quality)
- •3.7 Интеграция (Integration)
- •4. Тестирование программного обеспечения (Software Testing по swebok)
- •1. Основы тестирования (Software Testing Fundamentals)
- •1.1 Терминология тестирования (Testing-Related Terminology)
- •1.2 Ключевые вопросы (Key Issues)
- •1.3 Связь тестирования с другой деятельностью (Relationships of testing with other activities)
- •2. Уровни тестирования (Test Levels)
- •2.1 Над чем производятся тесты (The target of the test)
- •2.2 Цели тестирования (Objectivies of Testing)
- •3. Техники тестирования (Test Techniques)
- •3.1 Техники, базирующиеся на интуиции и опыте инженера (Based on the software engineer’s intuition and experience)
- •3.2 Техники, базирующиеся на спецификации (Specification-based techniques)
- •3.3 Техники, ориентированные на код (Code-based techniques)
- •3.4 Тестирование, ориентированное на дефекты (Fault-based techniques)
- •3.5 Техники, базирующиеся на условиях использования (Usage-based techniques)
- •3.6 Техники, базирующиеся на природе приложения (Techniques based on the nature of the application)
- •3.7 Выбор и комбинация различных техник (Selecting and combining techniques)
- •4. Измерение результатов тестирования (Test-related measures)
- •4.1 Оценка программ в процессе тестирования (Evaluation of the program under test, ieee 982.1-98)
- •4.2 Оценка выполненных тестов (Evaluation of the tests performed)
- •5. Процесс тестирования (Test Process)
- •5.1 Практические соображения (Practical considerations)
- •5.2 Тестовые работы (Test Activities)
- •5. Сопровождение программного обеспечения(Software Maintenance по swebok)
- •1. Основы сопровождения программного обеспечения (Software Maintenance Fundamentals)
- •1.1 Определения и терминология (Definitions and Terminology)
- •1.2 Природа сопровождения (Nature of Maintenance)
- •1.3 Потребность в сопровождении (Need for Maintenance)
- •1.4 Приоритет стоимости сопровождения (Majority of Maintenance Costs)
- •1.5 Эволюция программного обеспечения (Evolution of Software)
- •1.6 Категории сопровождения (Categories of Maintenance)
- •2. Ключевые вопросы сопровождения программного обеспечения (Key Issues in Software Maintenance)
- •2.1 Технические вопросы (Technical Issues)
- •2.2 Управленческие вопросы (Management Issues)
- •2.3 Оценка стоимости сопровождения (Maintenance Cost Estimation)
- •2.4 Измерения в сопровождении программного обеспечения (Software Maintenance Measurement)
- •3. Процесс сопровождения (Maintenance Process)
- •3.1 Процессы сопровождения (Maintenance Processes)
- •3.2 Работы по сопровождению (Maintenance Activities)
- •4. Техники сопровождения (Techniques for Maintenance)
- •4.1 Понимание программных систем (Program Comprehension)
- •4.2 Реинжиниринг* (Reengineering)
- •4.3 Обратный инжиниринг* (Reverse engineering)
- •5. Сопровождение программного обеспечения(Software Maintenance по swebok)
- •1. Основы сопровождения программного обеспечения (Software Maintenance Fundamentals)
- •1.1 Определения и терминология (Definitions and Terminology)
- •1.2 Природа сопровождения (Nature of Maintenance)
- •1.3 Потребность в сопровождении (Need for Maintenance)
- •1.4 Приоритет стоимости сопровождения (Majority of Maintenance Costs)
- •1.5 Эволюция программного обеспечения (Evolution of Software)
- •1.6 Категории сопровождения (Categories of Maintenance)
- •2. Ключевые вопросы сопровождения программного обеспечения (Key Issues in Software Maintenance)
- •2.1 Технические вопросы (Technical Issues)
- •2.2 Управленческие вопросы (Management Issues)
- •2.3 Оценка стоимости сопровождения (Maintenance Cost Estimation)
- •2.4 Измерения в сопровождении программного обеспечения (Software Maintenance Measurement)
- •3. Процесс сопровождения (Maintenance Process)
- •3.1 Процессы сопровождения (Maintenance Processes)
- •3.2 Работы по сопровождению (Maintenance Activities)
- •4. Техники сопровождения (Techniques for Maintenance)
- •4.1 Понимание программных систем (Program Comprehension)
- •4.2 Реинжиниринг* (Reengineering)
- •4.3 Обратный инжиниринг* (Reverse engineering)
- •6. Конфигурационное управление (Software Configuration Management по swebok)
- •1. Управление scm-процессом (Management of scm Process)
- •1.1 Организационный контекст scm (Organizational Context for scm)
- •1.2 Ограничения и правила scm (Constraints and Guidance for the scm Process)
- •1.3 Планирование в scm (Planning for scm)
- •1.4 План конфигурационного управления (scm Plan)
- •1.5 Контроль выполнения scm-процесса (Surveillance of Software Configuration Management)
- •2. Идентификация программных конфигураций (Software Configuration Identification)
- •2.1 Идентификация элементов, требующих контроля (Identifying Items to Be Controlled)
- •2.2 Программная библиотека (Software Library)
- •3. Контроль программных конфигураций (Software Configuration Control)
- •3.1 Предложение, оценка и утверждение изменений (Requesting, Evaluating, and Approving Software Changes)
- •3.2 Реализация изменений (Implementing Software Changes)
- •3.3 Отклонения и отказ от изменений (Deviations and Waivers)
- •4. Учет статусов конфигураций (Software Configuration Status Accounting)
- •4.1 Информация о статусе конфигураций (Software Configuration Status Information)
- •4.2 Отчетность по статусу конфигураций (Software Configuration Status Reporting)
- •5. Аудит конфигураций (Software Configuration Auditing)
- •5.1 Функциональный аудит программных конфигураций (Software Functional Configuration Audit)
- •5.2 Физический аудит программных конфигураций (Software Physical Configuration Audit)
- •5.3 Внутренние аудиты базовых линий (In-process Audits of Software Baseline)
- •6. Управление выпуском и поставкой (Software Release Management and Delivery)
- •6.1 Сборка программного обеспечения (Software Building)
- •6.2 Управление выпуском программного обеспечения (Software Release Management)
- •7. Управление программной инженерией(Software Engineering Management по swebok)
- •1. Инициирование и определение содержания (Initiation and Scope Definition)
- •1.1 Определение и обсуждение требований (Determination and Negotiation of Requirements)
- •1.2 Анализ осуществимости. Технические, операционные, финансовые, социальные/политические аспекты. (Feasibility Analysis. Technical, Operational, Financial, Social/Political.)
- •1.3 Процесс оценки и пересмотра требований (Process of Review and Revision of Requirements)
- •2. Планирование программного проекта (Software Project Planning)
- •2.1 Планирование процесса (Process Planning)
- •2.2 Определение результатов (Determine Deliverables)
- •2.3 Оценка усилий, расписания и стоимостных ожиданий (Efforts,Schedule and Cost Estimation)
- •2.4 Распределение ресурсов (Resource Allocation)
- •2.5 Управление рисками (Risk Management)
- •2.6 Управление качеством (Quality Management)
- •2.7 Управление планом проекта (Plan Management)
- •3. Выполнение программного проекта (Software Project Enactment)
- •3.5 Процесс контроля (Control Process)
- •3.6 Ведение отчетности (Reporting)
- •4. Обзор и оценка (Review and Evaluation)
- •4.1 Определение удовлетворения требованиям (Determining Satisfaction of Requirements)
- •4.2 Оценка продуктивности/результативности (Reviewing and Evaluation Performance)
- •5. Закрытие (Closure)
- •5.2 Работы по закрытию проекта (Closure Activities)
- •6. Измерения в программной инженерии (Software Engineering Measurement)
- •6.1 Установление и поддержка процесса ведения измерений (Establish and Sustain Measurement Commitment)
- •6.2 Планирование процесса измерений (Plan the Measurement Process)
- •6.3 Выполнение процесса измерений (Perform the Measurement Process)
- •6.4 Оценка измерений (Evaluate Measurement)
- •8. Процесс программной инженерии(Software Engineering Process по swebok)
- •1. Реализация и изменение процесса (Process Implementation and Change)
- •1.1 Инфраструктура процесса (Process Infrastructure)
- •1.2 Цикл управления программным процессом (Software Process Management Cycle)
- •1.3 Модели реализации и изменения процесса (Models for Process Implementation and Change)
- •1.4 Практические соображения (Practical Considerations)
- •2. Определение процесса (Process Definition)
- •2.1 Модели жизненного цикла программного обеспечения (Software Life Cycle Models)
- •2.2 Процессы жизненного цикла программного обеспечения (Software Life Cycle Processes)
- •2.3 Нотации определения процесса (Notations for Process Definitions)
- •2.4 Адаптация процесса (Process Adaptation)
- •2.5 Автоматизация (Automation)
- •3. Оценка процесса (Process Assessment)
- •3.1 Модели оценки процесса (Process Assessment Models)
- •3.2 Методы оценки процесса (Process Assessment Methods)
- •4. Измерения в отношении процессов и продуктов (Process and Product Measurement)
- •4.1 Измерения в отношении процессов (Process Measurement)
- •4.2* Измерения в отношении программных продуктов (Software Product Measurement)
- •4.3 Качество результатов измерений (Quality Of Measurement Results)
- •4.4 Информационные модели (Software Information Models)
- •4.5 Техники количественной оценки процессов (Process Measurement Techniques)
- •9. Инструменты и методы программной инженерии(Software Engineering Tools and Methods по swebok)
- •1. Инструменты программной инженерии (Software Engineering Tools)
- •1.1 Инструменты работы с требованиями (Software Requirements Tools)
- •1.2 Инструменты проектирования (Software Design Tools)
- •1.3 Инструменты конструирования (Software Construction Tools)
- •1.4 Инструменты тестирования (Software Testing Tools)
- •1.5 Инструменты сопровождения (Software Maintenance Tools)
- •1.6 Инструменты конфигурационного управления (Software Configuration Management Tools)
- •1.7 Инструменты управления инженерной деятельностью (Software Engineering Management Tools)
- •1.8 Инструменты поддержки процессов (Software Engineering Process Tools)
- •1.9 Инструменты обеспечения качества (Software Quality Tools)
- •1.10 Дополнительные аспекты инструментального обеспечения (Miscellaneous Tool Issues)
- •2. Методы программной инженерии (Software Engineering Methods)
- •2.1 Эвристические методы (Heuristic Methods)
- •2.2 Формальные методы (Formal Methods)
- •2.3 Методы прототипирования (Prototyping Methods)
- •10. Качество программного обеспечения(Software Quality по swebok)
- •1. Основы качества программного обеспечения (Software Quality Fundamentals)
- •1.1 Культура и этика программной инженерии (Software Engineering Culture and Ethics)
- •1.2 Значение и стоимость качества (Value and Costs of Quality)
- •1.3 Модели и характеристики качества (Models and Quality Characteristics)
- •1.4 Повышение качества (Quality Improvement)
- •2. Процессы управления качеством программного обеспечения (Software Quality Processes)
- •2.1 Подтверждение качества программного обеспечения (Software Quality Assurance, sqa)
- •2.2 Проверка (верификация) и аттестация (Verification and Validation, V&V)
- •2.3 Оценка (обзор) и аудит (Review and Audits)
- •3. Практические соображения (Practical Considerations)
- •3.1 Требования к качеству программного обеспечения (Software Quality Requirements)
- •3.2 Характеристика дефектов (Defect Characterization)
- •3.3 Техники управления качеством программного обеспечения (Software Quality Management Techniques)
- •3.4 Количественная оценка качества программного обеспечения (Software Quality Measurement)
- •Модели жизненного цикла программного обеспечения
- •Стандарт 12207: Процессы жизненного цикла программного обеспечения
- •Организация стандарта и архитектура жизненного цикла
- •Основные процессы жизненного цикла (5) Приобретение (5.1)
- •Поставка (5.2)
- •Разработка (5.3)
- •Эксплуатация (5.4)
- •Сопровождение (5.5)
- •Адаптация стандарта
- •Модели жизненного цикла
- •Каскадная (водопадная) модель
- •Итеративная и инкрементальная модель – эволюционный подход
- •Спиральная модель
- •Дополнительная библиография
3.6 Качество конструирования (Construction Quality)
Существует ряд техник, предназначенных для обеспечения качества кода, выполняемых по мере его конструирования. Основные техники обеспечения качества, используемые в процессе конструирования, включают:
модульное (unit) и интеграционное (integration) тестирование
разработка с первичностью тестов (test-first development - тесты пишутся до конструирования кода)
пошаговое кодирование (деятельность по конструированию кода разбивается на мелкие шаги, только после тестирования результатов которых производится переход к следующему шагу кодирования; известен также как итеративное кодирование с тестированием)
использование процедур утверждений (assertion)
отладка (в привычном понимании - debugging)
технические обзоры и оценки (review)
статический анализ
Выбор и использование конкретных техник часто диктуется стандартами (внутренними и внешними), используемыми проектной командой, а также зависят от опыта и подготовленности специалистов, занимающихся конструированием кода.
Деятельность по обеспечению качества в конструировании отличается от других операций по обеспечению качества. Основное отличие заключается в фокусе на программном (исходном) коде и других артефактах (активах), тесно связанных с кодом, в частности, детальных моделях.
3.7 Интеграция (Integration)
Одна из ключевых деятельностей, осуществляемых в процессе конструирования, - интеграция отдельно сконструированных операций (процедур), классов, компонентов и подсистем (модулей). В дополнение к этому, некоторые программные системы нуждаются в специальной интеграции с другим программным и аппаратным обеспечением.
Кроме упомянутых аспектов интеграции, к обсуждаемым интеграционным вопросам конструирования относятся:
планирование последовательности, в которой интегрируются компоненты;
обеспечение поддержки создания промежуточных версий программного обеспечения;
задание “глубины” тестирования (в частности, на основе критериев “приемлемого” качества) и других работ по обеспечению качества интегрируемых в дальнейшем компонент;
наконец, определение этапных точек проекта, когда будут тестироваться промежуточные версии конструируемой программной системы.
3. Конструирование программного обеспечения (Software Construction по swebok)
Глава базируется на IEEE Guide to the Software Engineering Body of Knowledge - SWEBOK. Содержит перевод описания области знаний SWEBOK “Software Construction”, с замечаниями и комментариями.
![]()
Конструирование программного обеспечения (Software Construction)1. Основы конструирования (Software Construction Fundamentals)1.1 Минимизация сложности (Minimizing Complexity)1.2 Ожидание изменений (Anticipating Changes)1.3 Конструирование с возможностью проверки (Constructing for Verification)1.4 Стандарты в конструировании (Standards in Constructing)2. Управление конструированием (Managing Construction)2.1 Модели конструирования (Construction Models)2.2 Планирование конструирования (Construction Planning)2.3 Измерения в конструировании (Construction Measurement)3. Практические соображения (Practical Considerations)3.1 Проектирование в конструировании (Construction Design)3.2 Языки конструирования (Construction Languages)3.3 Кодирование (Coding)3.4 Тестирование в конструировании (Construction Testing)3.5 Повторное использование (Reuse)3.6 Качество конструирования (Construction Quality)3.7 Интеграция (Integration)
![]()
Термин конструирование программного обеспечения (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]
