Программист-прагматик. Путь от подмастерья к мастеру
Добавить в закладки К обложке
- Высказывания программистов-практиков о книге "Программист-прагматик" - Страница 1
- Предисловие - Страница 2
- От авторов - Страница 4
- Кому адресована эта книга? - Страница 5
- Как происходит становление программиста-прагматика? - Страница 6
- Прагматики-одиночки и большие команды - Страница 7
- Непрерывность процесса - Страница 8
- Как составлена эта книга - Страница 9
- Исходные тексты программ и другие ресурсы - Страница 10
- Ваши отклики - Страница 11
- Благодарности - Страница 12
- Глава 1Прагматическая философия - Страница 13
- 1Мой исходный текст съел кот Мурзик - Страница 14
- Принятие ответственности - Страница 15
- 2Энтропия в программах - Страница 16
- 3Суп из камней и сварившиеся лягушки - Страница 18
- 4Приемлемые программы - Страница 20
- Находите компромисс с пользователями - Страница 21
- Знайте меру - Страница 22
- 5Портфель знаний - Страница 23
- Ваш портфель знаний - Страница 24
- Построение вашего портфеля - Страница 25
- Цели - Страница 26
- Возможности обучения - Страница 27
- Критическое осмысление - Страница 28
- 6Общайтесь! - Страница 29
- Глава 2Прагматический подход - Страница 32
- 7Пороки дублирования - Страница 33
- Как возникает дублирование? - Страница 34
- Навязанное дублирование - Страница 35
- Неумышленное дублирование - Страница 37
- Нетерпеливое дублирование - Страница 38
- Коллективное дублирование - Страница 39
- 8Ортогональность - Страница 40
- Что такое ортогональность? - Страница 41
- Преимущества ортогональности - Страница 42
- Проектные группы - Страница 43
- Проектирование - Страница 44
- Инструментарии и библиотеки - Страница 45
- Написание текста программы - Страница 46
- Тестирование - Страница 47
- Документация - Страница 48
- Жизнь в условиях ортогональности - Страница 49
- 9Обратимость - Страница 50
- Гибкая архитектура - Страница 52
- 10Стрельба трассирующими - Страница 53
- Программа, которую видно в темноте - Страница 54
- При стрельбе трассирующими вы не всегда попадаете в цель - Страница 56
- Программа трассировки и создание прототипов - Страница 57
- 11Прототипы и памятные записки - Страница 58
- Для чего создаются прототипы - Страница 59
- Как использовать прототипы - Страница 60
- Создание прототипов архитектуры - Страница 61
- Как не надо использовать прототипы - Страница 62
- 12Языки, отражающие специфику предметной области - Страница 63
- 13Оценка - Страница 67
- Насколько точной является "приемлемая точность"? - Страница 68
- Из чего исходят оценки? - Страница 69
- Что сказать, если вас просят оценить что-либо - Страница 71
- Глава 3Походный набор инструментов - Страница 72
- 14Преимущества простого текста - Страница 73
- Что такое простой текст? - Страница 74
- Недостатки - Страница 75
- Преимущества простого текста - Страница 76
- Подводим итог - Страница 77
- 15Игры с оболочками - Страница 78
- Утилиты оболочек и системы Windows - Страница 80
- 16Мощь редактирования - Страница 81
- Один-единственный редактор - Страница 82
- Средства редактирования - Страница 83
- Производительность - Страница 84
- Куда же направиться? - Страница 85
- Какой же редактор выбрать? - Страница 86
- 17Управление исходным текстом программ - Страница 87
- Команда, в которой я работаю, не использует систему управления исходным текстом - Страница 89
- Программы управления исходным текстом - Страница 90
- 18Отладка - Страница 91
- Психология процесса отладки - Страница 92
- Умонастроение отладки - Страница 93
- С чего начать? - Страница 94
- Стратегии отладки - Страница 95
- Элемент удивления - Страница 98
- Контрольные вопросы при отладке - Страница 99
- 19Обработка текста - Страница 100
- 20Генераторы текстов программ - Страница 102
- Пассивные генераторы - Страница 103
- Активные генераторы текста - Страница 104
- Генераторы текста не должны быть слишком сложными - Страница 105
- Генераторы текста не всегда генерируют тексты программ - Страница 106
- Глава 4Прагматическая паранойя - Страница 107
- 21Проектирование по контракту - Страница 108
- Реализация принципа ППК - Страница 111
- ППК и аварийное завершение работы программы - Страница 112
- Другие случаи применения инвариантов - Страница 113
- Динамические контракты и агенты - Страница 114
- 22Мертвые программы не лгут - Страница 116
- Аварийное завершение не означает "отправить в корзину для мусора" - Страница 117
- 23Программирование утверждений - Страница 118
- Не отключайте утверждения - Страница 119
- 24Случаи, в которых используются исключения - Страница 120
- Что является исключительным? - Страница 121
- Обработчики ошибок как альтернатива исключению - Страница 122
- 25Балансировка ресурсов - Страница 123
- Объекты и исключения - Страница 125
- Балансировка и исключения - Страница 126
- Случаи, при которых балансировка ресурсов невозможна - Страница 127
- Проверка баланса - Страница 128
- Глава 5Гибкость против хрупкости - Страница 129
- 26Несвязанность и закон Деметера - Страница 130
- Сведение связанности к минимуму - Страница 131
- Закон Деметера для функций - Страница 132
- А не все ли равно? - Страница 133
- 27Метапрограммирование - Страница 135
- Динамическая конфигурация - Страница 136
- Приложения, управляемые метаданными - Страница 137
- 28Временное связывание - Страница 139
- Последовательность операций - Страница 140
- Архитектура - Страница 141
- Проектирование с использованием принципа параллелизма - Страница 142
- Развертывание - Страница 144
- 29Всего лишь визуальное представление - Страница 145
- Протокол "Публикация и подписка" - Страница 146
- Принцип "модель-визуальное представление-контроллер» - Страница 147
- Отходя от графических интерфейсов - Страница 149
- Все такой же связанный (после стольких лет) - Страница 150
- 30Доски объявлений - Страница 151
- Реализация концепции доски объявлений - Страница 152
- Пример приложения - Страница 153
- Глава 6Пока вы пишете программу - Страница 154
- 31Программирование в расчете на стечение обстоятельств - Страница 155
- Как программировать в расчете на стечение обстоятельств - Страница 156
- Преднамеренное программирование - Страница 158
- 32Скорость алгоритма - Страница 159
- Что подразумевается под оценкой алгоритмов? - Страница 160
- Система обозначений О() - Страница 161
- Оценка с точки зрения здравого смысла - Страница 162
- Скорость алгоритма на практике - Страница 163
- 33Реорганизация - Страница 165
- Когда осуществлять реорганизацию? - Страница 166
- Как производится реорганизация? - Страница 167
- 34Программа, которую легко тестировать - Страница 169
- Модульное тестирование - Страница 170
- Тестирование в рамках контракта - Страница 171
- Создание модульных тестов - Страница 172
- Применение тестовых стендов - Страница 173
- Построение тестового окна - Страница 174
- Культура тестирования - Страница 175
- 35Злые волшебники - Страница 176
- Глава 7Перед тем, как начать проект - Страница 178
- 36Карьер для добычи требований - Страница 179
- В поисках требований - Страница 180
- Документация требований - Страница 181
- Чрезмерная спецификация - Страница 183
- Видеть перспективу - Страница 184
- Еще одна мелочь… - Страница 185
- Поддержка глоссария - Страница 186
- Прошу слова… - Страница 187
- 37Разгадка невероятных головоломок - Страница 188
- Степени свободы - Страница 189
- Есть более простой способ! - Страница 190
- 38Чувство готовности - Страница 191
- Здравое суждение или промедление? - Страница 192
- 39Западня со стороны требований - Страница 193
- 40Круги и стрелки - Страница 195
- Какова отдача от методов? - Страница 196
- Нужно ли использовать формальные методы? - Страница 197
- Глава 8Прагматические проекты - Страница 198
- 41Команды прагматиков - Страница 199
- Никаких разбитых окон - Страница 200
- Сварившиеся лягушки - Страница 201
- Общайтесь - Страница 202
- Не повторяйте самого себя - Страница 203
- Ортогональность - Страница 204
- Автоматизация - Страница 206
- Чувствуйте момент, когда нужно остановиться - Страница 207
- 42Вездесущая автоматизация - Страница 208
- Все в автоматическом режиме - Страница 209
- Компилирование проекта - Страница 210
- Автоматизация процесса сборки - Страница 211
- Автоматические административные процедуры - Страница 212
- Дети сапожника - Страница 213
- 43Безжалостное тестирование - Страница 214
- Что тестировать - Страница 215
- Как проводить тестирование - Страница 217
- Когда тестировать - Страница 220
- Кольцо сжимается - Страница 221
- 44Все эти сочинения - Страница 222
- Комментарии в программе - Страница 223
- Исполняемые документы - Страница 225
- Технические писатели - Страница 226
- Печатать документ или ткать его на холсте? - Страница 227
- Языки разметки - Страница 228
- 45Большие надежды - Страница 229
- Передача надежд - Страница 230
- Небольшой довесок - Страница 231
- 46Гордость и предубеждение - Страница 232
- Приложение АИнформационные ресурсы - Страница 233
- Профессиональные общества - Страница 234
- Собираем библиотеку - Страница 235
- Интернет-ресурсы - Страница 237
- Библиография - Страница 242
- Приложение ВОтветы к упражнениям - Страница 244
Что тестировать
Существует несколько видов процедур тестирования программного обеспечения, которые вам приходится выполнять:
• Модульное тестирование
• Комплексное тестирование
• Подтверждение правильности и верификация
• Тестирование в условиях нехватки ресурсов, ошибки и их исправление
• Тестирование производительности
• Тестирование удобства использования
Этот перечень ни в коей мере не является полным, и в некоторых специализированных проектах потребуются другие виды процедур тестирования. Но это дает нам хорошую отправную точку.
Модульное тестированиеМодульный тест представляет собой программу, занимающуюся тестированием некоего модуля. Эта тема освещена в разделе "Программа, которую легко тестировать". Модульное тестирование является основой для всех других видов тестирования, которые обсуждаются в данном разделе. Если части не работают по отдельности, то скорее всего они не будут хорошо работать и вместе. Все используемые модули обязаны пройти собственное модульное тестирование перед тем как продолжать работу.
Как только все соответствующие модули прошли индивидуальное тестирование, вы готовы к новому этапу. Вам придется проверить, как модули используют друг друга и взаимодействуют между собой по всей системе.
Комплексное тестированиеКомплексное тестирование показывает, что основные подсистемы, из которых состоит проект, работают и нормально взаимодействуют друг с другом. При наличии удачных и хорошо проверенных контрактов обнаружить любые проблемы интеграции не составляет особого труда. В противном случае интеграция становится благодатной почвой для размножения дефектов. Фактически в многих случаях она является единственным и самым крупным источником дефектов в системе.
В реальности комплексное тестирование является продолжением модульного тестирования, описанного выше, с той лишь разницей, что теперь вы проверяете, как целые подсистемы соблюдают свои контракты.
Подтверждение правильности и верификацияКак только в вашем распоряжении появляется рабочий пользовательский интерфейс или прототип, вам приходится отвечать на существенный вопрос: пользователи сказали вам, что они хотели бы увидеть, но то ли это на самом деле?
Отвечает ли продукт функциональным требованиям системы? Это также нуждается в тестировании. Бездефектная система, которая отвечает на неправильные вопросы, не приносит пользы. Необходимо осознавать схемы доступа конечного пользователя и их отличие от тестовых данных разработчика (в качестве примера обратите внимание на историю о рисовании кистью из раздела "Отладка")
Тестирование в условиях нехватки ресурсов, ошибки и их исправление.Теперь вы понимаете, что система будет вести себя корректно в идеальных условиях, вам придется испытать, как она ведет себя в реальных условиях. В реальном мире ресурсы ваших программ не безграничны – они исчерпываются. Ваша программа может столкнуться со следующими ограничениями:
• Объем памяти
• Объем дискового пространства
• Мощность процессора
• Тактовая частота
• Скорость дискового обмена
• Пропускная способность сети
• Цветовая палитра
• Разрешающая способность экрана
Вы можете реально проверить нехватку дискового пространства или объема памяти, но как часто вы проверяете другие ограничения? Будет ли ваше приложение работать на экране с разрешением 640*480 и 256 цветами? Может ли оно выполняться на экране с разрешением 1600*1280 с 24-битным цветом и при этом не быть размером с почтовую марку? Завершится ли пакетное задание до момента запуска программы архивации?
Вы можете обнаружить наличие ограничений в операционной среде, таких как спецификация видеоподсистемы, и приспособиться к ним соответствующим образом. Однако не все сбои можно восстановить. Если программа обнаруживает нехватку памяти, то вы ограничены в своих действиях: вам не хватит ресурсов, чтобы завершить программу способом, отличным от аварийного завершения.
Когда система выходит из строя [50], будет ли это делаться изящно? Постарается ли она сделать лучшее, на что она способна в данной ситуации, – сохранить свое состояние и предотвратить потерю данных? Или она выдаст пользователю сообщения типа "Общая ошибка защиты" или "core dump" (отключение ядра системы)?
Тестирование производительностиТестирование производительности, нагрузочное тестирование или тестирование в реальных условиях эксплуатации может также оказаться важным аспектом проекта.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253