В 1987 году IBM предложила технологию разработки Cleanroom («чистая комната»), в котором принципы эволюционной разработки IID (см. статью «IID – итеративная инкрементальная разработка») сочетались с более формализованными методами спецификации и верификации. Технология Cleanroom предназначена для создания высоконадежного ПО не содержащего ошибок. Само название Cleanroom отражает главную идею данной технологии разработки – переход от устранения дефектов к их к предотвращению.
Cleanroom – это совокупность административных и технологических процессов, позволяющих коллективам разработчиков планировать, измерять, специфицировать, проектировать, кодировать, тестировать и сертифицировать программные продукты. Она охватывает такие вопросы, как реализация модели CMM, планирование и управление проектами, проектирование и разработку ПО (формирование требований, проектирование, кодирование), профилактику ошибок, тестирование и сопровождение.
Процесс проектирования в технологии Cleanroom сводится к формальному описанию функций, необходимых для реализации поведения "черного ящика", т. е. к созданию модуля-описателя. Данный процесс напоминает проектирование объектов в объектном программировании, когда данные и функции (методы) инкапсулируются в единой сущности. При написании программ должны использоваться только базовые конструкции из технологии структурного программирования (блоки, ветвления, циклы). Качество программного кода (соответствие работы программы заложенным спецификациям) проверяется в ходе верификации.
Идеологи Cleanroom считают, что сочетание принципов Cleanroom и ОО подхода с его концентрацией на повторном использовании программных компонентов позволяет создавать ПО, отвечающего как концепции повторного использования, так и предсказуемости и высокого качества. Например, ОО методы могут быть использованы при анализе предметной области, а методики Cleanroom – при проектировании и разработке.
Преимущества Cleanroom заключаются в корректности, надежности и понятности программного продукта. Они проявляются в виде сокращения числа ошибок, обнаруживаемых в период эксплуатации ПО, сокращению времени разработки, простоты поддержки ПО и удлинения сроков эксплуатации.
Данная технология минимизирует затраты компании-разработчика на стадии поддержки программного продукта за счет увеличения затрат на стадии разработки. Как правило, такой подход в целом снижает совокупные затраты разработчика на всем сроке жизненного цикла продукта.