Файл: Руководство по стилю программирования и конструированию по.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 860
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
ред бюрократией препятствовать эффективному контролю изменений
Нехватка дисциплинированного контроля изменений — одна из важнейших про- блем управления. Значительный процент проектов, которые считались выполнен- ными с опозданием, на самом деле могли быть сделаны в срок, если бы в них учи- тывалось влияние неотслеживаемых, но согласованных изменений. Плохой кон- троль изменений позволяет накапливаться нерегистрируемым изменениям, что подрывает возможность видеть текущее положение дел, делать долгосрочные про- гнозы, планировать выполнение работ, а также влияет на управление рисками в частности и управление проектом в целом.
Контроль изменений имеет тенденцию к бюрократизации, поэтому важно искать способы по рационализации этого процесса. Если вы предпочитаете не исполь-
Перекрестная ссылка Другую точку зрения на работу с изме- нениями можно найти в подраз- деле «Что делать при изменении требований во время конструи- рования программы?» раздела
3.4. Советы по безопасным из- менениям в коде см. в главе 24.
652
ЧАСТЬ VI Системные вопросы зовать традиционные запросы на изменения, заведите почтовый адрес «Change-
Board» и обяжите сотрудников посылать на него запросы на изменение. Или по- просите высказывать предложения по изменениям интерактивно на заседаниях комитета контроля. Особенно действенная мера — запись запросов на измене- ния в качестве дефектов в систему отслеживания дефектов. Ревнители порядка могут классифицировать такие изменения как «дефекты требований», или их можно считать изменениями, а не дефектами.
Вы можете создать официальный Комитет контроля изменений, или Группу пла- нирования продукта или Военный совет, которые будут выполнять традиционные обязанности комитета контроля изменений. Или вы можете выбрать отдельного человека в качестве Царя изменений. Но как бы вы это ни назвали, сделайте это!
Время от времени я встречаю проекты, страдающие от неумелой реали- зации контроля изменений. Но в 10 раз чаще я вижу проекты, страдаю- щие от полного отсутствия вразумительного контроля изменений. Глав- ное — это сама сущность контроля изменений, поэтому не позволяйте страху перед бюрократизацией помешать реализации преимуществ этого подхода.
Изменения в коде программного обеспечения
Другое назначение управления конфигурацией — контроль исходного кода. Если вы изменили код и возникла новая ошибка, которая, вроде бы, никак не связана со сделанными вами правками, то при поиске ее источника, вы, возможно, захо- тите сравнить новую и старые версии кода. Если это ничем вам не поможет, вы,
вероятно, захотите взглянуть на еще более старую версию. Совершить такой экс- курс в историю просто, если у вас есть инструменты управления версиями, кото- рые отслеживают многочисленные версии исходного кода.
Программы управления версиями С хорошим ПО для управления версиями работать так легко, что вы едва замечаете его существование.
Оно особенно полезно в групповых проектах. Один вариант управления версиями блокирует исходные файлы так, что только один человек может моди- фицировать файл в некоторый момент времени. Обычно, когда вам нужно пора- ботать с каким-то исходным кодом, вы должны снять этот файл с учета (check out)
в системе управления версиями. Если кто-то уже проделал эту процедуру, вы по- лучите сообщение, что этого сделать нельзя. Когда вы извлечете этот файл, вы смо- жете с ним работать так же, как и без использования системы управления верси- ями до тех пор, пока не будете готовы снова зарегистрировать его (check in). Другой вариант управления версиями позволяет нескольким людям работать с файлами одновременно и следит за необходимостью слияния изменений во время регис- трации файлов. В обоих случаях, когда вы регистрируете файл, система спраши- вает вас, почему вы его изменили, и вы указываете причину.
При таких скромных усилиях вы получаете несколько больших преимуществ:
쐽
вы не наступаете никому на ноги, работая с файлом в тот момент, когда с ним работает кто-то другой (или хотя бы вы знаете об этом);
쐽
вы легко можете обновить свои копии всех файлов проекта, чтобы они соот- ветствовали текущим версиям, обычно одной командой;
ГЛАВА 28 Управление конструированием
653
쐽
вы можете вернуться к любой версии любого файла, когда-либо зарегистри- рованной в системе управления версиями;
쐽
вы можете получить список изменений, выполненных в любой версии любо- го файла;
쐽
вам не надо заботиться о персональных резервных копиях, поскольку копия в системе контроля версий служит гарантией безопасности.
Контроль версий — необходимая составляющая командных проектов. Он стано- вится еще более мощным оружием при интеграции управления версиями, отсле- живания дефектов и управления изменениями. Подразделение прикладного ПО
Microsoft считает собственный инструментарий управления версиями «важнейшим преимуществом» (Moore, 1992).
Версии инструментария
Для некоторых видов проектов может понадобиться реконструкция точной сре- ды, используемой для разработки каждой конкретной версии ПО, включая ком- пиляторы, компоновщики, библиотеки кода и т. д. В этом случае вам также следу- ет поместить эти инструменты в систему управления версиями.
Конфигурации компьютеров
Многие компании (включая мою) на своем опыте познали преимущества созда- ния стандартизованных машинных конфигураций. На стандартной рабочей стан- ции, содержащей необходимый инструментарий, офисные приложения и другие программы, создается образ диска. Этот образ копируется на машину каждого разработчика. Стандартная конфигурация позволяет избежать уймы проблем, свя- занных со слегка различающимися конфигурационными параметрами, версиями применяемых инструментов и т. п. Стандартизованный образ диска также силь- но упрощает подготовку новой машины по сравнению с необходимостью уста- навливать каждую программу отдельно.
План резервного копирования
План резервного копирования — концепция не новая. Идея в том, чтобы перио- дически делать копию вашей работы. Если вы пишете книгу, вы не оставите руко- пись на крыльце, так как ее может намочить дождь, сдуть ветер или прихватить соседская собака — почитать на сон грядущий. Вы положите свой труд в безопас- ное место. ПО менее осязаемо, поэтому гораздо проще забыть, что на вашей ма- шине есть нечто очень ценное.
С компьютерными данными может произойти множество неприятностей: может повредиться жесткий диск, вы или кто-то другой можете случайно удалить самые важные файлы, рассерженный сотрудник может устроить акцию саботажа, по разным причинам (кража, наводнение, пожар) вы можете лишиться своей маши- ны. Предпринимайте шаги для защиты своей работы. Ваш план резервного копи- рования должен включать периодическое создание копий и их хранение в дру- гих помещениях. Кроме исходного кода, в нем должны присутствовать все важ- ные для вашего проекта материалы: документы, чертежи и другие записи.
654
ЧАСТЬ VI Системные вопросы
Один часто забываемый аспект разработки плана резервного копирования состоит в проверке процедуры создания резервных копий. Попробуйте восстановить дан- ные на некоторый момент времени, чтобы убедиться, что резервная копия содержит необходимую информацию и восстановленная версия работоспособна.
Завершив проект, создайте его архив. Сохраните в надежном месте копию всего:
исходного кода, компиляторов, инструментов, требований, проекта, документа- ции — всего, что может понадобиться для полного воссоздания продукта.
Контрольный список: управление конфигурацией
Общие вопросы
Разработан ли план управления конфигурацией так, что- бы помочь работе программистов и минимизировать накладные расходы?
Лишен ли подход к SCM излишнего контроля над проектом?
Группируются ли запросы на изменение либо с помощью неформальных средств (например, списка планируемых изменений), либо посредством более систематического подхода (такого, как комитет контроля изменений)?
Выполняется ли систематическая оценка влияния каждого предложенного изменения на стоимость, график и качество проекта?
Рассматриваете ли вы большие изменения как предупреждение о том, что разработка требований завершена не полностью?
Инструментарий
Используется ли ПО управления версиями для облегчения управления кон- фигурацией?
Используется ли ПО управления версиями для уменьшения сложностей в координации работы команды?
Резервное копирование
Выполняется ли периодическое резервное копирование всех материалов про- екта?
Выполняется ли периодическое перемещение резервных копий проекта в сто- ронние хранилища?
Копируются ли все материалы, включая исходный код, документы, чертежи и важные записи?
Протестирована ли процедура восстановления из резервной копии?
Дополнительные ресурсы по управлению конфигурацией
Поскольку эта книга посвящена конструированию, в данном разделе рассматривается управление изменениями с точки зрения конструирования. Но изменения затрагивают все уровни проекта, и всеобъемлющая стратегия управления изменениями должна делать то же самое.
Hass, Anne Mette Jonassen.
Configuration Management Principles and Practices. Boston,
MA: Addison-Wesley, 2003. Эта книга дает общую картину управления конфигура- цией ПО, а также практические советы, как его внедрить в процесс разработки.
Berczuk, Stephen P. and Brad Appleton.
Software Configuration Management Patterns:
Effective Teamwork, Practical Integration. Boston, MA: Addison-Wesley, 2003. Как и в http://cc2e.com/2850
http://cc2e.com/2843
ГЛАВА 28 Управление конструированием
655
предыдущей книге, здесь дается общий обзор SCM и много практической инфор- мации. Преимуществом этой книги является наличие советов, помогающих груп- пам разработчиков изолировать и координировать свою работу.
SPMN.
Little Book of Configuration Management. Arlington, VA:
Software Program Managers Network, 1998. Эту брошюра зна- комит с процессом управления конфигурацией и опреде- ляет критически важные факторы успеха. Она находится в свободном доступе на сайте SPMN по адресу
www.spmn.com/products_guidebooks.html.
Bays, Michael.
Software Release Methodology. Englewood Cliffs, NJ: Prentice Hall, 1999.
Эта книга обсуждает управление конфигурацией ПО с акцентом на выпуске про- мышленной версии продукта.
Bersoff, Edward H. and Alan M. Davis. «Impacts of Life Cycle Models on Software Con- figuration Management».
Communications of the ACM 34, no. 8 (August, 1991): 104–
118. В этой статье описано, как влияют на SCM новые подходы к разработке ПО,
особенно касающиеся создания прототипов. Статья в особенности актуальна для сред, использующих практику быстрой (agile) разработки приложений.
28.3. Оценка графика конструирования
Управление программным проектом — одна из исключительно трудоем- ких задач XXI века, причем оценка размера проекта и усилий, требуемых для его завершения, — один из сложнейших аспектов управления про- ектом. Большой программный проект в среднем завершается на год позже заяв- ленного срока и на 100% превышает первоначальный бюджет (Standish Group, 1994;
Jones, 1997; Johnson, 1999). При опросах программистов по поводу разницы между ожидаемым и реальным графиками выполнения проекта выяснилось, что разра- ботчики имеют склонность к оптимистичным оценкам в пределах 20-30% (van
Genuchten, 1991). Это в той же степени связано с ошибочной оценкой размера проекта и требуемых усилий, как и с плохой разработкой. В данном разделе очерчен круг вопросов, связанных с оценкой программных проектов, а также указано, где найти более подробную информацию.
Подходы к оценке
Вы можете оценить размер проекта и усилия, требуемые для его завершения, одним из нескольких способов:
쐽
применить оценочное ПО;
쐽
использовать алгоритмический подход, такой как Cocomo
II, оценочная модель Барри Бома (Boehm et al., 2000);
쐽
привлечь внешних экспертов для оценки проекта;
쐽
обсудить предполагаемые затраты на собрании;
쐽
оценить составные части проекта, а затем сложить их вместе;
쐽
предложить каждому оценить их собственные задания, а затем просуммиро- вать полученные предположения;
쐽
применить опыт предыдущих проектов;
쐽
сохранить предыдущие оценки и посмотреть, насколько они были аккуратны,
а затем применять их для коррекции новых предположений.
http://cc2e.com/2857
Дополнительные сведения По- дробнее о методиках оценки гра- фика работ см. главу 8 в «Rapid
Development» (McConnell, 1996)
и «Software Cost Estimation with
Cocomo II» (Boehm et al., 2000).
656
ЧАСТЬ VI Системные вопросы
Ссылки на подробную информацию об этих подходах даны в подразделе «Допол- нительные ресурсы, посвященные оценке ПО» в конце этого раздела. Далее опи- сан правильный подход к оценке проекта.
Определите цели Зачем нужна оценка? Что вы оценива- ете? Только операции конструирования или весь процесс разработки? Только затраты на проект или на проект плюс отпуска, праздники, обучение и другие мероприятия, не относящиеся к проекту? Насколько аккуратной должна быть оценка, чтобы соответствовать вашим целям? Какую она дол- жна иметь степень достоверности? Приведут ли оптимистичная и пессимистич- ная оценки к существенно различным результатам?
Выделите время для оценки Скоропалительные оценки неаккуратны. Если вы оцениваете большой проект, рассматривайте процесс оценки как минипроект и выделите время для минипланирования оценки, чтобы хорошо ее выполнить.
Выясните требования к программе Точно так же, как архитектор не может сказать, сколько будет стоить «доста- точно большой» дом, так и вы не сможете надежно оценить
«достаточно большой» программный проект. Бессмысленно ожидать от вас оценки объема работ, требуемых для реализации чего-то, если это «что-то» еще не опре- делено. Определите требования или запланируйте подготовительный этап для исследований, прежде чем что-то оценивать.
Делайте оценки на низком уровне детализации В зависимости от обозна- ченных целей основывайте оценки на подробном изучении свойств проекта.
В целом чем подробней будет ваша экспертиза, тем аккуратней будет оценка. По закону больших чисел, если на одном большом интервале существует 10%-я по- грешность, ошибка составляет 10% либо в сторону увеличения, либо в сторону уменьшения. На 50 небольших интервалах часть 10%-х погрешностей будет в сто- рону увеличения, а часть — в сторону уменьшения, и погрешности будут уравно- вешивать друг друга.
Используйте несколько способов оценки и сравнивай-
те полученные результаты Не все методики оценки приведут к одинаковым результатам, так что попробуйте несколько. Изучите результаты, полученные разными спо- собами. Дети быстро смекают, что, если попросить третий шарик мороженного у каждого родителя в отдельности,
больше шансов услышать хотя бы одно «да», чем если спра- шивать только одного родителя. Иногда родители догады- ваются, в чем дело, и дают одинаковый ответ, а иногда — нет. Выясните, какие варианты ответов вы можете получить при использовании разных методик оценки.
Ни один подход не является лучшим в любых обстоятельствах, а разница между ними может многое объяснить. Например, работая над первым изданием этой книги, я навскидку оценивал ее размер в 250–300 страниц. Когда я наконец вы- полнил углубленный расчет, предполагаемый объем оказался равен 873 страни- цам. «Этого не может быть», — подумал я. Поэтому я воспользовался абсолютно другим способом оценки. В результате второй попытки я получил 828 страниц.
Дополнительные сведения Эта методика основана на рекомен- дациях, предложенных в «Soft- ware Engineering Economics»
(Boehm, 1981).
Перекрестная ссылка О требо- ваниях к ПО см. раздел 3.4.
Перекрестная ссылка Сложно найти область разработки ПО, в которой итерация не имеет важ- ного значения. Процесс предва- рительной оценки — один из примеров, где итерация может принести пользу. Об итератив- ных методиках см. раздел 34.8.