SlideShare una empresa de Scribd logo
1 de 36
Test Driven Development

Anton Katkov
Как прийти к TDD?
• Если тесты – это хорошо, то почему бы не
  создавать их для всего кода?
• Тесты, как спецификация
• TDD - это принцип «разделяй и властвуй»
  для получения «чистого кода, который
  работает»
Алгоритм
1. Быстро создать новый тест
2. Запустить все тесты и обнаружить, что новый
   тест не проходит
3. Внести небольшие изменения в код
4. Снова запустить все тесты и на этот раз
   зафиксировать, что все они успешно
   срабатывают
5. Провести рефакторинг для устранения
   дублирования
6. Goto 1
Рекомендации
• Никогда не нарушайте последовательность шагов
• Начинайте с малого
• Не бойтесь ошибиться (Courage)
• Не беритесь за все подзадачи сразу. Вместо этого
  выписывайте каждую подзадачу на лист бумаги и
  беритесь в один момент времени только за один
  листочек.
• Выбирайте те подзадачи, которые дадут вам
  наиболее полезную информацию
• «Не прерывайте прерывание»
RED-GREEN-REFACTOR МАНТРА
Этапы цикла
Red
• Напишите небольшой тест, который не
  работает или даже не компилируется
Green
• Заставьте тест работать как можно
  быстрее, не задумываясь при этом о
  правильности дизайна и чистоте кода.
  Напишите минимум, который необходим
  для получения зелёной полосы.
Рефакторинг
• Удалите из написанного кода любое
  дублирование, получив чистый код
НАПИСАНИЕ ТЕСТА
Принцип “тестируйте”




Экстремальное программирование - разработка через тестирование
Кент Бек
Принцип: Assert First
• Начните тест с написания того, что вы
  хотите проверить, то есть с assert
Значения для тестов
• Тестовые данные должны быть как можно
  проще, но информативными
• Реалистичные данные:
  – Тестирование систем реального времени с
    использованием цепочек реальных событий
  – Сравнение поведения старой и новой системы
  – Проверка неизменности поведения кода
    имитирующего реальный процесс после
    рефакторинга
Принцип: Понятные данные




Экстремальное программирование - разработка через тестирование
Кент Бек
Принцип: Понятные данные




Экстремальное программирование - разработка через тестирование
Кент Бек
RED
Принцип: One Step Test
• Есть список задач – Tests List
• С какого теста начать?
Принцип: Starter Test
• Начните с теста, который ничего не делает
• Ответьте на вопрос, где должна
  располагаться операция
Принцип: Explanation Test
• Для любого объяснения используйте тесты
• Это способ распространения TDD в команде
Принцип: Learning Test
• Способ проверить догадки о том, как себя
  ведёт библиотека
• Возможность быстро проверять
  совместимость при выходе новых версий
Принцип: Another Test
• Когда возникает интересная посторонняя
  мысль, то запишите её в список и отложите
Принцип: Regression Test
• Что необходимо сделать первым после
  того, как был обнаружен баг?
• Конечно же написать тест!
Принципы эффективности
• Перерыв (break)




• Начать сначала (do over)
Экстремальное программирование - разработка через тестирование
Кент Бек
Паттерн: Самошунтирование (Self Shunt)

• Каким образом убедиться, что ваш объект
  корректно взаимодействует с другим?
• Заставьте объект взаимодействовать не с
  целевым объектом, а с вашим тестом
Паттерн: Broken Test

• В конце работы оставьте последний тест
  сломанным, чтобы затем с него и начать
  работу после перерыва
GREEN
Приёмы быстрого получения зелёной полосы

• Подделай это (Fake It)
• Триангуляция (Triangulation)
• Очевидная реализация (Obvious
  Implementation)
• От одного ко многим (One to Many)
Приём Fake It
• Сделайте так, чтобы тестируемый код
  возвращал такую константу, что тест станет
  зелёным
Приём Triangulation
• Выставляйте ограничения в тестах
• Постепенно увеличивайте абстрактность в
  коде
• Используем, если не уверены в том, какая
  абстракция будет корректной
Приём Obvious Implementation
• Является большим шагом, то есть
  увеличивает темп
• Поэтому использование рискованно
Темп
• Если вы уверены, то можно двигаться
  большими шагами
• Если вы ошибаетесь, то надо вернуться на
  шаг назад и снизить темп
