Идеальная разработка ПО. Рецепты лучших программистов

Идеальная разработка ПО. Рецепты лучших программистов
Автор: Энди Орам, Грегори Уилсон
Год: 2012
ISBN: 978-5-459-01099-2
Страниц: 587
Язык: Русский
Формат: PDF
Размер: 80 Мб

Download

Авторы популярной в IT-сообществе книги “Идеальный код” вновь предлагают вашему вниманию подборку лучших решений от признанных экспертов в области разработки ПО.
Существует много споров о том, какие же инструменты, технологии и практики могут действительно оптимизировать процесс разработки ПО и усовершенствовать конечный продукт. В новой книге под редакцией Энди Орама и Грега Уилсона известные разработчики делятся своим бесценным опытом и мнениями на эту тему. Авторские эссе и статьи посвящены наиболее эффективным методам работы программиста, а также развенчиванию ряда мифов, существующих в программистском сообществе.
Среди авторов книги – такие авторитеты, как Стив Макконнелл, Барри Бэм, Барбара Китченхем и еще 27 известных экспертов в области разработки программного обеспечения.

+

Задача сбора убедительных доказательств

Что именно делает доказательства элегантными, полезными и убедительными? Авторы настоящей главы искали ответ на этот вопрос последние два десятилетия. Мы опубликовали более двухсот статей, посвященных эмпирическим вопросам технологии программирования, а также организовали бесчисленные экспертные дискуссии, семинары, конференции и журнальные обсуждения по этой теме.

В этой главе мы хотим немного поразмышлять. Мы рассмотрим прогресс в области технологии программирования до настоящего времени и спросим себя: что нам это все дает? Куда мы пойдем дальше? Выводы, сделанные нами из этих размышлений:

  • Задача сбора убедительных доказательств намного, намного сложнее, чем казалось сначала.
  • Ученые-аналитики, работающие в области технологии программирования, должны объединить свои усилия, чтобы наши доказательства шире использовались в общих интересах.
  • Необходимо признать, что убедительность доказательств в определенной степени зависит от контекста. Доказательства, которые кажутся убедительными нам, могут оказаться неубедительными для вас. А это значит, что мы должны быть готовыми к повторной интерпретации и анализу в случае изменения аудитории.

В начале

Несколько десятилетий назад на вопрос о том, что считать «красивым доказательством», мы бы предложили ту или иную комбинацию следующих свойств:

Элегантность анализа

Многие исследования в области технологии программирования учитывают субъективные (человеческие) факторы, потому что эффективность многих программных технологий зависит от людей, которые ими пользуются. Однако учет человеческого непостоянства — исключительно сложная задача. Исследования, основанные на хитроумных методиках, сводящих к минимуму роль этих непредсказуемых аспектов, нередко вызывают восхищение у других исследователей. Например, в исследованиях Базили и Селби [Basili and Selby, 1987] использовался план дробного факторного эксперимента, при котором каждый разработчик использовал каждый анализируемый метод, а каждый метод использовался с каждым фрагментом программного кода, задействованным в эксперименте.

Статистическая достоверность

С усложнением математического аппарата все более важную роль начинает играть статистическая достоверность результатов — именно благодаря ей исследователи могут быть уверенными в том, что их теория обладает объективно действующим эффектом, который выделяется из случайного шумового фона.

Воспроизводимость результатов

