Том ДеМарко - Deadline. Роман об управлении проектами
В таком случае, если проект был рассчитан на год, то на кодирование отводились лишь последние два месяца перед выпуском. При этом тестирование, соответственно, тоже откладывалось на долгое время. А это значило, что на момент тестирования каждое испытание должно было проходить успешно. На исправление ошибок и отладку просто не оставалось времени.
— Как же можно вот так взять и отменить отладку программы? — уже в который раз поражался мистер Томпкинс.
— Количество времени, которое нужно нам для отладки и исправлений, прямо пропорционально количеству ошибок, — ответил Кенорос голосом учителя, объясняющего материал недалекому ученику.
— Да, но тогда получается, что в нашей программе вообще не должно быть…
— Не должно быть ошибок. Правильно. Вы схватываете просто на лету.
— Совсем без ошибок?!
— Конечно. Вы же сами только что это сказали.
— Но как мы можем написать код без единой ошибки?
— Ну, смотрите. Вот только что вы обнаружили ошибку в одном из модулей. Где находится эта ошибка?
— В модуле.
— Нет. Она находится на границе. На самой границе модуля. Конечно, бывают и локальные ошибки, в середине модуля, но их легче всего выловить и исправить. Самые коварные ошибки, настоящие, те, которые отнимают у разработчиков массу времени и сил, относятся к интерфейсу между модулем и всей остальной программой.
— Правильно, это каждому известно. И что же?
— А то, что когда вы находите ошибку, то смотрите совершенно не туда, куда нужно.
— И куда же я смотрю? — осведомился мистер Томпкинс, поневоле раздражаясь.
— Вы смотрите внутрь модуля, в программный код.
— А куда я, по-вашему, должен смотреть?
— В проектную документацию. Там изложена вся необходимая информация об интерфейсах и взаимодействии различных модулей программы.
— Но мы и так всегда пытаемся искать ошибки, когда просматриваем проектную документацию. Однако и после этого требуется неимоверное количество времени, чтобы устранить те неполадки, которые мы не заметили в первый раз.
— Вот и неправильно.
— Что неправильно? Что мы не замечаем отдельные ошибки?
— Нет, неправильно, что вы пытаетесь исправлять ошибки на стадии проектирования.
— Я не могу понять — о чем это вы?
— Я знаю это, потому что уже многие годы наблюдаю за тем, как проектируются программы — никто даже близко не подошел к точности, позволяющей видеть за дизайном системы программный код.
— Но мы всегда проектируем, прежде чем писать код, — все так делают.
— Разумеется. Только вот все занимаются этим не в то время, которое было отведено на проектирование. Скажем, в начале проекта команда создает некий документ. В этом документе есть немного философии, немного размахивания руками и надувания щек, может быть, общая структура будущей системы — вот, в общем, и все. И все это создается с одной-единственной целью: обезопасить себя от руководства, которому обязательно нужно видеть этот самый документ. Наконец начальство говорит: «Поехали». И теперь начинается самая интересная часть работы. Вся команда радостно запихивает никому не нужный документ на полку, где он пылится до окончания проекта. А вот когда они приступают к написанию кода, тут-то и начинается настоящее проектирование. Именно тогда, когда они пишут код! Вот когда принимаются решения о конкретных модулях, их поведении и интерфейсах. И вот эти решения вы уже никак не проверите.
Мистер Томпкинс только дух перевел. Ему страшно не нравилось то, к чему клонил Аристотель.
— Разумеется, низкоуровневый дизайн воплотить в жизнь куда как проще.
— Разумеется.
— Но только низкоуровневый.
— То, что вы называете высокоуровневым дизайном, на самом деле — философия и размахивание руками.
— Не знаю, не знаю… Что-то подсказывает мне, что вы почти во всем правы, и тем не менее…
— Конечно же, я прав. Низкоуровневое проектирование — единственная реальная вещь во всем проекте. А то, что столь напыщенно называют «концептуальным дизайном», на самом деле — одна показуха.
— Ну, допустим, вы правы. А если нет? Уж меня-то это точно должно беспокоить, правда? Допустим, я сделаю то, что вы советуете, а потом окажется, что вы ошиблись?
— Тогда вам хана, — весело улыбнулся Аристотель Кенорос.
— Вот это-то меня и беспокоит.
Господи, какая же выдержка ему понадобится, если он все-таки решится на этот эксперимент. Придется откладывать, и откладывать, и откладывать написание кода, копить все до самого конца проекта. А если дело не выгорит, то там еще образуется куча ошибок…
— Аристотель, скажите честно — чья это сумасшедшая идея? Кто это все придумал?
— Один парень.
— Вы сами?
— Нет, не я. Какой-то другой парень. Я даже не знаю его имени. Я сам практикую эту технику уже много лет, но выдумал ее не я.
— Вы даже не знаете, как его зовут?
— Нет, мы с ним общаемся через Интернет. Просто обмениваемся сообщениями. Это оракул, гуру, но имени своего он не называет. Могу дать вам его ID, если хотите. Спросите его сами, — Аристотель нацарапал несколько цифр на листке бумаги и протянул его мистеру Томпкинсу.
Мистер Томпкинс взял листок и отправился восвояси.
Из дневника мистера Томпкинса
Делать работу по-другому
1. Есть только один способ сократить время на разработку, когда его и без того мало — уменьшить сроки отладки программы.
2. Проекты с высокой производительностью требуют гораздо меньше времени на отладку и исправление ошибок.
3. Проекты с высокой производительностью требуют гораздо больше времени на проектирование.
Мистер Томпкинс отложил ручку. Да, похоже, все так и есть. Раз на отладку и исправление ошибок уходит около половины всего времени и ресурсов, то если вы хотите добиться выдающихся результатов, вы можете только сократить время, отведенное на отладку. Таким образом останется больше времени на проектирование. Да, с этим нельзя не согласиться.
Однако это не доказывало обратного: что в результате более тщательной работы над дизайном в программе останется меньше ошибок и недоделок. Дело в том, что он уже приготовился записать следующий пункт: «Чем больше времени мы расходуем на проектирование, тем больше времени экономим на отладке», но ему не хватило уверенности. Так ли это? Проверить сейчас он это не мог, значит, надо было просто поверить Аристотелю Кеноросу или же вообще забыть об этом. И, честно говоря, он еще не решил, какой путь будет более правильным.
Если он согласится последовать совету Аристотеля, то наверняка не обойдется без бунта на корабле. Программисты привыкли тратить много времени на отладку программ и исправление ошибок. И едва ли им понравится такая вот радикально новая схема работы.
И ему, мистеру Томпкинсу, придется регулярно выслушивать жалобы, сомнения, уговаривать, требовать и настаивать. Ну, по крайней мере, с этим-то он может справиться. В чем-чем, а в этой области у него есть и опыт, и талант.
Мистер Томпкинс вспомнил о разговоре с генералом Марковым сегодня утром. Даже теперь, когда он вспоминал искренние и теплые слова Габриели, ему становилось хорошо и легко на душе: «Именно поэтому мы и идем за тобой, Вебстер. В этом твоя сила». Мистер Томпкинс снова взял карандаш и продолжил сегодняшний список.
4. Нельзя заставить людей делать что-то по-другому, если ты о них не заботишься, если ты ими не интересуешься. Чтобы они изменились, ты должен понимать (и ценить) их самих, что они делают и к чему стремятся.
Он закрыл записную книжку и взял в руки письмо, которое написал Кенорос. В нем говорилось именно то, чего он и требовал, слово в слово. Теперь хоть министр Бэллок угомонится. Завтра утром он отправит это письмо с первым курьером.
Глава 15
Думать быстрее!
Конечно, нельзя было надеяться вот так раз и навсегда избавиться от министра Бэллока. Письмо Кенороса дало мистеру Томпкинсу несколько недель передышки, но в середине августа его снова призвали пред светлы очи. В час дня ему надлежало быть на официальной аудиенции в Корзаке.
Поднимаясь в кабинет Бэллока, мистер Томпкинс решил пройти мимо комнат, которые занимал ВВН. А вдруг Сам вернулся? В этом случае у мистера Томпкинса нашлась бы пара замечаний относительно вмешательства Бэллока, и это заставило бы мерзавца быстренько переключить свое внимание на что-нибудь другое. Однако офис ВВН был закрыт. На двери висела бумажка: «ВВН в Штатах, наблюдает за завершением строительства своего дома. Вернется к 1 июня». 1 июня уже два месяца как миновало. Ну что ж. Отрадно видеть, что не только программисты не успевают уложиться в установленные сроки. Мистер Томпкинс взглянул на часы и понял, что надо поторапливаться.
Из приемной мистера Томпкинса проводили через несколько богато украшенных комнат в кабинет секретаря. Секретарь проводил мистера Томпкинса через несколько еще более роскошных комнат в кабинет ассистента. Ассистент проводил мистера Томпкинса в соседнее помещение, которое и занимал министр Бэллок. Едва удостоив вошедшего взглядом, министр снова уткнулся в бумаги, которые лежали перед ним на столе. Чем внимательнее он их разглядывал, тем мрачнее становилось его лицо. Не отвлекаясь на приветствия, Бэллок сразу же перешел к делу: