SlideShare une entreprise Scribd logo
1  sur  34
Пара слов о
программировании
     Тема № 3
Стиль программирования
• Единообразный подход к именованию
  переменных и методов
• Единообразное оформление текста
• Грамотная декомпозиция
• Применение паттернов
• Комментирование и
  самодокументируемость
Стиль программирования
выражает ваше отношение к
 коллегам и пользователям
Читаем
 Стив Макконелл
 Совершенный код
Стив Макконелл
       Автор книг:
       «Совершенный код»
       «Сколько стоит
         программный проект»
       «Руководство по
         выживанию в
         программных
         проектах»
       В 1998 признан одним из
         трех наиболее
         влиятельных людей
         отрасли.
Пишите код так, как будто
сопровождать его будет склонный
к насилию психопат, который
знает, где вы живете

          Мартин Голдинг, в изложении
                     Стива Макконела
Стандарты оформления кода
• Корпоративные стандарты – основа
  командной разработки
• Общепринятые стандарты – видны в стиле
  оформления стандартных и коммерческих
  библиотек
• Используйте встроенные в IDE средства
  форматирования
Стандарты должны описывать
• Правила именования идентификаторов
• Использование скобок
• Обязательные случаи использования
  комментариев
• Требования к декомпозиции программы
• Ограничения на неочевидные конструкции
• Ограничения на свободу выбора
  альтернативных конструкций
Если в вашей компании нет
стандарта – создайте его сами на
      основе вашего стиля.

    Получите очки в карму.
Рефакторинг
Рефакторинг – процесс изменения
  внутренней структуры программы, не
  затрагивающий её внешнего поведения и
  имеющий целью облегчить понимание её
  работы
Рефакторинг
• Причины рефакторинга
  – Борьба с быдлокодом
  – Отложенные улучшения
  – Изменение взгляда на архитектуру системы
  – Обеспечение дальнейшего развития системы
• Рефакторинг базируется на конечном числе
  стандартных приемов и шаблонов, которые
  надо знать.
Рефакторинг и тесты
• Успех рефакторинга критически зависит от
  покрытия системы тестами
• До начала рефакторинга продумайте
  стратегию тестирования методом «черного
  ящика»
• Реализуйте необходимые тесты, если их
  еще нет
• Не снижайте стандарты качества в процессе
  рефакторинга
Читаем
 Мартин Фаулер
 Кент Бек и др.
 Рефакторинг.
  Улучшение
  существующего
  кода.
Мартин Фаулер
       Автор большого
         количества паттернов
         проектирования, один
         из соавторов UML и XP.
         Вероятно, один из
         крупнейших
         специалистов
         практиков в области
         Software Engineering
         нашего времени.
Читаем
 Книги серии
  «Мартин Фаулер
  рекомендует»
Паттерны (шаблоны)
             проектирования
• Шаблон проектирования, или паттерн (англ. design
  pattern) — повторимая архитектурная конструкция,
  представляющая собой решение проблемы
  проектирования в рамках некоторого часто
  возникающего контекста.
• Шаблон не является законченным образцом кода -
  это лишь пример решения типичной задачи.
• «Низкоуровневые» шаблоны, учитывающие
  специфику конкретного языка программирования,
  называются идиомами.
• На наивысшем уровне определяются
  архитектурные шаблоны.
История появления паттернов
• В 1970-е годы архитектор Кристофер Александр составил набор
  шаблонов проектирования.
• В 1987 году Кент Бек и Уорд Каннигем взяли идеи Александра и
  разработали шаблоны применительно к разработке программного
  обеспечения для разработки графических оболочек на языке
  Smalltalk.
• В 1988 году Эрих Гамма начал писать докторскую диссертацию при
  цюрихском университете об общей переносимости этой методики на
  разработку программ.
• В 1991 году Эрих Гамма заканчивает свою докторскую диссертацию и
  переезжает в США, где в сотрудничестве с Ричардом Хелмом,
  Ральфом Джонсоном и Джоном Влиссидсом публикует книгу Design
  Patterns — Elements of Reusable Object-Oriented Software. В этой книге
  описаны 23 шаблона проектирования.
Читаем
 Э. Гамма, Р. Халм, Р.
   Джонсон, Д.
   Влиссидис
 «Приемы объектно-
   ориентированного
   проектирования.
   Паттерны
   проектирования»
Читаем
 Э. Гамма, Р. Халм, Р.
   Джонсон, Д.
   Влиссидис
 «Приемы объектно-
   ориентированного
   проектирования.
   Паттерны
   проектирования»
Читаем
 М. Фаулер и др.
 «Шаблоны
  корпоративных
  приложений»
Читаем
 М. Фаулер и др.
 «Архитектура
  корпоративных
  программных
  приложений»
Пример: Singleton + Lazy Init
public class SomeObject {
  private static SomeObject singleInstance = null;

    public static SomeObject getObject() {
       if (singleInstance == null) {
               singleInstance = new SomeObject();
       }
       return singleInstance;
    }
}
Эволюция паттернов
•   Magic Button
•   Document – View
•   Model – View – Controller
•   Model – View - ViewModel
Антипаттерны
• Анти-паттерны (anti-patterns), также
  известные как ловушки (pitfalls) — это
  классы наиболее часто внедряемых плохих
  решений проблем.
• Они изучаются, как категория, в случае
  когда их хотят избежать в будущем
• Некоторые отдельные случаи их могут быть
  распознаны при изучении неработающих
  или проблемных систем.
Примеры антипаттернов
•   Волшебная кнопка (Magic Button)
•   Копипастинг
•   Жесткое кодирование (хардкод)
•   Таинственный код
•   Спагетти-код
•   Инверсия абстракции
•   Божественный объект (BLOB)
•   Золушкина туфелька
•   Висящие концы
Читаем




ru.wikipedia.org/wiki/Антипаттерн
От хорошего к лучшему мимо
       антипаттернов
Модульное (unit) тестирование и
               TDD
• Написание теста как спецификация
  будущего поведения класса
• При написании теста определяется
  интерфейс класса
• Реализация выполняется в виде заглушек-
  пустых методов
• Тесты изначально «красные» («падают»)
• Разработка выполняется, пока все тесты не
  станут «зелеными»
Библиотеки xUnit
• Метод Assert
• Система хранения эталонов и сравнения с
  эталонами
• Система вызова тестов
Профилирование и оптимизация
• Оптимизация – постоянная задача
• Следования паттернам помогает сразу
  делать достаточно оптимальный код
• Оптимизация производится на базе
  измерений в целевых условиях
• Ускоряйте самое медленное
• Вовремя останавливайтесь
Базовые приемы оптимизации
• Размен времени на память
  – Дублирование информации
• Предварительная подготовка
  – Замена поиска сортировкой
• Отказ от лишней работы
• Сколачивание в пакеты
Проектная документация
•   Совершенный код
•   Сознательное комментирование
•   Генерируемая документация
•   Метафоры
Инструментарий
• Управление версиями кода
   – SourceSafe, SVN, Git
• Ticket tracker
   – BugZilla, Atlassian JIRA, Mantis
• Портал команды
   – RedMine, Atlassian Confluence, wiki-движки
• Автоматизированное тестирование
   – TestComplete
• Непрерывная интеграция
Вопросы для реферата
• Есть ли у Вас стиль программирования?
  Докажите свое утверждение
• Если бы Вы писали стандарт
  программирования для своей команды, что
  было бы там первым и главным?
• Самый вредный антипаттерн
• Был ли у вас пример успешной оптимизации
  кода? Приведите его. Это был уникальный
  прием или реализация паттерна?

Contenu connexe

Tendances

CodeFest 2010. Платов А. — Производство ПО для разработчиков
CodeFest 2010. Платов А. — Производство ПО для разработчиковCodeFest 2010. Платов А. — Производство ПО для разработчиков
CodeFest 2010. Платов А. — Производство ПО для разработчиковCodeFest
 
Дмитрий Лобасев - Что отличает крутую команду от крутой Agile-команды
Дмитрий Лобасев - Что отличает крутую команду от крутой Agile-командыДмитрий Лобасев - Что отличает крутую команду от крутой Agile-команды
Дмитрий Лобасев - Что отличает крутую команду от крутой Agile-командыITSpringBY
 
Cемь смертных грехов в управлении проектами
Cемь смертных грехов в управлении проектамиCемь смертных грехов в управлении проектами
Cемь смертных грехов в управлении проектамиBoris Volfson
 
Александр Сербул. Прикладное XP в «1С-Битрикс»: как развивать продукт более 1...
Александр Сербул. Прикладное XP в «1С-Битрикс»: как развивать продукт более 1...Александр Сербул. Прикладное XP в «1С-Битрикс»: как развивать продукт более 1...
Александр Сербул. Прикладное XP в «1С-Битрикс»: как развивать продукт более 1...ScrumTrek
 
карта It профессий, точки входа, первые шаги
карта It профессий, точки входа, первые шагикарта It профессий, точки входа, первые шаги
карта It профессий, точки входа, первые шагиCOMAQA.BY
 
Как мы делаем Banki.ru
Как мы делаем Banki.ruКак мы делаем Banki.ru
Как мы делаем Banki.ruRoman Ivliev
 
Code review как средство обеспечения качества программного обеспечения
Code review как средство обеспечения качества программного обеспеченияCode review как средство обеспечения качества программного обеспечения
Code review как средство обеспечения качества программного обеспеченияSQALab
 
DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...
DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...
DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...Dakiry
 
CodeFest 2011. Федянина С. — Эффективная работа распределенной команды в Soft...
CodeFest 2011. Федянина С. — Эффективная работа распределенной команды в Soft...CodeFest 2011. Федянина С. — Эффективная работа распределенной команды в Soft...
CodeFest 2011. Федянина С. — Эффективная работа распределенной команды в Soft...CodeFest
 
многогранная профессия тестировщика глазами с++ разработчика в примерах
многогранная профессия тестировщика глазами с++ разработчика в примерахмногогранная профессия тестировщика глазами с++ разработчика в примерах
многогранная профессия тестировщика глазами с++ разработчика в примерахCOMAQA.BY
 
Процесс тестирования в распределенной команде
Процесс тестирования в распределенной командеПроцесс тестирования в распределенной команде
Процесс тестирования в распределенной командеSvetlana Fedyanina
 
Бумажное прототипирование
Бумажное прототипированиеБумажное прототипирование
Бумажное прототипированиеMaxim Gaponov
 
"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосновать"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосноватьMaksym Bezuglyi
 
О фреймворках Backend conf 2016
О фреймворках Backend conf 2016О фреймворках Backend conf 2016
О фреймворках Backend conf 2016Roman Ivliev
 
карта IT профессий
карта IT профессийкарта IT профессий
карта IT профессийCOMAQA.BY
 
Всему своё время Highload Junior 2016
Всему своё время   Highload Junior  2016Всему своё время   Highload Junior  2016
Всему своё время Highload Junior 2016Roman Ivliev
 
HR-ам об IT-специалистах
HR-ам об IT-специалистахHR-ам об IT-специалистах
HR-ам об IT-специалистахMargarita Fatina
 
Разработка современной электроники (семинар первый)
Разработка современной электроники (семинар первый)Разработка современной электроники (семинар первый)
Разработка современной электроники (семинар первый)Ingria. Technopark St. Petersburg
 

Tendances (20)

CodeFest 2010. Платов А. — Производство ПО для разработчиков
CodeFest 2010. Платов А. — Производство ПО для разработчиковCodeFest 2010. Платов А. — Производство ПО для разработчиков
CodeFest 2010. Платов А. — Производство ПО для разработчиков
 
Дмитрий Лобасев - Что отличает крутую команду от крутой Agile-команды
Дмитрий Лобасев - Что отличает крутую команду от крутой Agile-командыДмитрий Лобасев - Что отличает крутую команду от крутой Agile-команды
Дмитрий Лобасев - Что отличает крутую команду от крутой Agile-команды
 
Cемь смертных грехов в управлении проектами
Cемь смертных грехов в управлении проектамиCемь смертных грехов в управлении проектами
Cемь смертных грехов в управлении проектами
 
Александр Сербул. Прикладное XP в «1С-Битрикс»: как развивать продукт более 1...
Александр Сербул. Прикладное XP в «1С-Битрикс»: как развивать продукт более 1...Александр Сербул. Прикладное XP в «1С-Битрикс»: как развивать продукт более 1...
Александр Сербул. Прикладное XP в «1С-Битрикс»: как развивать продукт более 1...
 
карта It профессий, точки входа, первые шаги
карта It профессий, точки входа, первые шагикарта It профессий, точки входа, первые шаги
карта It профессий, точки входа, первые шаги
 
Как мы делаем Banki.ru
Как мы делаем Banki.ruКак мы делаем Banki.ru
Как мы делаем Banki.ru
 
Code review как средство обеспечения качества программного обеспечения
Code review как средство обеспечения качества программного обеспеченияCode review как средство обеспечения качества программного обеспечения
Code review как средство обеспечения качества программного обеспечения
 
7 technology inno
7 technology inno7 technology inno
7 technology inno
 
DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...
DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...
DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...
 
CodeFest 2011. Федянина С. — Эффективная работа распределенной команды в Soft...
CodeFest 2011. Федянина С. — Эффективная работа распределенной команды в Soft...CodeFest 2011. Федянина С. — Эффективная работа распределенной команды в Soft...
CodeFest 2011. Федянина С. — Эффективная работа распределенной команды в Soft...
 
многогранная профессия тестировщика глазами с++ разработчика в примерах
многогранная профессия тестировщика глазами с++ разработчика в примерахмногогранная профессия тестировщика глазами с++ разработчика в примерах
многогранная профессия тестировщика глазами с++ разработчика в примерах
 
Процесс тестирования в распределенной команде
Процесс тестирования в распределенной командеПроцесс тестирования в распределенной команде
Процесс тестирования в распределенной команде
 
Бумажное прототипирование
Бумажное прототипированиеБумажное прототипирование
Бумажное прототипирование
 
"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосновать"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосновать
 
О фреймворках Backend conf 2016
О фреймворках Backend conf 2016О фреймворках Backend conf 2016
О фреймворках Backend conf 2016
 
User Story Canvas
User Story CanvasUser Story Canvas
User Story Canvas
 
карта IT профессий
карта IT профессийкарта IT профессий
карта IT профессий
 
Всему своё время Highload Junior 2016
Всему своё время   Highload Junior  2016Всему своё время   Highload Junior  2016
Всему своё время Highload Junior 2016
 
HR-ам об IT-специалистах
HR-ам об IT-специалистахHR-ам об IT-специалистах
HR-ам об IT-специалистах
 
Разработка современной электроники (семинар первый)
Разработка современной электроники (семинар первый)Разработка современной электроники (семинар первый)
Разработка современной электроники (семинар первый)
 

Similaire à Практические аспекты разработки ПО #3

Techtalk#7: Architecture principles by Steve McConnell's book "Code Complete"
Techtalk#7: Architecture principles by Steve McConnell's book "Code Complete"Techtalk#7: Architecture principles by Steve McConnell's book "Code Complete"
Techtalk#7: Architecture principles by Steve McConnell's book "Code Complete"DA-14
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практикеDenis Tuchin
 
Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1Andrii Gakhov
 
06 Архитектура информационных систем. Паттерны и фреймворки
06 Архитектура информационных систем. Паттерны и фреймворки06 Архитектура информационных систем. Паттерны и фреймворки
06 Архитектура информационных систем. Паттерны и фреймворкиEdward Galiaskarov
 
C++ осень 2012 лекция 7
C++ осень 2012 лекция 7C++ осень 2012 лекция 7
C++ осень 2012 лекция 7Technopark
 
Бизнес и системный анализ весна 2013 лекция 5
Бизнес и системный анализ весна 2013 лекция 5Бизнес и системный анализ весна 2013 лекция 5
Бизнес и системный анализ весна 2013 лекция 5Technopark
 
Никулин Павел. Machine learning для текстового анализа
Никулин Павел. Machine learning для текстового анализаНикулин Павел. Machine learning для текстового анализа
Никулин Павел. Machine learning для текстового анализаДмитрий Шахов
 
Solit 2013, Советы по написанию кода: именование, массивы и перечисления, Вор...
Solit 2013, Советы по написанию кода: именование, массивы и перечисления, Вор...Solit 2013, Советы по написанию кода: именование, массивы и перечисления, Вор...
Solit 2013, Советы по написанию кода: именование, массивы и перечисления, Вор...solit
 
Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеSergey Nemchinsky
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Levon Avakyan
 
C++ осень 2012 лекция 12
C++ осень 2012 лекция 12C++ осень 2012 лекция 12
C++ осень 2012 лекция 12Technopark
 
А.Левенчук -- Будущее проектирования
А.Левенчук -- Будущее проектированияА.Левенчук -- Будущее проектирования
А.Левенчук -- Будущее проектированияAnatoly Levenchuk
 
Алексей Солнцев "Компетенции IT-специалиста XXI столетия"
Алексей Солнцев "Компетенции IT-специалиста XXI столетия"Алексей Солнцев "Компетенции IT-специалиста XXI столетия"
Алексей Солнцев "Компетенции IT-специалиста XXI столетия"DataArt
 
Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть...
Промышленная разработка ПО. Лекция 3. Особенности работы программиста.  Часть...Промышленная разработка ПО. Лекция 3. Особенности работы программиста.  Часть...
Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть...Mikhail Payson
 
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLNikolai Kireev
 
Шаблоны проектирования. часть 1
Шаблоны проектирования. часть 1Шаблоны проектирования. часть 1
Шаблоны проектирования. часть 1Alex Mamonchik
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)Alexander Gornik
 
DDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в кодDDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в кодCUSTIS
 
Методологии разработки по
Методологии разработки поМетодологии разработки по
Методологии разработки поJaneKozmina
 

Similaire à Практические аспекты разработки ПО #3 (20)

Techtalk#7: Architecture principles by Steve McConnell's book "Code Complete"
Techtalk#7: Architecture principles by Steve McConnell's book "Code Complete"Techtalk#7: Architecture principles by Steve McConnell's book "Code Complete"
Techtalk#7: Architecture principles by Steve McConnell's book "Code Complete"
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1
 
06 Архитектура информационных систем. Паттерны и фреймворки
06 Архитектура информационных систем. Паттерны и фреймворки06 Архитектура информационных систем. Паттерны и фреймворки
06 Архитектура информационных систем. Паттерны и фреймворки
 
C++ осень 2012 лекция 7
C++ осень 2012 лекция 7C++ осень 2012 лекция 7
C++ осень 2012 лекция 7
 
Бизнес и системный анализ весна 2013 лекция 5
Бизнес и системный анализ весна 2013 лекция 5Бизнес и системный анализ весна 2013 лекция 5
Бизнес и системный анализ весна 2013 лекция 5
 
Никулин Павел. Machine learning для текстового анализа
Никулин Павел. Machine learning для текстового анализаНикулин Павел. Machine learning для текстового анализа
Никулин Павел. Machine learning для текстового анализа
 
Solit 2013, Советы по написанию кода: именование, массивы и перечисления, Вор...
Solit 2013, Советы по написанию кода: именование, массивы и перечисления, Вор...Solit 2013, Советы по написанию кода: именование, массивы и перечисления, Вор...
Solit 2013, Советы по написанию кода: именование, массивы и перечисления, Вор...
 
Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. Введние
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
C++ осень 2012 лекция 12
C++ осень 2012 лекция 12C++ осень 2012 лекция 12
C++ осень 2012 лекция 12
 