РЕФАКТОРИНГ
Правила
• Получите чистый код
• После каждого изменения запускайте тесты
• Подробнее об этом в презентации
  «Refactoring»
ЗАКЛЮЧЕНИЕ
Необходимые навыки
• Владение Fake It, Triangulation & Obvious
  Implementation
• Умение удалять дублирование логики
  между кодом и тестами
• Способность контролировать скорость
TDD и архитектура
• Этап рефакторинга позволяет нам получать
  хорошую архитектуру
• Получаем Simple Design
• Необходимо стратегическое видение
  архитектуры. Для его получения можно
  использовать, например, CRC карты

Más contenido relacionado

La actualidad más candente

Heavy metal testing Part 3
Heavy metal testing Part 3Heavy metal testing Part 3
Heavy metal testing Part 3
Roman Ivliev
 
6 лекция. тестирование производительности
 6 лекция. тестирование производительности 6 лекция. тестирование производительности
6 лекция. тестирование производительности
vyacheslavmaslov
 
Нагрузочное тестирование теория Кожухов
Нагрузочное тестирование теория КожуховНагрузочное тестирование теория Кожухов
Нагрузочное тестирование теория Кожухов
Илья Кожухов
 
евгения фирсова нерелизное тестирование
евгения фирсова   нерелизное тестированиеевгения фирсова   нерелизное тестирование
евгения фирсова нерелизное тестирование
Alexei Lupan
 
3 лекция. презентация
3 лекция. презентация3 лекция. презентация
3 лекция. презентация
vyacheslavmaslov
 

La actualidad más candente (19)

DevOps подходы в инфраструктуре автоматизации тестирования
DevOps подходы в инфраструктуре автоматизации тестированияDevOps подходы в инфраструктуре автоматизации тестирования
DevOps подходы в инфраструктуре автоматизации тестирования
 
Внедрение автоматизации тестирования в highload проекте с непрерывной выкладкой
Внедрение автоматизации тестирования в highload проекте с непрерывной выкладкойВнедрение автоматизации тестирования в highload проекте с непрерывной выкладкой
Внедрение автоматизации тестирования в highload проекте с непрерывной выкладкой
 
Документация тестировщика - Александр Трибушный
Документация тестировщика - Александр ТрибушныйДокументация тестировщика - Александр Трибушный
Документация тестировщика - Александр Трибушный
 
Badger — инструмент для мониторинга качества продуктов
Badger — инструмент для мониторинга качества продуктовBadger — инструмент для мониторинга качества продуктов
Badger — инструмент для мониторинга качества продуктов
 
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
 
Павел Степанов
Павел СтепановПавел Степанов
Павел Степанов
 
Heavy metal testing Part 3
Heavy metal testing Part 3Heavy metal testing Part 3
Heavy metal testing Part 3
 
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
 
Нагрузочное тестирование
Нагрузочное тестированиеНагрузочное тестирование
Нагрузочное тестирование
 
Нагрузочное тестирование web-приложений с помощью Load Runner
Нагрузочное тестирование web-приложений с помощью Load RunnerНагрузочное тестирование web-приложений с помощью Load Runner
Нагрузочное тестирование web-приложений с помощью Load Runner
 
6 лекция. тестирование производительности
 6 лекция. тестирование производительности 6 лекция. тестирование производительности
6 лекция. тестирование производительности
 
Автоматизация тестирования на крупных проектах
Автоматизация тестирования на крупных проектахАвтоматизация тестирования на крупных проектах
Автоматизация тестирования на крупных проектах
 
Андрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Андрей Похилько — Нагрузочное тестирование типичного интернет сервисаАндрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Андрей Похилько — Нагрузочное тестирование типичного интернет сервиса
 
Тестируем legacy c++
Тестируем legacy c++Тестируем legacy c++
Тестируем legacy c++
 
Нагрузочное тестирование теория Кожухов
Нагрузочное тестирование теория КожуховНагрузочное тестирование теория Кожухов
Нагрузочное тестирование теория Кожухов
 
«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья Пастушков«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья Пастушков
 
евгения фирсова нерелизное тестирование
евгения фирсова   нерелизное тестированиеевгения фирсова   нерелизное тестирование
евгения фирсова нерелизное тестирование
 
