Это продукт из семейства программ «управления конфигурацией программного продукта» (software configuration management), или, в более узком смысле, управления исходным кодом (source code management). (Аналогичные программы других производителей: MS SourceSafe, MKS Source Integrity.) Это клиент-серверная база данных проекта, позволяющая вести коллективную разработку надежно, избегая ошибок несоответствия версий частей и устойчиво по отношению к отказам клиентских машин разработчиков. Наиболее важные функции такого сервера:
· Использование общих файлов (file sharing). Доступ к ним разрешается любому клиенту для чтения, но он запирается, когда (единственный!) клиент открывает его для записи. Так обновляются исходные тексты модулей в ходе разработки.
· Управление версиями (version control). Это реализация тотального backup’a для всех файлов с возможностью отката к любой из прошлых версий. Это позволяет также отслеживать историю изменений.
· Произвольное атрибутирование (free-form attributes). Возможность присвоения файлам различных атрибутов с последующей фильтрацией при поиске. Например, можно помечать исходные тексты значениями атрибута готовности (alpha, beta, final). Атрибуты могут наследоваться вниз по дереву каталогов.
В настоящее время программы такого типа используются не только для хранения исходных кодов, но и для всех данных проекта: документации, графики, звуковых файлов, и пр. В проектах, связанных с Интернет, такая поддержка абсолютно необходима.
Резюме по курсу
Основной вопрос программной инженерии – как проектировать и строить программные системы, являющиеся надежным, документированным и сопровождаемым продуктом, укладываясь при этом в бюджет и сроки.
Различают три вида промышленного производства: индивидуальное (А), сборочное (B) и обрабатывающее (C) – в порядке возрастания производительности, качества продуктов, возможностей автоматизации и мобильности (гибкости). (Например, A - космическое приборостроение, B – автомобилестроение, С – нефтехимия.
Производительность труда и качество результатов в программировании растут очень медленно по сравнению с производством компьютеров, где за последние 35 лет своего развития соотношение производительность / цена выросло на 7 порядков – благодаря переходу от сборочного производства к преимущественно обрабатывающему. Программирование же до сих пор в основном находится на стадии индивидуального производства. Причина – высокая сложность абстрактной (т.е., незримой) сущности программ: проблемой является передача знаний о ней между участниками проекта и высокая вероятность ошибок ее проектирования. Следствие – высокая стоимость производства и низкое качество ПП, массовое отставание проектов от графиков (при том, что конкуренция задает высокий темп обновления продуктов).
Переходу к сборочному производству способствуют принципы современного промышленного производства ПП:
· Модульность - от библиотек подпрограмм через библиотеки классов до компонентов, загружаемых по Сети
· Стандартизация:
ü компонентов – для их повторной используемости
ü интерфейсов – для сопрягаемости ПП
ü языков реализации (C++, Java, VB) – для совместимости и переносимости ПП
ü языков проектирования (UML) – для унификации языка передачи знания (языка графического – для визуализации абстракций)
· Разделение труда / специализация разработчиков: модели команд
· Автоматизация: CASE для всего жизненного цикла ПП
Критическая важность ранних стадий разработки (наиболее трудных) – выработки подробных технических требований / спецификаций (включая интерфейсы пользователей, внутренние интерфейсы и интерфейсы к другим ПП), где высоки и вероятность, и стоимость ошибок. Спиральная модель ЖЦ позволяет редуцировать абстракции до макетов – прототипов, т.е. сделать видимым незримое.
Поскольку программирование – высокоинтеллектуальная деятельность, ее организация, планирование и контроль – отдельная проблема, мало затронутая в данном курсе. Документирование промежуточных результатов, планирование мелких шагов, контроль и анализ нарушения сроков, управление рисками, гибкость модели команды сильно влияют на качество конечных результатов.
Вопросы для обсуждения и контроля
1. Что должна делать система, если в схеме дублирования (рис. 13-1,а) возник сигнал ошибки?
2. Предложите схему четырехкратного модульного резервирования.
3. Группа N битов дополняется битом четности. Сколько он позволяет обнаружить искаженных битов и сколько – восстановить потерянных битов? Тот же вопрос – о контрольной сумме группы битов.
4. Каковы должны быть модули программного резервирования? – копии одной и той же программы? Если нет, то что?
5. К какому виду резервирования относится резервное копирование (back-up copying) – популярное средство в редакторах и других программах обработки данных?
6. Какой из четырех видов резервирования пригоден для противостояния сбоям, но бесполезен при устойчивых отказах?
7. В протоколах TCP/IP реализовано циклическое кодирование блоков передаваемых данных с переспросом непринятых или сильно искаженных блоков. Каким видам резервирования это соответствует?
8. Какие отказы дисков являются невосстанавливаемыми (fatal) при каждой из четырех описанных схем RAID?
9. Почему сделано такое исключение для личных файлов?






