Коллективное владение кодом в процессе разработки (рис. 3.14) означает возможность для каждого программиста в любое время усовершенствовать любую часть кода в системе, если он сочтет это необходимым. Программист берет на себя ответственность за реализацию определенных задач. В случае возникновения вопросов по разрабатываемой задаче может быть проведено короткое (15-минутное) собрание в присутствии заказчика.
Рис. 3.13. Работа на итерации экстремального программирования
Рис. 3.14. Коллективное владение кодом при экстремальном программировании
Чтобы выполнить задачу, ответственный за нее программист должен найти себе партнера (рис. 3.15). Окончательный код всегда пишется двумя программистами на одной рабочей станции.
Экстремальное программирование уделяет значительное внимание организации офисного пространства, отмечая существенное влияние окружающих условий на работу программистов.
Адаптивная разработка. В основу подхода адаптивной разработки (Adaptive Software Development — ASD) положены три нелинейных перекрывающих друг друга этапа — обдумывание, сотрудничество и обучение. Автор данного подхода Джим Хайсмит (Jim Highsmith) обращает особое внимание на использование идей из области сложных адаптивных систем.
Результаты планирования (которое само здесь является парадоксальным) в адаптивной разработке всегда будут непредсказуемыми. При обычном планировании отклонение от плана является ошибкой, которую исправляют. При данном подходе отклонения ведут к правильным решениям.
Рис. 3.15. Работа над кодом парой программистов при экстремальном программировании
Программисты должны активно сотрудничать между собой для преодоления неопределенности в подходе адаптивной разработки. Руководители проектов должны обеспечить хорошие коммуникации между программистами, благодаря чему программисты сами находят объяснения на возникающие вопросы, а не ждут их от руководителей.
Обучение является постоянной и важной характеристикой подхода. И программисты, и заказчики в процессе работы должны пересматривать собственные обязательства и планы. Итоги каждого цикла разработки используются при подготовке следующего.
3.9. ПОДХОДЫ ИССЛЕДОВАТЕЛЬСКОГО ПРОГРАММИРОВАНИЯ
Исследовательское программирование имеет следующие особенности (http://www.osp.ru/pcworld/2001/01/062.htm):
— разработчик ясно представляет направление поиска, но не знает заранее, как далеко он сможет продвинуться к цели;
— нет возможности предвидеть объем ресурсов для достижения того или иного результата;
— разработка не поддается детальному планированию, она ведется методом проб и ошибок;
— работа связана с конкретными исполнителями и отражает их личностные качества.
В основе исследовательского программирования в большей степени, чем в других подходах, лежит искусство.
Компьютерный дарвинизм. Название данного подхода было предложено Кеном Томпсоном (Ken Thompson). Подход основан на принципе восходящей разработки, когда система строится вокруг ключевых компонентов и программ, которые создаются на ранних стадиях проекта, а затем постоянно модифицируются. Все более крупные блоки собираются из ранее созданных мелких блоков.
Компьютерный дарвинизм представляет собой метод проб и ошибок, основанный на интенсивном тестировании, причем на любом этапе система должна работать, даже если это минимальная версия того, к чему стремятся разработчики. Естественный отбор оставит только самое жизнеспособное.
Подход состоит из трех основных видов работ:
• макетирование (прототипирование);
• тестирование;
• отладка.
Одной из интересных особенностей подхода является максимально возможное распараллеливание процессов тестирования и отладки.
ВЫВОДЫ
• Традиционно инженеры стремились, а некоторые из них добивались не снижая качества проектов, значительного сокращения сроков проектирования.
• Инженерный технологический подход определяется спецификой комбинации стадий и видов работ, ориентированной на разные классы программного обеспечения и на особенности коллектива разработчиков.
• Основные группы инженерных технологических подходов: подходы со слабой формализацией, строгие и гибкие (адаптивные) подходы.
• Ранние технологические подходы не используют явных технологий и их обычно применяют только для очень маленьких проектов.
• Каскадные технологические подходы задают некоторую последовательность выполнения видов работ, обычно изображаемую в виде каскада (водопада).
• Каркасные подходы представляют собой каркас для видов работ. Одним из ярких представителей каркасного подхода является рациональный унифицированный подход к выполнению работ, поддерживаемый САПР на основе программного продукта Rational Rose фирмы "Rational Software Corporation".
• Термин "генетический" в названии группы генетических технологических подходов связывается с происхождением программы и дисциплиной ее создания.
• Адаптивные технологические подходы были задуманы как подходы, поддерживающие изменения. Они только выигрывают от изменений, даже когда изменения происходят в них самих. Наиболее бурно развивающимся подходом этой группы является экстремальное программирование.
• Выбор оптимального инженерного технологического подхода обеспечивает сокращение сроков выполнения проекта без снижения качества проекта.
Контрольные вопросы
1. За счет чего инженеры добиваются резкого сокращения сроков выполнения проектов?
2. Какие известны основные группы инженерных технологических подходов?
3. Какой классификационный признак положен в основу разделения инженерных технологических подходов на основные группы?
4. Какие инженерные технологические подходы были развиты в последнее время?
5. В чем состоят преимущества и недостатки каскадно-возвратного подхода по сравнению с классическим каскадным подходом?
6. Какой вид работ отсутствует в технологии стерильного цеха?
7. В каких случаях разумно применять эволюционное прототипирование?
8. Какие две основные черты, присущие быстрым разработкам, являются базовыми при экстремальном программировании?
9. В чем состоит суть адаптивной разработки?
Глава 4
СТРУКТУРА ДАННЫХ ПРОГРАММ
4.1. ПОНЯТИЕ СТРУКТУРЫ ДАННЫХ ПРОГРАММ
Под структурой данных программ в общем случае понимают множество элементов данных, множество связей между ними, а также характер их организованности.
Под организованностью данных понимается продуманное устройство с целью рационального использования по назначению. Примеры организованности данных: стек, организованный массивом; структура данных для хранения информации о студентах; файл, имеющий организацию текстового файла, байтная организация физической памяти машины.
Н. Вирт определил понятие программы следующим образом:
Алгоритмы + структуры данных = программы
Простейшие структуры данных, реализуемые языком программирования, называют также стандартными типами данных. Многие языки программирования позволяют на основе стандартных типов строить типы данных, определенные программистом (пользователем).
Что же характеризует данные более содержательно, чем значения? В 1973 г. Н. Виртом была опубликована статья "Типы данных — это не значения". С его точки зрения тип данных — это множество значений. В статье говорилось также, что данные прежде всего характеризуются набором операций, которые можно выполнять над этими данными, множеством значений. Этот взгляд и дал миру впоследствии некоторые очень полезные идеи. Главная формула, которой стали придерживаться: