Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Совершенный код. Мастер-класс - Макконнелл С.

Макконнелл С. Совершенный код. Мастер-класс — М.: Русская редакция, 2005. — 896 c.
ISBN: 5-469-00822-3
Скачать (прямая ссылка): soversheniykodmasterklass2005.djvu
Предыдущая << 1 .. 214 215 216 217 218 219 < 220 > 221 222 223 224 225 226 .. 426 >> Следующая

иодраэдел "Ошный Тех-
мы сложности. Много лет назад Дейкстра предупреждал об нический
Императие ПО: упраз-
опасности сложности: "Компетентный программист полно- яенm
сложностью" раздела 5,2.
стью осознает строго ограниченные размеры своего черепа,
поэтому подходит к задачам программирования со всей возможной
скромностью" (Dijkstra, 1972). Из этого не следует, что вам
нужно увеличить объем вашего черепа, чтобы иметь дело с
невероятной сложностью. Это предполагает, что вы можете
никогда не связываться с чрезмерной сложностью и всегда должны
предпринимать шаги для ее уменьшения.
Сложность управляющей логики имеет большое значение, потому
что она коррелирует с низкой надежностью и частыми ошибками
(McCabe, 1976, Shen et al., 1985). Вильям Т. Уорд (William Т.
Ward) сообщал о значительном выигрыше в надежности ПО,
полученном в Hewlett-Packard в результате применения
показателя сложности Маккейба (1989b). Этот показатель
использовался для идентификации проблемных участков в одной
программе длиной 77 ООО строк. Коэффициент ошибок после
выпуска этой программы составил 0,31 ошибку на 1000 строк
кода. Коэффициент ошибок в программе длиной 125 ООО строк не
превышал 0,02 ошибки на 1000 строк кода. Ворд отметил, что из-
за своей меньшей сложности обе программы имели значительно
меньше дефектов, чем другие программы в Hewlett-Packard. Моя
компания Construx Software в 2000 г. получила похожие
результаты при использовании средств измерения сложности для
поиска проблемных методов.
452 ЧАСТЬ IV Операторы
Общие принципы уменьшения сложности
Вы можете бороться со сложностью двумя способами. Во-первых,
вы можете улучшить свои способности к умственному
жонглированию, выполняя специальные упражнения. Но
программирование само по себе - уже хорошее упражнение, а
люди, похоже, сталкиваются с трудностями при жонглировании
большим количеством, чем от пяти до девяти воображаемых
сущностей (Miller, 1956). Так что потенциал улучшения невелик.
Во-вторых, вы можете уменьшить сложность ваших программ и
количество усилий, прилагаемых для их понимания.
Как измерить сложность
Дополнительные шдщшд Опи ^ вас' возможно' есть интуитивное ощущение
того, что де-
шный здесь подход основан на лает мет°Д более или менее сложным.
Исследователи пыта-
важной статье Тома МштШ ются формализовать свои чувства и
приводят несколько
"А Complexity Measure" (1976). способов измерения
сложности. Возможно, самый важный
способ предложил Том Маккейб, Сложность в нем измеряется с
помощью подсчета количества "точек принятия решения" в методе
(табл. 19-2):
Табл. 19-2. Способы подсчета точек принятия решения в методе
1. Начните считать с 1 на некотором участке кода.
2. Добавляйте 1 для каждого из следующих ключевых слов или их
эквивалентов: if while repeat for and or.
3. Добавляйте 1 для каждого варианта в операторе case.
Приведем пример:
if ( ( (status = Success) and done ) or
( not done and ( numLines >= maxLines ) ) ) then ...
В этом фрагменте вы начинаете считать с 1, получаете 2 для if
3 - для and, 4 - для or и 5 - для and. Таким образом, этот
фрагмент содержит всего пять точек принятия решения.
Что делать с этим измерением сложности
Посчитав количество точек принятия решения, вы можете
использовать это число для анализа сложности вашего метода:
0-5 Этот метод, возможно, в порядке.
6-10 Начинайте думать о способах упрощения метода.
10+ Вынесите часть кода в отдельный метод и вызывайте его.
Перенос части метода в другой метод не упрощает программу - он
просто перемещает точки принятия решения. Но он уменьшает
сложность, с которой вам приходится иметь дело в каждый момент
времени. Поскольку одна из главных целей состоит в минимизации
количества элементов, которыми приходится мысленно
жонглировать, то уменьшение сложности отдельного метода дает
свой результат.
ГЛАВА 19 Общие вопросы управления 453
Максимум в 10 точек принятия решения не является абсолютным
ограничением. Лспользуйте количество этих точек как сигнал,
предупреждающий о том, что метод, зозможно, стоит
перепроектировать. Не считайте его неколебимым правилом.
Оператор case со многими вариантами может иметь более 10
элементов, но в зависимости от назначения case может быть
глупо разбивать его на части.
Другие виды сложности
Дополнительные сведения Отличное обсуждение показателей
сложности см. в "Software Engineering Metrics Ш Models"
(Conte, Dunsmore and Sften, 1986).
трок кода, число строк между успешными обращениями к
переменной ("диапазон"), число строк, в которых используется
переменная ("время жизни") и объем звода и вывода. Некоторые
исследователи разработали составные показатели сложности,
основанные на сочетании перечисленных простых вариантов.
i
Контрольный список: вопросы
по управляющим структурам http://cc2e cGm/1985
? Используют ли выражения идентификаторы true и false, а не 1
и 0?
? Сравниваются ли логические значения с true и false неявно?
Предыдущая << 1 .. 214 215 216 217 218 219 < 220 > 221 222 223 224 225 226 .. 426 >> Следующая