Файл: Руководство по стилю программирования и конструированию по.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 757
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
ГЛАВА 21 Совместное конструирование
481
гать 500 строк в час (Humphrey, 1989). Если вы только начинаете проводить инс- пекции, можете ориентироваться на анализ 150–200 непустых и не являющихся комментариями строк исходного кода в час (Wiegers, 2002).
Не обсуждайте на собраниях способы решения проблем. Группа должна сосредо- точиться на обнаружении дефектов. В некоторых группах участникам инспекций даже запрещают обсуждать, действительно ли дефект является дефектом. Эти раз- работчики исходят из того, что любой аспект проекта, кода или документации,
который хоть кому-то кажется дефектом, нуждается в пояснении.
Как правило, собрание не должно продолжаться более двух часов. Конечно, это не значит, что по окончании двух часов вы должны подать ложный сигнал пожар- ной тревоги, но опыт IBM и других компаний показывает, что инспекторы не могут поддерживать нужную концентрацию более двух часов. По этой же причине не- разумно проводить более одной инспекции в день.
Отчет об инспекции В день проведения инспекционного собрания коорди- натор составляет отчет об инспекции (электронное письмо или что-либо подоб- ное), указывая в нем все найденные дефекты, их тип и серьезность. Отчет об ин- спекции помогает гарантировать исправление всех дефектов и облегчает созда- ние контрольного списка, обращающего внимание на проблемы, специфические для организации. Если вы храните данные о времени, затраченном на инспекции,
и о числе обнаруженных ошибок, вы сможете подтвердить эффективность инс- пекций достоверными данными. Иначе вы сможете лишь сказать, что инспекции кажутся оптимальным вариантом. Разумеется, это не убедит сторонников тести- рования или других методик. Благодаря отчетам вы также сможете узнать, что ин- спекции в вашей среде не работают. В этом случае вы можете изменить инспек- ции или отказаться от них. Сбор данных важен и потому, что любая новая мето- дология должна оправдывать свое использование.
Исправление дефектов Координатор поручает кому-нибудь — обычно авто- ру — исправить все дефекты, указанные в составленном списке.
Контроль Координатор отвечает за контроль решения всех задач, поставлен- ных во время инспекции. В зависимости от числа обнаруженных ошибок и их се- рьезности вы можете поручить инспекторам провести повторную инспекцию в полном объеме или проинспектировать только исправленные фрагменты. Кроме того, вы можете позволить автору исправить дефекты без всякого контроля.
Дополнительные собрания Хотя во время инспекции участникам не дозволя- ется обсуждать решения обнаруженных проблем, некоторые разработчики могут испытывать такое желание. Вы можете провести неформальное дополнительное собрание, позволяющее заинтересованным сторонам обсудить решения проблем по окончании официальной инспекции.
Оптимизация инспекций
Накопив опыт проведения инспекций «по книге», вы скорее всего обнаружите несколько способов их улучшения. Однако изменять инспекции следует дисцип- линированно. Адаптируйте процесс выполнения инспекций так, чтобы вы могли узнать, приносят ли изменения выгоду.
482
ЧАСТЬ V Усовершенствование кода
Устранение или объединение каких-нибудь этапов инспекции требует затрат,
которые часто не оправдываются получаемой выгодой (Fagan, 1986). Если вы ис- пытываете соблазна изменить процесс инспекции без оценки результатов изме- нения, не делайте этого. Если вы выполнили оценку и увидели, что измененная инспекция более эффективна, — вперед!
Проводя инспекции, вы заметите, что определенные типы ошибок встречаются чаще других. Создайте контрольный список, обращающий внимание инспекто- ров на эти типы ошибок. Обнаружив новые типы частых ошибок, добавляйте их в список. Если некоторые ошибки из первоначального списка стали встречаться реже, удалите их из списка. После нескольких инспекций вы получите контрольный список, отражающий особенности вашей организации и указывающий на слабые стороны, над которыми следует поработать вашим программистам. Ограничьте контрольный список одной страницей. Более объемные списки трудно исполь- зовать на нужном при инспекции уровне детальности.
Личностные аспекты инспекций
Суть инспекции заключается в обнаружении дефектов в проекте или коде, а не в изучении альтернатив, не в спорах о том, кто прав, а кто виноват, и уж ни в коем случае
не в критике автора проекта или кода. И для автора, и для дру- гих участников инспекция должна быть положительным опытом, укрепляющим командный дух и способствующим обучению. Она не должна вызывать у автора неприязни к членам группы или подталкивать его к поиску новой работы. Комментарии вро- де «любому, кто знает Java, известно, что эффективнее организовать цикл от
0 до
num-1, а не от 1 до num» абсолютно неуместны, и в случае надобности координа- тор должен ясно указать на это.
Критика проекта или кода по вполне понятным причинам будет задевать само- любие его автора. Автор должен быть готов к тому, что инспекторы могут указать ему на дефекты, которые на самом деле не являются дефектами. Однако автору следует принять к сведению каждый предполагаемый дефект. Это не значит, что автор должен согласиться с сутью критики. Просто во время обзора автору не надо защищать свою работу. После обзора он может обдумать каждое замечание и ре- шить, обосновано ли оно.
Инспекторы должны помнить, что именно автору принадлежит право принятия окон- чательного решения о том, что делать с дефектом. Пусть инспекторы ищут дефекты
(и предлагают решения после обзора), но не покушаются на права автора.
Инспекции и «Совершенный код»
При подготовке второго издания «Совершенного кода» я на собственном опыте убедился в эффективности инспекций. Работая над первым изданием книги, я писал черновой вариант главы, оставлял его в ящике стола на пару недель, после чего перечитывал и исправлял найденные ошибки. Далее я раздавал проверенную гла- ву примерно десятку коллег, которые выполняли ее обзор, причем некоторые подходили к этому весьма ответственно. В итоге я исправил все обнаруженные ими ошибки. Через несколько недель я самостоятельно выполнил еще один об-
Дополнительные сведения Об- суждение обезличенного про- граммирования (egoless program- ming) можно найти в книге «The
Psychology of Computer Prog- ramming, 2d ed.» (Weinberg, 1998).
ГЛАВА 21 Совместное конструирование
483
зор и исправил еще ряд ошибок. Наконец я отправил рукопись издателю, и ее проверили литературный редактор, технический редактор и корректор. Книга продается уже более 10 лет, и за это время читатели нашли в ней около 200 не- точностей и ошибок.
Трудно поверить, что в книге, прошедшей столько обзоров, оказалось так много ошибок. Увы, это так. Работая над вторым изданием, я решил определить облас- ти, на которые нужно обратить особое внимание, и провел формальные инспек- ции первого издания. Группы из трех-четырех инспекторов подготовились к ним в соответствии с принципами, описанными в этой главе. К моему удивлению, в ходе формальных инспекций мы нашли еще несколько сотен ошибок, которые,
несмотря на все приложенные в свое время усилия, все-таки просочились в пер- вое издание.
Если до этого ценность формальных инспекций и вызывала у меня хоть какие-то сомнения, при работе над вторым изданием книги они развеялись.
Инспекции: резюме
Используемые при инспекциях контрольные списки поддерживают концентра- цию разработчиков на важных задачах. Стандартные контрольные списки и стан- дартные роли обеспечивают систематичность процесса инспекции. Кроме того,
наличие петли формальной обратной связи, используемой для улучшения конт- рольных списков и слежения за темпом подготовки к инспекциям и темпом их проведения, делает процесс инспекции самоорганизующимся. Как бы инспекция ни начиналась, благодаря постоянной оптимизации и высокой эффективности управления процессом инспекции она быстро становится эффективным спосо- бом устранения дефектов и ошибок.
Специалисты Института разработки ПО (Software Enginee- ring Institute, SEI) создали модель зрелости процессов (Capa- bility Maturity Model, CMM), позволяющую оценить эффек- тивность процесса разработки ПО (SEI, 1995). Процесс ин- спекции соответствует самому высокому уровню эффектив- ности. Он является систематичным, повторяется и самооп- тимизируется на основе обратной связи, поддающейся оценке. Эти идеи вы мо- жете приспособить ко многим методикам, описываемым в данной книге. При рас- пространении на всю компанию эти идеи позволят добиться максимально воз- можного уровня качества и продуктивности.
Контрольный список: эффективные инспекции
Создали ли вы контрольные списки, обращающие вни- мание инспекторов на области, с которыми ранее были связаны проблемы?
Посвящена ли инспекция обнаружению, а не исправлению дефектов?
Рассмотрели ли вы целесообразность использования разных сценариев,
помогающих инспекторам сосредоточиться на важных аспектах подготовки?
Достаточный ли объем времени предоставляется инспекторам для подготовки к инспекционным собраниям? Все ли инспекторы адекватно готовятся к собраниям?
Дополнительные сведения О
разработанной в SEI концепции зрелости процесса разработки см. работу «Managing the Soft- ware Process» (Humphrey, 1989).
http://cc2e.com/2199
484
ЧАСТЬ V Усовершенствование кода
Назначили ли вы каждому участнику инспекции отдельную роль: координа- тора, инспектора, секретаря и т. д.?
Продуктивен ли темп собрания?
Ограничили ли вы время собрания двумя часами?
Обладают ли все участники инспекции специальными навыками проведе- ния инспекций? Обладает ли координатор навыками координирования инс- пекций?
Собираете ли вы данные о типах ошибок, обнаруженных при каждой ин- спекции, для адаптации контрольных списков к особенностям своей орга- низации?
Собираете ли вы данные о темпе подготовки к инспекции и проведения самой инспекции для оптимизации этих процессов в будущем?
Контролируется ли решение задач, поставленных во время инспекции, не- посредственно координатором или при помощи повторной инспекции?
Понимают ли руководители, что им не следует посещать инспекционные собрания?
Составили ли вы план контроля вносимых исправлений, гарантирующий их корректность?
21.4. Другие методики совместной
разработки ПО
Другие типы совместной разработки исследованы хуже, чем инспекции или пар- ное программирование, поэтому мы рассмотрим их менее подробно. В число методик совместной разработки, описываемых в этом разделе, входят анализ проекта или кода, чтение кода и презентация.
Анализ проекта или кода
Анализ (walk-through) проекта или кода — популярный тип обзора. Этот термин не имеет точного определения и по крайней мере некоторую часть его популяр- ности можно приписать тому факту, что почти любой тип обзора можно назвать
«анализом».
Из-за отсутствия точного определения трудно сказать, что такое анализ. Несом- ненно, анализ предполагает участие двух или более человек, обсуждающих про- ект или код. Он может быть совсем неформальным, таким как разговор у доски без какой бы то ни было подготовки. В то же время он может быть очень форма- лизован: примером может служить запланированное собрание с просмотром презентации, подготовленной отделением дизайна, и отправкой формального отчета руководителям. В некотором смысле единственным необходимым условием проведения анализа является «присутствие двух-трех человек в одном месте».
Сторонникам анализа нравится расплывчатость такого определения, поэтому я просто укажу некоторые главные аспекты анализа и позволю вам разбираться с остальными деталями самостоятельно:
쐽
за проведение и координацию анализа обычно отвечает автор проекта или кода,
подвергающегося обзору;
ГЛАВА 21 Совместное конструирование
485
쐽
предметом анализа являются технические вопросы — это рабочее собрание;
쐽
все участники готовятся к анализу, изучая проект или код и выискивая в нем ошибки;
쐽
анализ позволяет опытным программистам передавать опыт и дух корпоратив- ной культуры молодым программистам; с другой стороны, молодые програм- мисты во время анализа могут предложить новые методологии и подвергнуть сомнению старые и, возможно, уже неэффективные методики;
쐽
как правило, анализ длится от 30 до 60 минут;
쐽
главная цель анализа — обнаружение ошибок, а не их исправление;
쐽
руководители в анализе не участвуют;
쐽
идея анализа обладает значительной гибкостью и легко адаптируется к специ- фическим потребностям организации.
Каких результатов ждать от анализа?
При грамотном и дисциплинированном использовании анализ может принести результаты, похожие на результаты инспекции, т. е. в типичной ситуации он по- зволяет обнаружить в программе 20–40% ошибок (Myers, 1979; Boehm, 1987b;
Yourdon, 1989b; Jones, 1996). Тем не менее обычно анализ значительно менее эффективен, чем инспекция (Jones, 1996).
При неразумном использовании анализ невыгоден. Нижняя граница эф- фективности анализа — 20% — не заслуживает особого внимания, к тому же по крайней мере в одной организации (Boeing Computer Services)
взаимные обзоры кода оказались «очень дорогими». Специалисты Boeing обнару- жили, что участников проекта было трудно убедить согласованно применять ме- тодики анализа, а при повышенном давлении внешних факторов проведение ана- лиза стало практически невозможным (Glass, 1982).
Опыт оказания консалтинговых услуг, накопленный в моей компании за после- дние 10 лет, заставил меня более критично относиться к анализу. Я обнаружил,
что если люди плохо отзывались о технических обзорах, то почти всегда это было связано с неформальными методиками (такими как анализ), а не с формальными инспекциями. По сути обзор является собранием, а проводить собрания дорого.
Если вы хотите потратиться на проведение собрания, его следует организовать как формальную инспекцию. Если подвергающийся обзору материал не оправды- вает затрат на проведение формальной инспекции, он не оправдывает затрат на проведение собрания вообще. В таких случаях вам лучше использовать чтение документации или другой менее интерактивный подход.
Итак, инспекции обеспечивают более высокую эффективность устранения оши- бок, чем анализ. Какая же причина может заставить кого-то использовать анализ?
Если обзор выполняется большой группой разработчиков, анализ — хороший вариант обзора, потому что он позволяет изучить проблему под многими разны- ми углами зрения. Если каждый участник анализа приходит к выводу, что реше- ние не имеет серьезных недостатков, скорее всего так оно и есть.
Если вы привлекаете к обзору специалистов из других организаций, анализ так- же может быть предпочтительным вариантом. Роли, назначаемые при инспекции,
более формализованы, и их эффективное исполнение требует некоторой прак-