Файл: Руководство по стилю программирования и конструированию по.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 770
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
796
ЧАСТЬ VII Мастерство программирования
IEEE Std 1233-1998 — руководство по разработке спецификаций требований к си- стеме
IEEE Std 1016-1998 — рекомендуемая методика описания проекта ПО
IEEE Std 828-1998 — стандарт планов управления конфигурацией ПО
IEEE Std 1063-2001 — стандарт пользовательской документации
IEEE Std 1219-1998 — стандарт сопровождения ПО
Стандарты контроля качества ПО
IEEE Std 730-2002 — стандарт планирования контроля ка- чества ПО
IEEE Std 1028-1997 — стандарт обзоров ПО
IEEE Std 1008-1987 (R1993) — стандарт блочного тестирования ПО
IEEE Std 829-1998 — стандарт документирования тестов ПО
IEEE Std 1061-1998 — стандарт методологии метрик качества ПО
Стандарты управления
IEEE Std 1058-1998 — стандарт планов управления проек- тами разработки ПО
IEEE Std 1074-1997 — стандарт разработки процессов жиз- ненного цикла ПО
IEEE Std 1045-1992 — стандарт метрик продуктивности ПО
IEEE Std 1062-1998 — рекомендуемая методика приобретения ПО
IEEE Std 1540-2001 — стандарт процессов жизненного цикла ПО — управление риском
IEEE Std 1490-1998 — руководство (заимствование стандарта PMI) к своду знаний по управлению проектами (PMBOK)
Обзор стандартов
Обзоры стандартов можно найти в двух источниках, указан- ных ниже.
IEEE Software Engineering Standards Collection, 2003 Edition. New
York, NY: Institute of Electrical and Electronics Engineers (IEEE).
Этот всесторонний труд содержит 40 самых новых стандар- тов разработки ПО ANSI/IEEE на 2003 год. Каждый стандарт включает план документа, описание каждого компонента плана и обоснование этого компонента. Этот документ включает стандарты планов контроля качества,
планов управления конфигурациями, документов тестирования, спецификаций требований, планов верификации и проверки, описаний проектирования, планов управления проектами и пользовательской документации. Данная книга представ- ляет собой квинтэссенцию опыта сотен лучших специалистов в своих областях и была бы выгодным приобретением практически при любой цене. Некоторые из стандартов доступны и отдельно. Все стандарты можно заказать у организа- http://cc2e.com/3280
http://cc2e.com/3287
http://cc2e.com/3294
http://cc2e.com/3201
ГЛАВА 32 Самодокументирующийся код
797
ции IEEE Computer Society из города Лос-Аламитос, шт. Калифорния, и на сайте
www.computer.org/cspress.
Moore, James W.
Software Engineering Standards: A User’s Road Map. Los Alamitos, CA:
IEEE Computer Society Press, 1997. Мур приводит обзор стандартов IEEE разработ- ки ПО.
Дополнительные ресурсы
Кроме стандартов IEEE, есть и другие источники информа- ции о документировании программ.
Spinellis, Diomidis.
Code Reading: The Open Source Perspective.
Boston, MA: Addison-Wesley, 2003. Эта книга является праг- матичным исследованием методик чтения кода. В ней вы найдете советы по поиску нужного кода и чтению больших объемов кода, сведения об инструментах, облегчающих чте- ние кода, и массу полезных рекомендаций.
SourceForge.net. Уже много лет обучению разработке ПО
препятствует проблема поиска реальных примеров готового кода, которые можно было бы обсудить со студентами. Мно- гие люди быстрее всего учатся на реальных примерах, од- нако большинство реальных программ является собствен- ностью создавших их компаний. Благодаря Интернету и ПО
с открытым исходным кодом эта ситуация улучшилась. Web- сайт Source Forge содержит код тысяч программ, написан- ных на C, C++, Java, Visual Basic, PHP, Perl, Python и других языках, причем весь этот код вы можете загрузить из сети совершенно бесплатно. Вы можете проанализи- ровать реальные примеры, гораздо более объемные, чем примеры, приведенные в этой книге. Для начинающих программистов, не имевших ранее дела с объем- ными примерами готового кода, этот Web-сайт окажется особенно полезен как источник и хороших, и плохих методик кодирования.
Sun Microsystems. «How to Write Doc Comments for the Javadoc
Tool», 2000. В этой статье (
http://java.sun.com/j2se/javadoc/
writingdoccomments/) описывается применение инструмента
Javadoc для документирования программ Java. Она включает детальное описание разметки комментариев с использованием нотации стиля
@tag, а также многие конкретные советы по написанию самих комментариев. Конвенции Javadoc яв- ляются, наверное, наиболее развитыми из нынешних стандартов документирования на уровне кода.
Ниже указаны источники информации о других аспектах документирования ПО.
McConnell, Steve.
Software Project Survival Guide. Redmond, WA: Microsoft Press, 1998.
В этой книге описывается документация, необходимая в критически важных про- ектах среднего размера. На Web-сайте книги вы можете найти много шаблонов документов.
Интересно, сколько великих пи- сателей никогда не читали дру- гих авторов, сколько великих художников никогда не изуча- ли произведения других масте- ров, сколько высококвалифици- рованных хирургов никогда не учились, стоя за плечом колле- ги… И все же именно этого мы ожидаем от программистов.
Дэйв Томас (Dave Thomas)
http://cc2e.com/3208
http://cc2e.com/3215
http://cc2e.com/3222
798
ЧАСТЬ VII Мастерство программирования
www.construx.com. Этот Web-сайт (Web-сайт моей компании)
содержит многочисленные шаблоны документов, описания конвенций кодирования и другие ресурсы, связанные со всеми аспектами разработки ПО, включая документирование ПО.
Post, Ed. «Real Programmers Don’t Use Pascal»,
Datamation, July
1983, pp. 263–265. В этой ироничной статье автор тоскует по «старым добрым временам» программирования на Фор- тране, когда программисты могли не волноваться о таких неприятных вопросах,
как читабельность кода.
Контрольный список: хорошие методики
комментирования
Общие аспекты
Может ли программист, взглянувший на код, сразу понять его?
Объясняют ли комментарии цель кода или резюмируют ли они выполняе- мые в коде действия вместо того, чтобы просто повторять код?
Используете ли вы процесс программирования с псевдокодом для сокращения времени комментирования?
Переписали ли вы хитрый код вместо того, чтобы комментировать его?
Актуальны ли комментарии?
Ясны ли комментарии? Корректны ли они?
Позволяет ли стиль комментирования с легкостью изменять комментарии?
Операторы и абзацы
Избегаете ли вы комментариев в концах строк?
Стремитесь ли вы отвечать в комментариях на вопрос «почему», а не «как»?
Готовят ли комментарии читателя к последующему коду?
Каждый ли комментарий важен? Были ли удалены или улучшены избыточ- ные, посторонние и неуместные комментарии?
Документируете ли вы сюрпризы?
Избегаете ли вы сокращений?
Ясно ли различие между общими и детальными комментариями?
Комментируете ли вы недокументированные возможности или код, предот- вращающий ошибки языка или среды?
Объявления данных
Указываете ли вы единицы измерения данных в местах объявления данных?
Указываете ли вы диапазоны допустимых значений численных величин?
Комментируете ли вы смысл закодированных значений?
Комментируете ли вы ограничения входных данных?
Документируете ли вы флаги до уровня отдельных битов?
Комментируете ли вы каждую глобальную переменную в месте ее объявления?
Поясняете ли вы при каждом использовании глобальной переменной ее глобальный характер при помощи конвенции именования, комментария или обоих способов?
Заменили ли вы магические числа на именованные константы или перемен- ные, вместо того чтобы ограничиться простым документированием?
http://cc2e.com/3229
http://cc2e.com/3236
http://cc2e.com/3243
1 ... 90 91 92 93 94 95 96 97 ... 104
ГЛАВА 32 Самодокументирующийся код
799
Управляющие структуры
Комментируете ли вы каждый управляющий оператор?
Комментируете ли вы концы длинных или сложных управляющих структур или упрощаете ли вы эти структуры по мере возможности, чтобы они не требовали комментариев?
Методы
Комментируете ли вы назначение каждого метода?
Указываете ли вы в комментариях к методам в случае надобности другую информацию, такую как входные и выходные данные, предположения об интерфейсе, ограничения, исправленные ошибки, глобальные эффекты и источники алгоритмов?
Файлы, классы и программы
Включает ли программа краткий документ, подобный документу Книжной па- радигмы, предоставляющий общую информацию об организации программы?
Описали ли вы назначение каждого файла?
Указали ли вы в листинге фамилию и имя автора, адрес электронной поч- ты и номер телефона?
Ключевые моменты
쐽
Вопрос о том, стоит ли комментировать код, вполне обоснован. При плохом выполнении комментирование является пустой тратой времени и иногда при- чиняет вред. При грамотном применении комментирование полезно.
쐽
Основная часть критически важной информации о программе должна содер- жаться в исходном коде. На протяжении жизни программы актуальности ис- ходного кода уделяется больше внимания, чем актуальности любого другого ресурса, поэтому важную информацию полезно интегрировать в код.
쐽
Хороший код сам является самой лучшей документацией. Если код настолько плох, что требует объемных комментариев, попытайтесь сначала улучшить его.
쐽
Комментарии должны сообщать о коде что-то такое, что он не может сооб- щить сам — на уровне резюме или уровне цели.
쐽
Некоторые стили комментирования заставляют выполнять много нудной кан- целярской работы. Используйте стиль, который было бы легко поддерживать.
800
ЧАСТЬ VII Мастерство программирования
Г Л А В А 3 3
Личность
Содержание
쐽
33.1. Причем тут личность?
쐽
33.2. Интеллект и скромность
쐽
33.3. Любопытство
쐽
33.4. Профессиональная честность
쐽
33.5. Общение и сотрудничество
쐽
33.6. Творчество и дисциплина
쐽
33.7. Лень
쐽
33.8. Свойства, которые менее важны, чем кажется
쐽
33.9. Привычки
Связаные темы
쐽
Мастерство разработки ПО: глава 34
쐽
Сложность: разделы 5.2 и 19.6
С момента публикации в 1965 году знаменитой статьи Эдсгера Дейкстры «Prog- ramming Considered as a Human Activity» («Программирование как человеческая деятельность») личности программистов привлекают самое пристальное внимание ученых. Названия книг «Психология конструирования мостов» и «Эксперименталь- ные исследования поведения юристов» могли бы показаться абсурдными, однако работы «Психология программирования» («The Psychology of Computer Program- ming»), «Экспериментальные исследования поведения программистов» («Exploratory
Experiments in Programmer Behavior») и т. п. уже стали классическими.
В какой бы области ни работали инженеры, они должны знать возможности при- меняемых инструментов и материалов. Инженеры-электрики знают проводимость разных металлов и сотни способов использования вольтметра. Инженерам-про- ектировщикам строительных конструкций известны параметры прочности дерева,
бетона и стали.
http://cc2e.com/3313
ГЛАВА 33 Личность
801
Если вы разрабатываете ПО, вашим основным строительным материалом являет- ся интеллект, а главным инструментом —
вы сами. Вместо того чтобы спроекти- ровать структуру до последних деталей и передать чертежи конструкторам, вы проектируете фрагмент ПО до последних деталей, и на этом работа над ним за- вершается. По сути все программирование состоит в создании воздушных замков
— это умственная деятельность почти что в самом чистом виде. Соответственно,
когда разработчики ПО изучают существенные свойства своих инструментов и материалов, они изучают людей: интеллект, характер и другие атрибуты, не столь осязаемые, как дерево, бетон и сталь.
Если вам нужны конкретные советы, эта глава может показаться вам чересчур абстрактной, чтобы быть полезной. Поэтому прочтите следующий раздел и ре- шите, следует ли ее пропустить.
33.1. Причем тут характер?
Крайняя замкнутость программирования придает свойствам личности програм- миста особую значимость. Вы сами знаете, как сложно поддерживать сосредото- ченность на протяжении восьми часов рабочего дня. Наверное, вы можете вспом- нить день или месяц, прошедший впустую из-за чрезмерной концентрации в пре- дыдущий день или месяц. Наверняка бывали дни, когда вы продуктивно работали с 8 часов утра до 2 ночи, после чего чувствовали, что пора отдохнуть. Но вы про- должали работать до 5 часов утра и тратили остальные дни недели на исправле- ние того, что написали ночью.
Программирование плохо поддается контролю особенно потому, что никто на са- мом деле не знает, над чем вы работаете. У всех нас были проекты, при реализации которых мы проводили 80% времени над небольшим фрагментом, казавшимся интересным и тратили 20% времени на создание остальных 80% программы.
Ваш работодатель не может заставить вас стать хорошим программистом, а зача- стую он даже не может оценить, насколько хороши вы как программист. Если вы хотите стать отличным программистом, вы отвечаете за это сами. Это зависит от вашего характера.
Как только вы решили стать отличным программистом, перед вами от- крываются широкие перспективы. Исследования показывают, что лучшие программисты создают программы в 10 раз быстрее, чем их менее ква- лифицированные коллеги. Время, уходящее на отладку кода, а также объем и бы- стродействие итоговой программы, уровень ошибок и число обнаруженных оши- бок также различаются примерно в 10 раз (Sackman, Erikson, and Grant, 1968; Curtis,
1981; Mills, 1983; DeMarco and Lister, 1985; Curtis et al., 1986; Card, 1987; Valett and
McGarry, 1989).
Вы ничего не сделаете со своим интеллектом, но вы можете изменить свой харак- тер — именно от характера зависит, станете ли вы превосходным программистом.