А.Левенчук -- Будущее проектирования
А.Левенчук -- Будущее проектированияА.Левенчук -- Будущее проектирования
А.Левенчук -- Будущее проектирования
 
Paper prototyping
Paper prototypingPaper prototyping
Paper prototyping
 
Алексей Солнцев "Компетенции IT-специалиста XXI столетия"
Алексей Солнцев "Компетенции IT-специалиста XXI столетия"Алексей Солнцев "Компетенции IT-специалиста XXI столетия"
Алексей Солнцев "Компетенции IT-специалиста XXI столетия"
 
Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть...
Промышленная разработка ПО. Лекция 3. Особенности работы программиста.  Часть...Промышленная разработка ПО. Лекция 3. Особенности работы программиста.  Часть...
Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть...
 
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UML
 
Шаблоны проектирования. часть 1
Шаблоны проектирования. часть 1Шаблоны проектирования. часть 1
Шаблоны проектирования. часть 1
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
DDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в кодDDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в код
 
Методологии разработки по
Методологии разработки поМетодологии разработки по
Методологии разработки по
 

Практические аспекты разработки ПО #3

  • 2. Стиль программирования • Единообразный подход к именованию переменных и методов • Единообразное оформление текста • Грамотная декомпозиция • Применение паттернов • Комментирование и самодокументируемость
  • 3. Стиль программирования выражает ваше отношение к коллегам и пользователям
  • 4. Читаем Стив Макконелл Совершенный код
  • 5. Стив Макконелл Автор книг: «Совершенный код» «Сколько стоит программный проект» «Руководство по выживанию в программных проектах» В 1998 признан одним из трех наиболее влиятельных людей отрасли.
  • 6. Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете Мартин Голдинг, в изложении Стива Макконела
  • 7. Стандарты оформления кода • Корпоративные стандарты – основа командной разработки • Общепринятые стандарты – видны в стиле оформления стандартных и коммерческих библиотек • Используйте встроенные в IDE средства форматирования
  • 8. Стандарты должны описывать • Правила именования идентификаторов • Использование скобок • Обязательные случаи использования комментариев • Требования к декомпозиции программы • Ограничения на неочевидные конструкции • Ограничения на свободу выбора альтернативных конструкций
  • 9. Если в вашей компании нет стандарта – создайте его сами на основе вашего стиля. Получите очки в карму.
  • 10. Рефакторинг Рефакторинг – процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы
  • 11. Рефакторинг • Причины рефакторинга – Борьба с быдлокодом – Отложенные улучшения – Изменение взгляда на архитектуру системы – Обеспечение дальнейшего развития системы • Рефакторинг базируется на конечном числе стандартных приемов и шаблонов, которые надо знать.
  • 12. Рефакторинг и тесты • Успех рефакторинга критически зависит от покрытия системы тестами • До начала рефакторинга продумайте стратегию тестирования методом «черного ящика» • Реализуйте необходимые тесты, если их еще нет • Не снижайте стандарты качества в процессе рефакторинга
  • 13. Читаем Мартин Фаулер Кент Бек и др. Рефакторинг. Улучшение существующего кода.
  • 14. Мартин Фаулер Автор большого количества паттернов проектирования, один из соавторов UML и XP. Вероятно, один из крупнейших специалистов практиков в области Software Engineering нашего времени.
  • 15. Читаем Книги серии «Мартин Фаулер рекомендует»
  • 16. Паттерны (шаблоны) проектирования • Шаблон проектирования, или паттерн (англ. design pattern) — повторимая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста. • Шаблон не является законченным образцом кода - это лишь пример решения типичной задачи. • «Низкоуровневые» шаблоны, учитывающие специфику конкретного языка программирования, называются идиомами. • На наивысшем уровне определяются архитектурные шаблоны.
  • 17. История появления паттернов • В 1970-е годы архитектор Кристофер Александр составил набор шаблонов проектирования. • В 1987 году Кент Бек и Уорд Каннигем взяли идеи Александра и разработали шаблоны применительно к разработке программного обеспечения для разработки графических оболочек на языке Smalltalk. • В 1988 году Эрих Гамма начал писать докторскую диссертацию при цюрихском университете об общей переносимости этой методики на разработку программ. • В 1991 году Эрих Гамма заканчивает свою докторскую диссертацию и переезжает в США, где в сотрудничестве с Ричардом Хелмом, Ральфом Джонсоном и Джоном Влиссидсом публикует книгу Design Patterns — Elements of Reusable Object-Oriented Software. В этой книге описаны 23 шаблона проектирования.
  • 18. Читаем Э. Гамма, Р. Халм, Р. Джонсон, Д. Влиссидис «Приемы объектно- ориентированного проектирования. Паттерны проектирования»
  • 19. Читаем Э. Гамма, Р. Халм, Р. Джонсон, Д. Влиссидис «Приемы объектно- ориентированного проектирования. Паттерны проектирования»
  • 20. Читаем М. Фаулер и др. «Шаблоны корпоративных приложений»
  • 21. Читаем М. Фаулер и др. «Архитектура корпоративных программных приложений»
  • 22. Пример: Singleton + Lazy Init public class SomeObject { private static SomeObject singleInstance = null; public static SomeObject getObject() { if (singleInstance == null) { singleInstance = new SomeObject(); } return singleInstance; } }
  • 23. Эволюция паттернов • Magic Button • Document – View • Model – View – Controller • Model – View - ViewModel
  • 24. Антипаттерны • Анти-паттерны (anti-patterns), также известные как ловушки (pitfalls) — это классы наиболее часто внедряемых плохих решений проблем. • Они изучаются, как категория, в случае когда их хотят избежать в будущем • Некоторые отдельные случаи их могут быть распознаны при изучении неработающих или проблемных систем.
  • 25. Примеры антипаттернов • Волшебная кнопка (Magic Button) • Копипастинг • Жесткое кодирование (хардкод) • Таинственный код • Спагетти-код • Инверсия абстракции • Божественный объект (BLOB) • Золушкина туфелька • Висящие концы
  • 27. От хорошего к лучшему мимо антипаттернов
  • 28. Модульное (unit) тестирование и TDD • Написание теста как спецификация будущего поведения класса • При написании теста определяется интерфейс класса • Реализация выполняется в виде заглушек- пустых методов • Тесты изначально «красные» («падают») • Разработка выполняется, пока все тесты не станут «зелеными»
  • 29. Библиотеки xUnit • Метод Assert • Система хранения эталонов и сравнения с эталонами • Система вызова тестов
  • 30. Профилирование и оптимизация • Оптимизация – постоянная задача • Следования паттернам помогает сразу делать достаточно оптимальный код • Оптимизация производится на базе измерений в целевых условиях • Ускоряйте самое медленное • Вовремя останавливайтесь
  • 31. Базовые приемы оптимизации • Размен времени на память – Дублирование информации • Предварительная подготовка – Замена поиска сортировкой • Отказ от лишней работы • Сколачивание в пакеты
  • 32. Проектная документация • Совершенный код • Сознательное комментирование • Генерируемая документация • Метафоры
  • 33. Инструментарий • Управление версиями кода – SourceSafe, SVN, Git • Ticket tracker – BugZilla, Atlassian JIRA, Mantis • Портал команды – RedMine, Atlassian Confluence, wiki-движки • Автоматизированное тестирование – TestComplete • Непрерывная интеграция
  • 34. Вопросы для реферата • Есть ли у Вас стиль программирования? Докажите свое утверждение • Если бы Вы писали стандарт программирования для своей команды, что было бы там первым и главным? • Самый вредный антипаттерн • Был ли у вас пример успешной оптимизации кода? Приведите его. Это был уникальный прием или реализация паттерна?