
Основные принципы стратегии «Чистой комнаты»
Стратегия «Чистой комнаты» (Cleanroom Software Engineering) – это инкрементальный процесс разработки программного обеспечения, включающий в себя формальные методы математической верификации и статистического тестирования, направленный на минимизацию количества дефектов в программном продукте. Процесс разработки Cleanroom обладает следующими особенностями:
Основное отличие стратегии "Чистой комнаты" от более традиционных стратегий разработки ПО (RUP, Scrum, Agile, XP) заключается в том, что основная доля времени разработки уделяется проектированию, а не тестированию;
Стратегия "Чистой комнаты" является формальной методологией, основанной на структурном программировании и множестве последовательных улучшений и преобразований требований в программную реализацию, при этом каждый шаг подвергается верифицированию;
За счёт регулярной верификации вместо тестирования стоимость разработки уменьшается, как и количество потраченного времени;
На начальных этапах много времени уделяется поиску ошибок, что позволяет избежать последующего длительного тестирования;
Результирующая система является полностью верифицируемой;
Процесс Cleanroom включает в себя 7 шагов, используемых при разработке каждого компонента системы:
Сбор требований. На данном этапе выполняется сбор требований заказчика и выявление функциональных компонент системы. Данный процесс итеративен, новая итерация начинается при переходе к следующему функциональном компоненту;
Формирование спецификаций. На данном этапе разрабатывается спецификация каждого инкремента (компонента) системы в несколько шагов:
Чёрный ящик. Используется для обобщения отдельного компонента системы и демонстрирует, какие входные воздействия могут повлиять на компонент, правила их преобразования, а также выходную реакцию компонента;
Ящик состояний. Используется для описания поведения, возможных состояний компонента, в зависимости от входных воздействий;
Прозрачный ящик. Используется для описания логики работы компонента (вплоть до конструкций на языке программирования). На данном шаге спецификация компонента может быть верифицирована математически;
Формальное проектирование. На данном этапе происходит реализация большей части архитектуры компонентов, спецификации которых были сформированы на предыдущем шаге;
Верификация архитектуры. На данном этапе происходит верификация всех запрограммированных конструкций. Благодаря использованию структурированного подхода, верификация функций сравнительно с модульным тестированием выполняется намного быстрее:
Для последовательных участков кода достаточно проверки одного условия;
Для блоков if – else – 2 условия;
Для циклов – 3 условия;
Кодирование и формальная инспекция кода. На данном этапе вся логика должна быть реализована, а каждая строка кода – верифицирована и, если формальная инспекция дала добро, начинается этап тестирования;
Статистическое тестирование системы. На данном этапе вместо традиционного подбора тестовых наборов для покрытия всего кода, готовятся тесты, описывающие поведение системы, а также рассчитывается статистическое распределение тестов, которые теоретически должны сработать корректно;
Сертификация системы. На данном этапе происходит сертификация продукта, включающая в себя 5 компонентов, формирующих конечную оценку:
Варианты использования;
Варианты профилей;
Тестовые наборы;
Результаты тестирования;
Надёжность. Данный критерий, в отличие от предыдущих, не был получен на предыдущих этапах, и включает в себя 3 модели:
Sampling Model. Сертификация нескольких случайных вариантов использования;
Component Model. Сертификация каждого компонента;
Certification Model. Сертификация всей системы;
Достоинства модели Cleanroom:
Благодаря командной ориентации модели, компоненты системы могут разрабатываться параллельно, что повышает производительность;
Постоянные командные встречи, обзоры, статистические испытания и верификации дают лучшее качество кода, чем тестирование и отладка;
Качество продукта под конец разработки будет сертифицировано;
Недостатки:
Из-за широкого использования математики и статистики, требуются специалисты в данных областях;
Так как кодирование занимает наименьшее количество времени, то разработчики должны быть профессиональными программистами;