Результаты становятся намного более убедительными, если они обнаруживаются снова и снова во множестве разных контекстов — то есть не ограничиваются одним контекстом или набором экспериментальных условий. В других научных областях повторяемость способствует повышению достоверности; но этой причине значительные усилия прилагаются к тому, чтобы эксперименты в области технологии программирования могли легко воспроизводиться другими аналитиками в других контекстах [Basili et al. 1999J. В качестве примера воспроизводимости Турхан показал, что системы прогнозирования сбоев программного обеспечения, прошедшие обучение на одном месте, могли успешно применяться на других местах [Turhan et al. 2009].

Как обстоят дела сегодня

Оглядываясь назад, мы понимаем, насколько наивными были наши представления об убедительных доказательствах. Элегантные, статистически достоверные, воспроизводимые доказательства оказывается найти намного сложнее, чем казалось. Более того, часто они не удовлетворяют основным целям наших исследований.

Проблемы с элегантностью анализа

Оказалось, что элегантные методы анализа убеждают людей, обладающих хорошей теоретической подготовкой, но их бывает трудно объяснить практикам, потому что из-за присущих таким методам упрощений и ограничений контекст перестает быть характерным для реальных условий разработки. Например, в исследовании Базили и Селби изучаемые методологии применялись только к «игрушечным» задачам длиной не более 400 строк кода, да еще и в искусственной среде. На это исследование часто ссылаются, и хотя с тех пор оно неоднократно повторялось, ни в одном из повторных экспериментов не были использованы намного более крупные или более типичные приложения [Runeson et al. 2006J. И хотя это элегантное исследование внесло заметный вклад в наше понимание достоинств и недостатков разных методов устранения дефектов программного кода, идеальным его не назовешь, потому что наши представления но этой теме в целом основаны на относительно малых сегментах кода.

Проблемы со статистической достоверностью

Как ни странно, но поводу того, что же считать «достоверной» статистикой в реальных задачах, также не существует единого мнения. Во-первых, существует проблема внешней общезначимости: действительно ли измеряемые метрики адекватно отражают представляющие интерес явления реального мира? Если метрики бессодержательны, то и статистическая достоверность становится бесполезной. Например, у Фосса и др. показано, что метрики, часто используемые для оценки объема работ, принципиально неверны [Foss et al. 20031. Что еще хуже, авторы утверждают, что проблема не имеет решения:

Бесполезно искать «панацею»: единственную, пр(ктую в использовании, универсальную метрику, которую было бы удобно применять для сравнения [разных методов!.

Более того, разные авторы применяют разные методы статистического анализа, и ни один из методов не был повсеместно признан «самым достоверным»:

О У Демсара описан широчайший спектр статистических методов, использованных докладчиками на одной важной международной конференции, посвященной анализу данных [Demsar, 20061.

О Коэн рассматривает использование стандартной проверки статистических гипотез для формулировки научных выводов. Он язвительно описывает такую проверку как «мощные, но всесокрушающие интеллектуальные грабли, которые не оставляют <…> жизнеспособной научной поросли» [Cohen, 1988).

Б поддержку утверждения Коэна мы предлагаем следующий поучительный урок. В своих работах из области маркетинга Армстронг [Armstrong, 2007] описывает исследование, которое, используя метод проверки значимости, утверждает, что оценки, построенные по данным из нескольких источников, оказываются не лучше оценок, построенных по данным одного источника. Затем он полностью разрушает этот вывод, перечисляя 31 исследование, в которых прогнозы поданным нескольких источников по надежности стабильно превосходили прогнозы по данным одного источника на 3,4 23,4% (в среднем 12,5%). В каждом исследовании, описанном Армстронгом, результаты оказывались в точности противоположными тому, что можно было прогнозировать по итогам проверки значимости.

Эти открытия изменили наше отношение к статистическому анализу. Теперь мы но возможности стараемся подкреплять свои утверждения лаконичными визуализациями (а проверкам значимости отводим менее важную роль «проверки разумности» для выводов, сформулированных на базе этих визуализаций).

Но при этом мы все равно отвергаем в месяц около двух статей, представленных в журнал, потому что в них приводятся только средние результаты без анализа статистики или визуального представления отклонений данных от среднего значения. За основу мы рекомендуем взять критерии Манна-Уитни или Уилкоксона (для непарных и парных результатов соответственно) для демонстрации того, что внешне различающиеся результаты могут действительно различаться.

Проблемы с воспроизводимостью результатов

Воспроизводимость оказалась труднодостижимой целью. В некоторых областях доказательства того, что результаты одного проекта были (или могут быть) обобщены для других проектов, минимальны:

  • Циммерманн проанализировал 629 пар проектов по разработке программного обеспечения [Zimmermann, 2009]. Только в 4% случаев модель прогнозирования дефектов, сформулированная на основе одного проекта, оказывалась полезной в парном проекте.
  • В своем исследовании Китченхэм и др. проверяли, могут ли данные одного проекта использоваться для оценки объема работ по второму проекту [Kitchenham et al. 2007]. Обнаружилось, что существующие доказательства недостаточно убедительны, а часто даже противоречивы.

По другим темам можно найти доказательства того, что некоторый эффект проявляется в нескольких разных контекстах например, что проверенные методы (такие как контроль программного кода) позволяют выявить значительную часть существующих дефектов в программном продукте (Shull, 2002]. Тем не менее если в результате нового исследования будут получены доказательства, свидетельствующие о противоположном, будет трудно определить, было ли новое (или старое) исследование в чем-то неверным. С учетом широкого разнообразия контекстов, в которых происходит разработка ПО, оба вывода в равной степени достоверны.

В самом деле, при всей интуитивной привлекательности воспроизводимых результатов количество исследований по конкретным вопросам технологии программирования либо было недостаточным, либо такие исследования были неполными.

Пример недостаточности исследований: Мензес проанализировал 100 методов контроля качества программного продукта, предложенных разными группами (в числе которых были IEEE1017 и внутренние стандарты NASA IV&V) и не обнаружил никаких экспериментальных подтверждений того, что какой-либо метод обладал большей экономической эффективностью по сравнению с другими методами [Menzies et al. 2008].

Примеры неполноты имеющихся исследований:

Занье и др. проанализировали случайную выборку из 5% статей, опубликованных ICSE организацией, которая позиционирует себя как ведущую конференцию по технологии программирования [Zannieret al. 2006). Как выяснилось, среди статьей, которые были заявлены как «эмпирические», лишь очень немногие (2%) содержали сравнение методов разных исследователей.

Пето и др. сообщили о своем исследовании публикаций, посвященных модельному тестированию (МВТ, Model-Based resting). Они обнаружили 85 статей, в которых описывался 71 метод МВТ, при крайне незначительном количестве исследований с экспериментальными компонентами.

В этом факте проявляется общая тенденция: исследователи предпочитают изобретать и сообщать о появлении новых методов, вместо того чтобы глубже разбираться в сопоставимых практических преимуществах существующих методов.

Чтобы понять, были ли эти статьи одиночным явлением или частью более общей закономерности, мы проанализировали все публикации конференции PROMISE1 по проблеме воспроизводимости экспериментов из области технологии программирования. С 2005 года но материалам конференции PROMISE:

  • Всего было 68 публикаций, в 48 из которых авторы либо пытались применить новый метод анализа к старым данным, либо выдавали результаты в стиле [Zannier, 2006] — то есть новый метод сработал для одного конкретного проекта.
  • В 9 публикациях ставилась под сомнение корректность предыдущих результатов (например, [Menzies, 2009а]).
  • В 4 публикациях утверждалось, что применение обобщенных моделей в области технологии программирования либо маловероятно, либо невозможно (например, [Briand, 2006]).
  • Крайне редко (7 из 68 публикаций) исследователи пытались обобщить результаты одного проекта на другие проекты:

• в 4 публикациях сообщалось, что система прогнозирования качества ПО, обучавшаяся на одном проекте, была с пользой применена к другому проекту (например, [Weyuker et al. 2008] и [Tosun et al. 2009]);

• в 3 публикациях ограничивались утверждением о том, что такое обобщение возможно (например, [Boehm, 2009]).

Несколько обеспокоенные этими результатами, мы обсудили их с ведущими специалистами в области эмпирического изучения технологии программирования в США и Европе. Краткая сводка результатов этого обсуждения:

О Вик Базили оставался первопроходцем в области эмпирического изучения технологии программирования в течение 30 лет. Высказав мнение о том, что область эмпирического анализа сейчас выглядит более благополучно, чем в 1980-х годах, он признал, что: а) результаты на данный момент неполны; б) лишь немногие методы были с пользой применены в нескольких проектах [Basili, 2009].

О Дэвид Баджен и Барбара Китченхэм являются ведущими европейскими сторонниками методологии EBSE (Evidence-Based Software Engineering). Согласно канонам EBSE, практика разработки ПО должна базироваться на методах, имеющих надежное теоретическое обоснование в литературе. Баджен и Китченхэм спрашивают: «Можно ли сказать, что методология EBSE созрела для применения на уровне практики и политики?» Они отвечают на свой вопрос: «Нет, еще нет: прежде чем мы сможем показать, что результаты действительно воспроизводятся в разных проектах, потребуется значительная реструктуризация в области технологии программирования » [Bndgen et al. 2009]. Они выступают за изменение стандартов отчетности, а конкретнее, за использование «структурированных абстракций» для упрощения крупномасштабного анализа литературы в области технологии программирования.

Что может измениться

До сегодняшнего дня наша мечта о доказательствах элегантных, статистически достоверных и воспроизводимых так и осталась нереализованной. И даже когда нам …

Достоверность, или Почему мы настаиваем на том, чтобы нас убедили

Все мы, специалисты но технологии программирования, имеем собственное мнение по поводу того, что работает, а что нет (или работает неудовлетворительно); мы обмениваемся опытом и историями практического применения, которые со временем кристаллизуются в общие знания и житейскую мудрость. Беда в том, что то, «что знают все», часто бывает неверным, и хотя мы непрестанно собираем информацию, мы не всегда способны к ее критической оценке и интеграции и даже не всегда стремимся к этому.

Как появляются доказательства в области технологии программирования

Самым интересным моментом криминальной драмы часто оказывается момент обнаружения новых доказательств: кто-то сообщает о факте, неизвестном ранее, в ответ на что проницательный сыщик пересматривает свою теорию преступления. Иногда новые доказательства позволяют взглянуть на наши представления о мире под новым углом («Так значит, он все это сделал нарочно.»), иногда они просто подкрепляют уже существовавшие убеждения («Она действительно не настолько внимательна, как утверждает»), а иногда полностью опровергают то, в чем мы и не сомневались («Вот это да! А я всегда думал, что он приехал через час после нее!») Драма зависит от мыслительных способностей сыщика. Гениальные вымышленные сыщики учитывают все доказательства до последнего бита; работают до тех пор, пока из этих доказательств не сложится логичная картина; постоянно проверяют свою теорию преступления и пересматривают ее в свете новых доказательств. А глупые полицейские постоянно спотыкаются на предвзятости мнения и продолжают цепляться за свои теории даже в том случае, если им не удается объяснить их логические нестыковки.

В разработке ПО все происходит примерно так же: доказательства появляются со временем, а качество технологических решений зависит от критичности мышления специалиста. Люди, находящиеся под влиянием предвзятого мнения, обращают…