- Предпосылки возникновения методологии структурного программирования. Основные принципы структурного программирования. Теорема Бёма-Якопини.
|
- Структурное программирование. Проектирование сверху вниз. Модульное программирование. Структурное кодирование.
|
- Правила присваивания содержательных имен переменным, функциям и другим программным единицам.
|
- Функции. Компактность. Правило одной операции. Опасность смешения уровней абстракции.
|
- Функции. Правило понижения. Паттерн «Абстрактная фабрика» и использование оператора switch.
|
- Аргументы функций. Приемлемое количество и качество аргументов. Побочные эффекты в функциях. Примеры.
|
- Комментарии. Основные правила написания хороших комментариев. Комментарии TODO.
|
- Комментарии. Основные признаки плохих комментариев. Примеры.
|
- Форматирование исходного кода. Цель форматирования. Вертикальное разделение концепций, вертикальное сжатие. Вертикальное расстояние.
|
- Форматирование исходного кода. Горизонтальное форматирование. Горизонтальное разделение и сжатие. Отступы.
|
- Объекты и структуры данных. Отличия процедурного и объектно-ориентированного кода. Случаи применения.
|
- Закон Деметры. Опасность построения гибридов объектов и структур данных. Объекты передачи данных и активные записи.
|
- Обработка ошибок. Исключения и коды ошибок. Использование паттерна «Особый случай».
|
- Использование стороннего программного кода. Учебные тесты как инструмент исследования и анализа граничного кода.
|
- Проблемы использования стороннего программного кода. Применение паттерна «Адаптер» для организации взаимодействия с недоступным кодом.
|
- Класс. Размеры класса. Принцип единой ответственности (SRP).
|
Понятие связности класса. Влияние связности на размер классов.
|
- Структурирование класса с учетом его изменений. Принципы проектирования классов в ООП.
|
- Понятие эффективности программы. Выбор между эффективностью и удобочитаемостью. Оптимизирующие компиляторы.
|
- Методология разработки через тестирование (TDD). Последовательность этапов разработки при использовании методологии TDD. Три закона TDD.
|
- Тестирование как важный этап процесса разработки ПО. Чистота тестов. Тесты как средство обеспечения изменений. Правило «одна концепция на тест».
|
- Экономические аспекты процесса тестирования. Тестирование методами «черного» и «белого» ящика. Невозможность исчерпывающего тестирования.
|
- Основные принципы тестирования программного обеспечения.
|
- Понятие отладки. Отличие между отладкой и тестированием. Средства отладки. Защитное программирование.
|
- Понятие отладки. Основные принципы отладки. Принципы локализации ошибок. Принципы устранения ошибок.
|
- Понятие отладки. Основные подходы к отладке программ. Методы «грубой силы», индуктивная отладка, дедуктивная отладка, обратная трассировка, отладка тестированием.
|
- Проблема ограниченности вычислительных систем. Возможности преодоления некоторых типов ограничений.
|
- Понятие правильности программ. Доказательство правильности программ.
|
- Типы разложения вычислений (сочленение, выбор, повторение).
|
- Неоднозначность определения программы. Проблема сравнения программ.
|
- Процесс поэтапного составления программ (на примере).
|
- Понятие рефакторинга. Рефакторинги «Согласование различий», «Миграция данных», «Выделение метода».
|
- Понятие рефакторинга. Рефакторинги «Встраивание метода», «Выделение интерфейса», «Перемещение метода».
|
- Понятие рефакторинга. Рефакторинги «Метод в объект», «Добавление параметра», «Параметр метода в параметр конструктора».
|