Файл: Руководство по стилю программирования и конструированию по.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 792
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
3 4
ЧАСТЬ I Основы разработки ПО
쐽
важна долговременная предсказуемость проекта;
쐽
затраты на изменение требований, проекта приложения и кода скорее всего окажутся высокими.
Более итеративный подход (при котором вопросы решаются по мере работы)
можно предпочесть, если:
쐽
требования относительно непонятны или вам кажется, что они могут оказать- ся нестабильными по другим причинам;
쐽
проект приложения сложен, не совсем ясен или и то и другое;
쐽
группа разработчиков незнакома с прикладной областью;
쐽
проект сопряжен с высоким риском;
쐽
долговременная предсказуемость проекта не играет особой роли;
쐽
затраты на изменение требований, проекта приложения и кода скорее всего будут низкими.
Как бы то ни было, итеративные подходы эффективны гораздо чаще, чем после- довательные. Вы можете адаптировать предварительные условия к своему кон- кретному проекту, как считаете нужным, сделав их более или менее формальны- ми или полными. Мы подробнее обсудим разные подходы к крупным и неболь- шим (или формальным и неформальным) проектам в главе 27.
Суть предварительных условий конструирования в том, что вам следует сначала определить, какие из них уместны для вашего проекта. В некоторых проектах предварительным условиям уделяется слишком мало времени, что приводит к дестабилизации на этапе конструирования и препятствует планомерному разви- тию проекта, хотя этого можно было избежать. В других проектах слишком мно- го работы выполняется наперед; программисты, работающие над такими проек- тами, слепо следуют требованиям и планам, которые впоследствии оказываются неудачными, и это также может снижать эффективность конструирования.
Итак, изучив табл. 3-2, вы определили, какие предварительные условия уместны для вашего проекта, поэтому в оставшейся части главы я расскажу, как определить,
были ли выполнены отдельные предварительные условия конструирования.
3.3. Предварительные условия, связанные
с определением проблемы
Первое предварительное условие, которое нужно выполнить перед конструированием, — ясное формулирование пробле- мы, которую система должна решать. Это еще иногда назы- вают «видением продукции», «формулированием точки зре- ния», «формулированием задачи» или «определением про- дукции». Я буду называть это условие «определением про- блемы». Так как книга посвящена конструированию про- грамм, прочитав этот раздел, вы не научитесь разрабатывать определение проблемы, но узнаете, как определить, есть ли оно вообще и станет ли оно надежной основой конструирования.
Если ограничения и условия описываются как «коробка», то хитрость в том, чтобы найти именно коробку… Не думайте о чем-то глобальном — найдите коробку.
Энди Хант и Дэйв Томас (Andy
Hunt and Dave Thomas)
ГЛАВА 3 Семь раз отмерь, один раз отрежь: предварительные условия
35
Определение проблемы — это просто формулировка сути проблемы без каких- либо намеков на ее возможные решения. Оно может занимать пару страниц, но обязательно должно звучать как проблема. Фраза «наша система Gigatron не справ- ляется с обработкой заказов» звучит как проблема и является хорошим ее опре- делением. Однако фраза «мы должны оптимизировать модуль автоматизирован- ного ввода данных, чтобы система Gigatron справлялась с обработкой заказов» —
плохое определение проблемы. Оно похоже не на проблему, а на решение.
Определение проблемы предшествует выработке детальных требований, которая является более глубоким исследованием проблемы (рис. 3-4).
Будущие улучшения
Тестирование системы
Конструирование
Проектирование архитектуры
Выработка требований
Определение проблемы
Рис. 3-4. Определение проблемы — фундамент всего процесса программирования
Проблему следует формулировать на языке, понятном пользователю, а сама про- блема должна быть описана с пользовательской точки зрения. Обычно проблему не следует формулировать в компьютерных терминах, потому что оптимальным ее решением может оказаться не компьютерная программа. Допустим, вы нужда- етесь в вычислении годовой прибыли. Вычисление квартальной прибыли вы уже компьютеризировали. Если вы застрянете на программировании, то решите, что в имеющееся приложение нужно просто добавить функцию вычисления годовой прибыли со всеми вытекающими отсюда последствиями: затратами на оплату труда разработчиков и т. п. Если же вы малость подумаете, то просто чуть поднимете зарплату секретарю, который будет один раз в год суммировать четыре числа на калькуляторе.
Исключения из этого правила допустимы, если проблема связана с компьютера- ми: программы компилируются слишком медленно, или инструменты програм- мирования полны ошибок. В подобных случаях проблему можно сформулировать в компьютерных, привычных для программистов терминах.
Не имея хорошего определения проблемы, можно потратить усилия на решение не той проблемы (рис. 3-5).
3 6
ЧАСТЬ I Основы разработки ПО
Рис. 3-5. Прежде чем стрелять, убедитесь в том, что знаете, куда целитесь
Неудачное определение проблемы грозит пустой тратой времени на ре- шение не той проблемы. Разумеется, нужную проблему вы при этом тоже не решите.
3.4. Предварительные условия, связанные
с выработкой требований
Требования подробно описывают, что должна делать программная система, а их выработка — первый шаг к решению проблемы. Выработка требований также известна как «разработка требований», «анализ требований», «анализ», «определение требований», «спецификация», «функциональная спецификация».
Зачем нужны официальные требования?
Важность явного набора требований объясняется несколькими причинами.
Явные требования помогают гарантировать, что функциональность системы опре- деляется пользователем, а не программистом. Если требования сформулированы явно, пользователь может проанализировать и утвердить их. Если явных требова- ний нет, программисту обычно самому приходится вырабатывать их во время про- граммирования. Явные требования позволяют не гадать, чего хочет пользователь.
Кроме того, наличие явных требований помогает избегать споров. Требования позволяют определить функциональность системы до начала программирования.
Если вы не согласны с другим программистом по поводу каких-то аспектов про- граммы, вы можете разрешить споры, взглянув на написанные требования.
Внимание к требованиям помогает свести к минимуму изменения сис- темы после начала разработки. Обнаружив при кодировании ошибку в коде, вы измените несколько строк, и работа продолжится. Если же во время кодирования вы найдете ошибку в требованиях, придется изменить про- ект программы, чтобы он соответствовал измененным требованиям. Возможно,
при этом придется отказаться от части старого проекта, а поскольку в соответ- ствии с ней уже написан некоторый код, на реализацию нового проекта уйдет больше времени, чем могло бы. Вы также должны будете отказаться от кода и те- стов, на которые повлияло изменение требований, и написать их заново. Даже код,
оставшийся нетронутым, нужно будет заново протестировать для гарантии того,
что изменение не привело к появлению новых ошибок.
1 2 3 4 5 6 7 8 9 ... 104
ГЛАВА 3 Семь раз отмерь, один раз отрежь: предварительные условия
37
Как вы помните, исследования, проведенные во многих организациях, сви- детельствуют о том, что при работе над крупными проектами исправле- ние ошибки в требованиях, обнаруженной на этапе проектирования ар- хитектуры, обычно обходится втрое дороже, чем исправление аналогичной ошибки,
найденной на этапе выработки требований (табл. 3-1). Такая же ошибка, обнару- женная при кодировании, обходится дороже уже в 5–10, при тестировании сис- темы — в 10, а после выпуска программы — в 10–100 раз. В менее крупных про- ектах с меньшими административными расходами последний показатель ближе к 5–10, чем к 100 (Boehm and Turner, 2004). Как бы то ни было, думаю, что допол- нительные расходы нужны вам меньше всего.
Адекватное определение требований — одно из важнейших условий успеха про- екта, возможно, даже более важное, чем использование эффективных методов конструирования (рис. 3-6). Определению требований посвящены многие хоро- шие книги, поэтому в нескольких следующих разделах я не буду рассказывать, как правильно определять требования, — вместо этого я расскажу, как узнать, хоро- шо ли они определены, и как выжать максимум из имеющихся требований.
Рис. 3-6. Не имея грамотно определенных требований, вы можете правильно
представлять общую проблему, но упустить из виду ее специфические аспекты
Миф о стабильных требованиях
Стабильные требования — Святой Грааль разработки ПО.
При стабильных требованиях смена этапов разработки ар- хитектуры, проектирования, кодирования и тестирования приложения происходит упорядоченно, предсказуемо и спокойно. Это просто рай для разработчиков! Вы можете точно планировать расходы и совсем не волнуетесь о том, что реализация какой- то функции обойдется в 100 раз дороже из-за того, что клиенту она придет в го- лову только после отладки.
Всем нам хотелось бы надеяться, что, как только клиент утвердил требования,
никаких изменений не произойдет. Однако чаще всего клиент не может точно сказать, что ему нужно, пока не будет написан некоторый код. Проблема не в том,
что клиенты — более низкая форма жизни. Подумайте: чем больше вы работаете над проектом, тем лучше вы его понимаете; то же относится и к клиентам. Про-
Требования подобны воде. Опи- раться на них легче, если они заморожены.
Аноним
3 8
ЧАСТЬ I Основы разработки ПО
цесс разработки помогает им лучше понять собственные потребности, что часто приводит к изменению требований (Curtis, Krasner and Iscoe, 1988; Jones 1998;
Wiegers, 2003). Если вы планируете жестко следовать требованиям, на самом деле вы собираетесь не реагировать на потребности клиента.
Какой объем изменений типичен? Исследования, проведенные в IBM и других компаниях, показали, что при реализации среднего проекта тре- бования во время разработки изменяются примерно на 25% (Boehm, 1981;
Jones, 1994; Jones, 2000), на что приходится 70–85% объема повторной работы над типичным проектом (Leffingwell, 1997; Wiegers, 2003).
Возможно, вы считаете, что «Понтиак Ацтек» — самый великолепный автомобиль из когда-либо созданных, являетесь членом Общества Верящих в Плоскую Землю и каждые четыре года совершаете паломничество в Розуэлл, штат Нью-Мексико, на место приземления инопланетян. Если это так, можете и дальше верить в то, что требования в ваших проектах меняться не будут. Если же вы уже перестали верить в Санта-Клауса или хотя бы прекратили признаваться в этом, вы можете кое-что предпринять, чтобы свести зависимость от изменений требований к минимуму.
Что делать при изменении требований во время
конструирования программы?
Следующие действия позволяют максимально легко перенести измене- ния требований во время конструирования.
Оцените качество требований при помощи контрольного списка,
приведенного в конце раздела Если требования недостаточно хороши, прекра- тите работу, вернитесь назад и исправьте их. Конечно, вам может показаться, что прекращение кодирования на этом этапе приведет к отставанию от графика. Но если вы едете из Чикаго в Лос-Анджелес и видите знаки, указывающие путь в Нью-
Йорк, разве можно считать изучение карты пустой тратой времени? Нет. Если вы не уверены в правильности выбранного направления, остановитесь и проверьте его.
Убедитесь, что всем известна цена изменения требований Думая о новой функции, клиенты приходят в возбуждение. Кровь у них разжижается, перепол- няет продолговатый мозг, и они впадают в эйфорию, забывая обо всех собрани- ях, посвященных обсуждению требований, о церемонии подписания и всех до- кументах. Угомонить таких одурманенных новыми функциями людей проще всего,
заявив: «Ого, это действительно прекрасная идея! Но ее нет в документе требова- ний, поэтому я должен пересмотреть график работы и смету, чтобы вы могли решить, хотите ли вы реализовать это прямо сейчас или позднее». Слова «график»
и «смета» отрезвляют куда лучше, чем кофе и холодный душ, и многие требова- ния быстро превращаются в пожелания.
Если руководители вашей организации не понимают важность предварительной выработки требований, укажите им, что изменения во время выработки требова- ний обходятся гораздо дешевле, чем на более поздних этапах. Используйте для их убеждения раздел «Самый веский аргумент в пользу выполнения предваритель- ных условий перед началом конструирования».