Самый знаменитый список разработки ПО. Часть 2, Definition of Done

Статья о ещё более известном списке в IT, Definition of Done.

Самый знаменитый список разработки ПО. Часть 2, Definition of Done

В прошлой части статьи речь шла о списке критериев Definition of Ready. В этот раз речь пойдёт о списке Definition of Done, об определении выполненности. Оба этих списка — составные части методологии Scrum. Методология применяется для организации труда в разработке программного обеспечения.

Definition of Done упоминается куда чаще, чем его собрат Definition of Ready. История его путешествий по страницам литературы достаточно забавна [1]. Можно сказать, что сначала словосочетание в книгах о программировании появилось в очень прямолинейной форме. Есть в языке ассемблера компьютера PDP-11 [2] символ DONE, у него есть несколько значений. Нужно выяснить текущее определение, так называемый definition of DONE [3].

Одно из первых появлений в интересном для нас смысле неожиданно оказывается в книге о преодолении посттравматического стрессового расстройства ветераном войны во Вьетнаме [4]:

Никто не может сказать тебе, что всё выполнено. Том не скажет тебе этого. Он мог бы предположить, но не станет, потому что не знает, что для тебя означает «выполнено». Ты сам должен принять это решение. Я говорил о функционировании. С одной точки зрения, можно считать, что всё выполнено, когда ты функционируешь в обществе: работаешь, самостоятелен и достаточно контролируешь себя, чтобы делать все вышеперечисленное. Я думаю, это минимальное определение выполненности, и, вероятно, не такое уж плохое место, чтобы остановиться. Мне потребовалось зайти слегка подальше.

Здесь речь идёт о возвращении ветерана к мирной жизни. Не в смысле физического его возвращения домой, а в смысле обретения спокойствия в мирной деятельности. Общее у этого отрывка и у определения выполненности состоит в том, что и командам, применяющим Scrum, необходимо самостоятельно определить для себя, что такое выполненная задача.

В командах, в которых я участвовал, мы использовали чек-лист, состоящий из постоянной части, определяющей рутинные действия, и переменной части, описывающей суть задачи. Да, в этот раз мы разрабатываем кнопку, а в прошлый раз разрабатывали поле ввода, но тесты должны проходить в обоих случаях.

Конец 1990-х и начало 2000-х годов — время бурного появления различных гибких подходов к разработке программного обеспечения. Оттуда вырос Scrum, но помимо него было и множество других: Extreme Programming, Lean, Crystal. Во время подготовки этой статьи я узнал и о ещё одной концепции: QRPD, Quality Rapid Product Development. Как и многие похожие на неё, она быстро затерялась, но именно в книге о ней я нашёл первое упоминание Definition of Done в качестве единого термина в нашей области [5].

К слову, автор книги и подхода, Орион Моше Копельман переехал на остров Мауи [6] и предложил свою кандидатуру в качестве мэра острова [7]. Вот такой поворот.

Первое упоминание термина в книге одного из авторов Scrum случилось в 2004 году [8]. Само упоминание не выглядит как презентация понятия, а происходит походя. С другой стороны, Scrum Guide, который можно считать «инструкцией к Scrum» уже с первой своей версии содержит особый раздел Done [9]. Там и описывается термин.

Вот как выглядит определение выполненности в наиболее свежей версии Scrum Guide [10]:

Определение выполненности* — это формальное описание состояния Increment**, при котором он соответствует требованиям качества, предъявляемым продукту.

В случае с Definition of Done авторы подхода Scrum не предлагаю каких-либо готовых решений, как это было с Definition of Ready. Они пишут, что если какое-либо определение выполненности существует в стандартах организации, то нужно воспользоваться им как базисом. Если такого определения нет, то Scrum-команда должна выработать своё.

В разработке ПО любят изобретать, и вопросы управления тоже попадают под эту любовь. Можно заметить, что определение выполненности достаточно сильно походит на критерии приёмки. Можно, конечно, учесть особенности и назвать их «критериями самоприёмки». Ведь это же сама команда решает, соответствует ли получившийся результат существующим требованиям. А с каким словом любит соседствовать слово «критерии»? Правильно, «список»!

Определение выполненности — это список критериев, которому должен соответствовать результат. Часто бывает удобно, когда список принимает форму чек-листа. Перед завершением задачи команда проходится по чек-листу. Если все результат соответствует всем критериям, то ура, работа сделана. А если нет, то она отправляется на доработку.

 

* Для сохранения единообразия понятий слово «готовность» из оригинального перевода заменено на «выполненность». Такой термин используется в книге Scrum [11]. «Готовность» применяется для Definition of Ready, понятия из предыдущей статьи».

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

 

Список ссылок:
[1] Результаты поиска "definition of done" в Internet Archive
[2] PDP-11 из «Википедии»
[3] Thomas S. Frank, Introduction to the PDP-11 and its assembly language, ISBN 0-13-491704-9
[4] Ron Zaczek, “Farewell, Darkness: A Veteran’s Triumph over Combat Trauma”, ISBN 978-1557509895
[5] Orion Moshe Kopelman, Projects at Warp-Speed with QRPD, ISBN 978-1885261168
[6] «Мауи» из «Википедии»
[7] Ori Kopelman Candidate for Mayor с сайта Mauitopia.
[8] Ken Schwaber, Agile Project Management with Scrum, ISBN 978-0735619937
[9] OLD Scrum Guide, Version 1, February 2010 с сайта MITCH LACEY & ASSOCIATES, INC.
[10] «Руководство по Scrum» с сайта Scrum Guides
[11] Джефф Сазерленд, «Scrum. Революционный метод управления проектами», ISBN 978-5-00057-722-6