
- •1. Предпосылки возникновения методологии структурного программирования. Основные принципы структурного программирования. Теорема Бёма-Якопини.
- •2. Структурное программирование. Проектирование сверху вниз. Модульное программирование. Структурное кодирование
- •4. Функции. Компактность. Правило одной операции. Опасность смешения уровней абстракции
- •5. Функции. Правило понижения. Паттерн «Абстрактная фабрика» и использование оператора switch
- •6. Аргументы функций. Приемлемое количество и качество аргументов. Побочные эффекты в функциях. Примеры
- •7. Комментарии. Основные правила написания хороших комментариев. Комментарии todo.
- •8. Комментарии. Основные признаки плохих комментариев. Примеры.
- •9. Форматирование исходного кода. Цель форматирования. Вертикальное разделение концепций, вертикальное сжатие. Вертикальное расстояние
- •10. Форматирование исходного кода. Цель форматирования. Горизонтальное форматирование. Горизонтальное разделение и сжатие. Отступы
- •11. Объекты и структуры данных. Отличия процедурного и объектно-ориентированного кода. Случаи применения
- •12. Закон Деметры. Опасность построения гибридов объектов и структур данных. Объекты передачи данных и активные записи
- •13. Обработка ошибок. Исключения и коды ошибок. Использование паттерна «Особый случай».
- •14. Использование стороннего программного кода. Учебные тесты как инструмент исследования и анализа граничного кода.
- •15. Проблемы использования стороннего программного кода. Применение паттерна «Адаптер» для организации взаимодействия с недоступным кодом.
- •16. Класс. Размеры класса. Принцип единой ответственности (srp).
- •17. Понятие связности класса. Влияние связности на размер классов.
- •18. Структурирование класса с учетом его изменений. Принципы проектирования классов в ооп.
- •19. Понятие эффективности программы. Выбор между эффективностью и удобочитаемостью. Оптимизирующие компиляторы.
- •20. Методология разработки через тестирование (tdd). Последовательность этапов разработки при использовании методологии tdd. Три закона tdd.
- •21. Тестирование как важный этап процесса разработки по. Чистота тестов. Тесты как средство обеспечения изменений. Правило «одна концепция на тест».
- •22. Экономические аспекты процесса тестирования. Тестирование методами «черного» и «белого» ящика. Невозможность исчерпывающего тестирования.
- •23. Основные принципы тестирования программного обеспечения.
- •24. Понятие отладки. Отличие между отладкой и тестированием. Средства отладки. Защитное программирование
- •25. Понятие отладки. Основные принципы отладки. Принципы локализации ошибок. Принципы устранения ошибок.
- •26. Понятие отладки. Основные подходы к отладке программ. Методы «грубой силы», индуктивная отладка, дедуктивная отладка, обратная трассировка, отладка тестированием.
- •27. Проблема ограниченности вычислительных систем. Возможности преодоления некоторых типов ограничений.
- •28. Понятие правильности программ. Доказательство правильности программ. Правильность программ
- •29. Типы разложения вычислений (сочленение, выбор, повторение).
- •If условие then оператор 1 else оператор 2
- •30. Неоднозначность определения программы. Проблема сравнения программ.
- •32. Понятие рефакторинга. Рефакторинги «Согласование различий», «Миграция данных», «Выделение метода».
- •33. Понятие рефакторинга. Рефакторинги «Встраивание метода», «Выделение интерфейса», «Перемещение метода».
- •Inline method (встраивание метода)
- •34. Понятие рефакторинга. Рефакторинги «Метод в объект», «Добавление параметра», «Параметр метода в параметр конструктора».
25. Понятие отладки. Основные принципы отладки. Принципы локализации ошибок. Принципы устранения ошибок.
ОТЛАДКА ПРОГРАММ
Мало в какой области деятельности имеется столько возможностей для ошибок, как в программировании. Искусство локализации таких ошибок, когда факт их существования установлен, носит название отладки. Таким образом, отладка программы предполагает обязательное наличие той или иной ошибки, в противном случае, мы имеем дело с тестированием.
ПРИНЦИПЫ ОТЛАДКИ
Здесь представлены две группы принципов, поскольку процесс отладки складывается из двух этапов (определения местонахождения ошибки и последующего ее исправления)
ПРИНЦИПЫ ЛОКАЛИЗАЦИИ ОШИБОК.
Думайте.
В предыдущих разделах подразумевалось, что отладка представляет собой процесс решения задач. Наиболее эффективный метод отладки заключается в анализе информации, связанной с симптомами ошибок. Для ее эффективного проведения специалист должен обладать способностью точно определять большинство ошибок без использования ЭВМ
Если вы зашли в тупик, отложите рассмотрение программы.
Наше подсознание является мощным механизмом решения проблем. То, что мы часто приписываем вдохновению, оказывается всего лишь выполненной подсознанием работой по решению задачи, тогда как наша сознательная деятельность в это время связана с чем-нибудь другим, например с едой, прогулкой или просмотром кинофильма. Если вы не можете локализовать ошибку в приемлемые сроки (предположительно за 30 минут для небольших программ и за несколько часов для больших), прекратите поиски и займитесь каким-нибудь другим делом, так как эффективность вашей работы, во всяком случае, значительно снизится. Проблему следует «забыть» до тех пор, пока вы либо подсознательно не найдете ее решения, либо отдохнете и будете готовы вновь рассмотреть симптомы ошибки.
Если вы зашли в тупик, изложите задачу кому-нибудь еще.
Сделав это, вы, вероятно, обнаружите что-то новое.
Часто случается так, что, просто пересказав задачу хорошему слушателю, вы вдруг найдете решение без какой-либо помощи с его стороны.
Используйте средства отладки только как вспомогательные.
Не применяйте эти средства вместо того, чтобы обдумывать задачу Как отмечалось ранее в настоящей главе, такие средства, как дампы и трассы, отражают случайный подход к отладке. Эксперименты показали, что программисты, избегающие применения средств отладки, даже при отлаживании незнакомых им программ выполняют ее лучше, чем те, кто пользуется этими средствами [3]
Избегайте экспериментирования Пользуйтесь им только как последним средством.
Наиболее общей ошибкой, которую допускают начинающие программисты, занимающиеся отладкой, является попытка решить задачу посредством внесения в программу экспериментальных изменений («Я не знаю, что неправильно, но я изменю этот оператор DO и посмотрю что получится».) Этот абсолютно неверный подход не может даже рассматриваться как отладка; он основан на случайности. Экспериментирование не только уменьшает вероятность успеха, но часто и усложняет задачу, по скольку при этом в программу вносятся новые ошибки.
ПРИНЦИПЫ ИСПРАВЛЕНИЯ ОШИБОК.
Там, где есть одна ошибка, вероятно, есть и другие
Это положение повторяет принцип гл. 2, который утверждает, что если в части программы обнаружена ошибка, то велика вероятность существования в этой же части и другой ошибки. Другими словами, ошибки имеют тенденцию группироваться. При исправлении ошибки проверьте ее непосредственное окружение: нет ли здесь каких-нибудь подозрительных симптомов. Находите ошибку, а не ее симптом.
Другим общим недостатком является устранение симптомов ошибки, а не ее самой Если предполагаемое изменение устраняет не все симптомы ошибки, то она не может быть полностью выявлена
Вероятность правильного нахождения ошибки не равна 100%.
С этим, безусловно, соглашаются, но в процессе исправления ошибки часто наблюдается иная реакция (например, «да, в большинстве случаев это справедливо но данная корректировка столь незначительна, что она правильна»). Никогда нельзя предполагать, что текст, который включен в программу для исправления ошибки, правилен. Можно утверждать, что корректировки более склонны к ошибкам, чем исходный текст программы. Подразумевается, что корректирующая программа должна тестироваться, возможно, даже более тщательно, чем исходная.
Вероятность правильного нахождения ошибки уменьшается с увеличением объема программы.
Это утверждение формулируется по-разному. Эксперименты показали, что отношение числа неправильно найденных ошибок к числу первоначально выявленных увеличивается для больших программ. В большой про грамме, рассчитанной на широкое применение, каждая шестая вновь обнаруженная ошибка может быть допущена при предшествующем внесении изменений в программу.
Остерегайтесь внесения при корректировке новой ошибки.
Необходимо рассматривать не только неверные корректировки, но и те, которые кажутся верными, однако имеют нежелательный побочный эффект и таким образом приводят к новым ошибкам. Другими словами, существует вероятность не только того, что ошибка будет обнаружена неверно, но и того, что ее исправление приведет к новой ошибке. Поэтому после проведения корректировки должно быть выполнено повторное регрессионное тестирование, позволяющее установить, не внесе на ли новая ошибка.
Процесс исправления ошибки должен временно возвращать разработчика на этап проектирования.
Необходимо понимать, что исправление ошибок является одной из форм проектирования программы. Здравый смысл подсказывает нам, что все процедуры, методики й формализмы, использовавшиеся в процессе проектирования, должны применяться и для исправления ошибок, поскольку по своей природе корректировки склонны к ошибкам Например, если при организации процесса проектирования предусматривались проверки исходного текста, то вдвойне важно, чтобы они использовались m после исправления ошибок.
Изменяйте исходный текст, а не объектный код
При отладке больших систем, особенно написанных на языке Ассемблера, имеется тенденция исправлять ошибку путем внесения изменений непосредственно в объект ный код (с помощью программы типа «superzap») с тем, чтобы изменить исходный текст программы в дальнейшем (т. е. «когда будет время»). Такой метод обычно является симптомом того, что применялась «отладка посредством экспериментирования». Кроме того, объектный код и исходный текст программы в этом случае не идентичны, следовательно, ошибка может появиться вновь при повторной компиляции или ассемблировании программы. Эта практика свидетельствует о непрофессиональном подходе к отладке.