3 лекция. презентация
3 лекция. презентация3 лекция. презентация
3 лекция. презентация
 
Ошибки начинающего специалиста по нагрузочному тестированию и как их избежать
Ошибки начинающего специалиста по нагрузочному тестированию и как их избежатьОшибки начинающего специалиста по нагрузочному тестированию и как их избежать
Ошибки начинающего специалиста по нагрузочному тестированию и как их избежать
 

Destacado

XP.Party (iOS) - unit tests frameworks overview
XP.Party (iOS) - unit tests frameworks overviewXP.Party (iOS) - unit tests frameworks overview
XP.Party (iOS) - unit tests frameworks overview
Anton Katkov
 
AgileCamp'12 Нижний Новгород: Заключение
AgileCamp'12 Нижний Новгород: ЗаключениеAgileCamp'12 Нижний Новгород: Заключение
AgileCamp'12 Нижний Новгород: Заключение
Anton Katkov
 
AgileCamp'12 Нижний Новгород: Введение
AgileCamp'12 Нижний Новгород: Введение AgileCamp'12 Нижний Новгород: Введение
AgileCamp'12 Нижний Новгород: Введение
Anton Katkov
 
AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...
AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...
AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...
Anton Katkov
 

Destacado (13)

2010年中国户外时尚运动用品市场发展报告
2010年中国户外时尚运动用品市场发展报告2010年中国户外时尚运动用品市场发展报告
2010年中国户外时尚运动用品市场发展报告
 
XP.Party (iOS) - unit tests frameworks overview
XP.Party (iOS) - unit tests frameworks overviewXP.Party (iOS) - unit tests frameworks overview
XP.Party (iOS) - unit tests frameworks overview
 
欧洲零售商如何利用电影和视频进行社区营销和客户关系管理
欧洲零售商如何利用电影和视频进行社区营销和客户关系管理欧洲零售商如何利用电影和视频进行社区营销和客户关系管理
欧洲零售商如何利用电影和视频进行社区营销和客户关系管理
 
AgileCamp'12 Нижний Новгород: Заключение
AgileCamp'12 Нижний Новгород: ЗаключениеAgileCamp'12 Нижний Новгород: Заключение
AgileCamp'12 Нижний Новгород: Заключение
 
色彩服饰搭配销售顾问课程培训
色彩服饰搭配销售顾问课程培训色彩服饰搭配销售顾问课程培训
色彩服饰搭配销售顾问课程培训
 
色彩陈列装饰顾问课程培训
色彩陈列装饰顾问课程培训色彩陈列装饰顾问课程培训
色彩陈列装饰顾问课程培训
 
AgileCamp’11 Новосибирск - Continuous Integration (CI)
AgileCamp’11 Новосибирск - Continuous Integration (CI)AgileCamp’11 Новосибирск - Continuous Integration (CI)
AgileCamp’11 Новосибирск - Continuous Integration (CI)
 
AgileCamp'12 Нижний Новгород: Введение
AgileCamp'12 Нижний Новгород: Введение AgileCamp'12 Нижний Новгород: Введение
AgileCamp'12 Нижний Новгород: Введение
 
AgileCamp'11 Новосибирск - Unit Tests
AgileCamp'11 Новосибирск - Unit TestsAgileCamp'11 Новосибирск - Unit Tests
AgileCamp'11 Новосибирск - Unit Tests
 
AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...
AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...
AgileDays'14 - Lean Startup, Metrics Driven Development и финансы - смешать, ...
 
Sls & sla
Sls & slaSls & sla
Sls & sla
 
AgileCamp'11 Новосибирск - введение в инженерные практики
AgileCamp'11 Новосибирск - введение в инженерные практикиAgileCamp'11 Новосибирск - введение в инженерные практики
AgileCamp'11 Новосибирск - введение в инженерные практики
 
城市化与中国商用地产的未来
城市化与中国商用地产的未来城市化与中国商用地产的未来
城市化与中国商用地产的未来
 

Similar a AgileCamp’11 Новосибирск - Test Driven Development (TDD)

Автотесты и образ мышления
Автотесты и образ мышленияАвтотесты и образ мышления
Автотесты и образ мышления
Andrei Zubov
 
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Javakranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
Krivoy Rog IT Community
 
Особенности быстрого тестирования
Особенности быстрого тестированияОсобенности быстрого тестирования
Особенности быстрого тестирования
UIDesign Group
 
