Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kernigan_B__Payk_R_Praktika_programmirovania.pdf
Скачиваний:
76
Добавлен:
18.03.2016
Размер:
2.53 Mб
Скачать

Приложение: свод правил

Стиль

Интерфейсы

Отладка

Тестирование

Производительность

Переносимость

Каждая открытая мной истина становилась правилом, которое служило мне в дальнейшем для поиска 'других истин.

Рене Декарт. Рассуждение о методе

Во многих главах были выделены правила или какие-то основные моменты, подводящие итог обсуждению. Для удобства поиска правила собраны здесь воедино. Не забывайте, что в соответствующих частях книги объясняется назначение и способы применения этих правил.

Стиль

Используйте осмысленные имена для глобальных переменных и короткие — для локальных.

Будьте последовательны.

Используйте активные имена для функций. Будьте точны.

Форматируйте код, подчеркивая его структуру. Используйте естественную форму выражений. Используйте скобки для устранения неясностей. Разбивайте сложные выражения.

Будьте проще.

Будьте осторожны с побочными эффектами.

Будьте последовательны в применении отступов и фигурных скобок. Используйте идиомы для единства стиля.

Используйте else-if для многовариантных ветвлений. Избегайте макрофункций.

Заключайте тело макроса и аргументы в скобки. Давайте имена загадочным числам.

Определяйте числа как константы, а не как макросы. Используйте символьные константы, а не целые.

Используйте средства языка для определения размера объекта. Не пишите об очевидном.

Комментируйте функции и глобальные данные. Не комментируйте плохой код, а перепишите его. Не противоречьте коду.

Вносите ясность, а не сумятицу.

Интерфейсы

Прячьте детали реализации.

Ограничьтесь небольшим набором независимых примитивов.

Не делайте ничего "за спиной" у пользователя. Всегда делайте одинаковое одинаково.

Высвобождайте ресурсы на том же уровне, где выделяли их. Обнаруживайте ошибки на низком уровне, обрабатывайте на высоком.

Используйте исключения только для исключительных ситуаций.

Отладка

Ищите знакомые ситуации.

Проверьте самое последнее изменение. Не повторяйте дважды одну и ту же ошибку. Не откладывайте отладку на потом. Пользуйтесь стеком вызова.

Читайте код перед тем, как исправлять. Объясните свой код кому-либо еще. Сделайте ошибку воспроизводимой. Разделяй и властвуй.

Изучайте нумерологию ошибок.

Выводите информацию, локализующую место ошибки. Пишите код с самоконтролем.

Ведите журнальный файл. Постройте график. Используйте инструменты. Ведите записи.

Тестирование

Тестируйте граничные условия кода. Тестируйте пред- и постусловия. Используйте утверждения.

Используйте подход защитного программирования. Проверяйте коды возврата функций.

Тестируйте по возрастающей. Тестируйте сначала простые блоки.

Четко опредеоите, чего вы хотите на выходе текста. Проверяйте свойства сохраности данных. Сравните независимые версии.

Оценивайте охват тестов. Автоматизируйте возвратное тестирование. Создайте замкнутые тесты.

Производительность

Автоматизируйте замеры времени. Используйте профилировщик. Концентрируйтесь на критических местах. Постройте график.

Улучшайте алгоритм и структуру данных. Используйте оптимизацию компилятора. Выполните тонкую настройку кода.

Не оптимизируйте то, что не имеет значения. Объединяйте общие выражения.

Замените дорогостоящие операции на более дешевые. Избавьтесь от циклов или упростите их.

Кэшируйте часто используемые значения. Напишите специальную функцию захвата памяти (аллокатор).

Буферизуйте ввод и вывод.

Специальные случаи обрабатывайте отдельно. Используйте предварительное вычисление результатов. Используйте приближенные значения.

Перепишите код на языке более низкого уровня. Используйте минимально возможный тип данных. Не храните то, что можете без труда вычислить.

Переносимость

Придерживайтесь стандарта. Следуйте основному руслу.

Избегайте неоднозначных конструкций языка. Попробуйте несколько компиляторов. Используйте стандартные библиотеки. Используйте только то, что доступно везде. Избегайте условной компиляции.

Выносите системные различия в отдельные файлы. Прячьте системные различия за интерфейсами. Используйте текст для обмена данными. Используйте при обмене данными фиксированный порядок байтов.

При изменении спецификации изменяйте и имя. Поддерживайте совместимость с существующими программами и данными.

Не рассчитывайте на ASCII.

Не ориентируйтесь только на английский язык.