Особенности быстрого тестирования мобильных интерфейсов - Антон Алябьев, UI D...
Особенности быстрого тестирования мобильных интерфейсов - Антон Алябьев, UI D...Особенности быстрого тестирования мобильных интерфейсов - Антон Алябьев, UI D...
Особенности быстрого тестирования мобильных интерфейсов - Антон Алябьев, UI D...
Procontent.Ru Magazine
 
тестирование
тестированиетестирование
тестирование
Yandex
 
Работа с унаследованным кодом. Есть ли жизнь после коммита.
Работа с унаследованным кодом. Есть ли жизнь после коммита.Работа с унаследованным кодом. Есть ли жизнь после коммита.
Работа с унаследованным кодом. Есть ли жизнь после коммита.
Vadim Kruchkov
 
Марина Широчкина: Тестирование
Марина Широчкина: ТестированиеМарина Широчкина: Тестирование
Марина Широчкина: Тестирование
Yandex
 
SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...
SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...
SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...
SECON
 

Similar a AgileCamp’11 Новосибирск - Test Driven Development (TDD) (20)

C# Desktop. Занятие 17.
C# Desktop. Занятие 17.C# Desktop. Занятие 17.
C# Desktop. Занятие 17.
 
Ольга Лужецька - Exploratory testing: Love it or Leave it?
Ольга Лужецька - Exploratory testing: Love it or Leave it?Ольга Лужецька - Exploratory testing: Love it or Leave it?
Ольга Лужецька - Exploratory testing: Love it or Leave it?
 
JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1
 
XP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy codeXP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy code
 
Автотесты и образ мышления
Автотесты и образ мышленияАвтотесты и образ мышления
Автотесты и образ мышления
 
Виталий Стрелюк
Виталий СтрелюкВиталий Стрелюк
Виталий Стрелюк
 
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Javakranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
 
Особенности быстрого тестирования
Особенности быстрого тестированияОсобенности быстрого тестирования
Особенности быстрого тестирования
 
Особенности быстрого тестирования мобильных интерфейсов - Антон Алябьев, UI D...
Особенности быстрого тестирования мобильных интерфейсов - Антон Алябьев, UI D...Особенности быстрого тестирования мобильных интерфейсов - Антон Алябьев, UI D...
Особенности быстрого тестирования мобильных интерфейсов - Антон Алябьев, UI D...
 
тестирование
тестированиетестирование
тестирование
 
Делимся опытом: как мы оптимизировали тестирование крупного проекта за 3 месяца
Делимся опытом: как мы оптимизировали тестирование крупного проекта за 3 месяцаДелимся опытом: как мы оптимизировали тестирование крупного проекта за 3 месяца
Делимся опытом: как мы оптимизировали тестирование крупного проекта за 3 месяца
 
Олексій Брошков "Мистецтво Дослідницького Тестування"
Олексій Брошков "Мистецтво Дослідницького Тестування"Олексій Брошков "Мистецтво Дослідницького Тестування"
Олексій Брошков "Мистецтво Дослідницького Тестування"
 
Работа с унаследованным кодом. Есть ли жизнь после коммита.
Работа с унаследованным кодом. Есть ли жизнь после коммита.Работа с унаследованным кодом. Есть ли жизнь после коммита.
Работа с унаследованным кодом. Есть ли жизнь после коммита.
 
Test driven development in net
Test driven development in netTest driven development in net
Test driven development in net
 
Марина Широчкина: Тестирование
Марина Широчкина: ТестированиеМарина Широчкина: Тестирование
Марина Широчкина: Тестирование
 
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
 
SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...
SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...
SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрее
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
 
Как мы тестировали ситуационный центр Центральной ППК
Как мы тестировали ситуационный центр Центральной ППККак мы тестировали ситуационный центр Центральной ППК
Как мы тестировали ситуационный центр Центральной ППК
 

AgileCamp’11 Новосибирск - Test Driven Development (TDD)

  • 2. Как прийти к TDD? • Если тесты – это хорошо, то почему бы не создавать их для всего кода? • Тесты, как спецификация • TDD - это принцип «разделяй и властвуй» для получения «чистого кода, который работает»
  • 3. Алгоритм 1. Быстро создать новый тест 2. Запустить все тесты и обнаружить, что новый тест не проходит 3. Внести небольшие изменения в код 4. Снова запустить все тесты и на этот раз зафиксировать, что все они успешно срабатывают 5. Провести рефакторинг для устранения дублирования 6. Goto 1
  • 4. Рекомендации • Никогда не нарушайте последовательность шагов • Начинайте с малого • Не бойтесь ошибиться (Courage) • Не беритесь за все подзадачи сразу. Вместо этого выписывайте каждую подзадачу на лист бумаги и беритесь в один момент времени только за один листочек. • Выбирайте те подзадачи, которые дадут вам наиболее полезную информацию • «Не прерывайте прерывание»
  • 7. Red • Напишите небольшой тест, который не работает или даже не компилируется
  • 8. Green • Заставьте тест работать как можно быстрее, не задумываясь при этом о правильности дизайна и чистоте кода. Напишите минимум, который необходим для получения зелёной полосы.
  • 9. Рефакторинг • Удалите из написанного кода любое дублирование, получив чистый код
  • 11. Принцип “тестируйте” Экстремальное программирование - разработка через тестирование Кент Бек
  • 12. Принцип: Assert First • Начните тест с написания того, что вы хотите проверить, то есть с assert
  • 13. Значения для тестов • Тестовые данные должны быть как можно проще, но информативными • Реалистичные данные: – Тестирование систем реального времени с использованием цепочек реальных событий – Сравнение поведения старой и новой системы – Проверка неизменности поведения кода имитирующего реальный процесс после рефакторинга
  • 14. Принцип: Понятные данные Экстремальное программирование - разработка через тестирование Кент Бек
  • 15. Принцип: Понятные данные Экстремальное программирование - разработка через тестирование Кент Бек
  • 16. RED
  • 17. Принцип: One Step Test • Есть список задач – Tests List • С какого теста начать?
  • 18. Принцип: Starter Test • Начните с теста, который ничего не делает • Ответьте на вопрос, где должна располагаться операция
  • 19. Принцип: Explanation Test • Для любого объяснения используйте тесты • Это способ распространения TDD в команде
  • 20. Принцип: Learning Test • Способ проверить догадки о том, как себя ведёт библиотека • Возможность быстро проверять совместимость при выходе новых версий
  • 21. Принцип: Another Test • Когда возникает интересная посторонняя мысль, то запишите её в список и отложите
  • 22. Принцип: Regression Test • Что необходимо сделать первым после того, как был обнаружен баг? • Конечно же написать тест!
  • 23. Принципы эффективности • Перерыв (break) • Начать сначала (do over) Экстремальное программирование - разработка через тестирование Кент Бек
  • 24. Паттерн: Самошунтирование (Self Shunt) • Каким образом убедиться, что ваш объект корректно взаимодействует с другим? • Заставьте объект взаимодействовать не с целевым объектом, а с вашим тестом
  • 25. Паттерн: Broken Test • В конце работы оставьте последний тест сломанным, чтобы затем с него и начать работу после перерыва
  • 26. GREEN
  • 27. Приёмы быстрого получения зелёной полосы • Подделай это (Fake It) • Триангуляция (Triangulation) • Очевидная реализация (Obvious Implementation) • От одного ко многим (One to Many)
  • 28. Приём Fake It • Сделайте так, чтобы тестируемый код возвращал такую константу, что тест станет зелёным
  • 29. Приём Triangulation • Выставляйте ограничения в тестах • Постепенно увеличивайте абстрактность в коде • Используем, если не уверены в том, какая абстракция будет корректной
  • 30. Приём Obvious Implementation • Является большим шагом, то есть увеличивает темп • Поэтому использование рискованно
  • 31. Темп • Если вы уверены, то можно двигаться большими шагами • Если вы ошибаетесь, то надо вернуться на шаг назад и снизить темп
  • 33. Правила • Получите чистый код • После каждого изменения запускайте тесты • Подробнее об этом в презентации «Refactoring»
  • 35. Необходимые навыки • Владение Fake It, Triangulation & Obvious Implementation • Умение удалять дублирование логики между кодом и тестами • Способность контролировать скорость
  • 36. TDD и архитектура • Этап рефакторинга позволяет нам получать хорошую архитектуру • Получаем Simple Design • Необходимо стратегическое видение архитектуры. Для его получения можно использовать, например, CRC карты