Краткое содержание, анализ и герои
Экстремальное программирование. Разработка через тестирование
Автор П. Анджан12+198 читателей
Дата написания2002-12-31
ИздательствоПитер
ISBN978-5-496-02570-6
Язык книгиru
Язык оригиналаen
СерияБиблиотека программиста (Питер)
Возрастное ограничение12+
Темытестированиеискусство программированияразработка программного обеспечениятестирование программного обеспечения
Описание
Книга демонстрирует применение тест‑приведённой разработки (TDD) на примере системы денежных операций, раскрывая как писать тесты до кода, как рефакторить, как использовать шаблоны проектирования и как масштабировать подход к большим проектам.
Главный конфликт / проблема
Как поддерживать чистый, расширяемый и надёжный код при добавлении новых функций и работе с мультивалютными вычислениями, избегая дублирования и ошибок в поведении
Ключевые идеи
- Тесты пишутся до кода и служат спецификацией
- Цикл Red‑Green‑Refactor обеспечивает быстрый прогресс
- Value Object – неизменяемые объекты с equals и hashCode
- Наследование и суперкласс Money упрощают общий код
- Сравнение объектов должно учитывать тип и значение
- Тест‑ориентированная разработка как средство выявления и устранения дублирования.
- Абстрагирование конкретных валют в общий класс Money и удаление подклассов.
- Введение интерфейса Expression и класса Sum для поддержки сложения и умножения.
- Bank как единственный источник курсов обмена, использующий полиморфизм.
- Тесты должны быть быстрыми, изолированными и независимыми.
- Принцип Arrange‑Act‑Assert (3A) упрощает структуру тестов.
- Методы setUp и tearDown обеспечивают подготовку и очистку среды.
Вывод
Тест‑приведённая разработка, сочетанная с грамотным применением шаблонов проектирования и последовательным рефакторингом, приводит к созданию надёжных, гибких и легко поддерживаемых программных систем.
Кому полезна
- Software developers
- QA engineers
- Agile teams
- Students of software engineering
Главные темы
- Test‑Driven Development (TDD)
- Design patterns in TDD
- Refactoring
- Testing frameworks and patterns
- Large‑scale TDD application
Персонажи
- Анджан П. — Автор книги, объясняет применение шаблонов проектирования в TDD, приводит практические примеры и рекомендации.
- Kent Beck — Показывает процесс TDD, приводит примеры и объясняет принципы.
- Bob Martin — Обсуждает влияние TDD на парное программирование и частую интеграцию.
- Jim Newkirk — Показывает, как запускать тесты при каждой новой версии пакета.
- Tim Makinon — Показывает, как смена партнёра может привести к перезапуску кода.
- Peter Hansen — Показывает, как простая реализация может выявить ошибки в тесте.
- Richard Gabriel — Предлагает оставить последний тест неработающим, чтобы быстро продолжить работу.
- Erich Gamma — Участвует в обсуждении применения шаблонов, например, в JHotDraw.
- Bob Binder — Приводит пример большого количества тестов для треугольника.
- Money — Содержит общее поле amount и метод equals, объединяет общие части Dollar и Franc.
- Dollar — Объект-значение, реализует умножение и equals, представляет доллар.
- Franc — Похож на Dollar, но представляет франки, реализует умножение и equals.
Цитаты
- "Чистый код, который работает, – это цель, к которой стоит стремиться"
- "Red – Green – Refactor – это мантра TDD."
- Мы можем сделать их еще более похожими, изменив тип возвращаемого значения на Money:
- В итоге достигается система, где Money, Sum и Bank работают через интерфейс Expression, а операции плюс и умножение возвращают Expression.
- Тесты должны выполняться достаточно быстро, чтобы я мог запускать их самостоятельно и делать это достаточно часто.
- Тесты должны полностью игнорировать друг друга.
- «чистый код, который работает»
- «Если вы знаете, что писать, и если это получится достаточно быстро, то смело пишите готовый код»
- Если исходить из этого предположения, то можно найти (и мы действительно находим) общие проблемы со стандартными решениями.
- В рамках TDD рефакторинг используется интересным образом.
Вам также может понравиться
{"page":{"canonicalUrl":"https://bookra.app/books/0eeRKssp","pageTitle":"Экстремальное программирование. Разработка через тестирование (П. Анджан) — краткое содержание, анализ и герои","metaDescription":"Разбор книги «Экстремальное программирование. Разработка через тестирование»: краткое содержание, главные мысли, конфликт, темы, персонажи, цитаты и ответы на вопросы.","headingTitle":"«Экстремальное программирование. Разработка через тестирование»","headingSubtitle":"П. Анджан, Кент Бек","structuredData":[{"@context":"https://schema.org","@type":"BreadcrumbList","@id":"https://bookra.app/books/0eeRKssp#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"BookRa","item":"https://bookra.app/"},{"@type":"ListItem","position":2,"name":"зарубежная компьютерная литература","item":"https://bookra.app/genre/5221"},{"@type":"ListItem","position":3,"name":"Экстремальное программирование. Разработка через тестирование","item":"https://bookra.app/books/0eeRKssp"}]},{"@context":"https://schema.org","@type":"WebPage","@id":"https://bookra.app/books/0eeRKssp","url":"https://bookra.app/books/0eeRKssp","name":"«Экстремальное программирование. Разработка через тестирование»","description":"Разбор книги «Экстремальное программирование. Разработка через тестирование»: краткое содержание, главные мысли, конфликт, темы, персонажи, цитаты и ответы на вопросы.","breadcrumb":{"@id":"https://bookra.app/books/0eeRKssp#breadcrumb"},"mainEntity":{"@id":"https://bookra.app/books/0eeRKssp#work"},"primaryImageOfPage":{"@type":"ImageObject","url":"https://storage.yandexcloud.net/bookra-catalog-litres-public/content/86e07f7f-5b3f-102b-94c2-fc330996d25d/thumbs/1200.webp"}},{"@context":"https://schema.org","@type":"Book","@id":"https://bookra.app/books/0eeRKssp#work","name":"Экстремальное программирование. Разработка через тестирование","url":"https://bookra.app/books/0eeRKssp","description":"Книга демонстрирует применение тест‑приведённой разработки (TDD) на примере системы денежных операций, раскрывая как писать тесты до кода, как рефакторить, как использовать шаблоны проектирования и как масштабировать подход к большим проектам.","image":"https://storage.yandexcloud.net/bookra-catalog-litres-public/content/86e07f7f-5b3f-102b-94c2-fc330996d25d/thumbs/1200.webp","inLanguage":"ru","genre":["зарубежная компьютерная литература","программирование"],"keywords":"тестирование, искусство программирования, разработка программного обеспечения, тестирование программного обеспечения","sameAs":["https://litres.ru/book/kent-bek/ekstremalnoe-programmirovanie-razrabotka-cherez-testirovanie-164068/"],"author":[{"@type":"Person","@id":"https://bookra.app/author/551abace-120e-11e4-824d-0025905a06ea#person","name":"П. Анджан","url":"https://bookra.app/author/551abace-120e-11e4-824d-0025905a06ea"}],"about":[{"@type":"Thing","name":"зарубежная компьютерная литература"},{"@type":"Thing","name":"программирование"},{"@type":"Thing","name":"тестирование"},{"@type":"Thing","name":"искусство программирования"},{"@type":"Thing","name":"разработка программного обеспечения"},{"@type":"Thing","name":"тестирование программного обеспечения"},{"@type":"Thing","name":"чтение онлайн"},{"@type":"Thing","name":"саммари"},{"@type":"Thing","name":"AI-разбор"},{"@type":"Thing","name":"персонажи"},{"@type":"Thing","name":"цитаты"}],"workExample":{"@type":"Book","@id":"https://bookra.app/books/0eeRKssp#edition","url":"https://bookra.app/books/0eeRKssp","bookFormat":"https://schema.org/EBook","inLanguage":"ru","isbn":"978-5-496-02570-6","publisher":{"@type":"Organization","name":"Питер"},"sameAs":["https://litres.ru/book/kent-bek/ekstremalnoe-programmirovanie-razrabotka-cherez-testirovanie-164068/"],"isAccessibleForFree":false}}],"book":{"idCatalog":33965,"shortId":"0eeRKssp","title":"Экстремальное программирование. Разработка через тестирование","coverUrl":"https://storage.yandexcloud.net/bookra-catalog-litres-public/content/86e07f7f-5b3f-102b-94c2-fc330996d25d/thumbs/1200.webp","annotationText":"Возвращение знаменитого бестселлера. Изящный, гибкий и понятный код, который легко модифицировать, который корректно работает и который не подкидывает своим создателям неприятных сюрпризов. Неужели подобное возможно? Чтобы достичь цели, попробуйте тестировать программу еще до того, как она написана. Именно такая парадоксальная идея положена в основу методики TDD (Test-Driven-Development – разработка, основанная на тестировании). Бессмыслица? Не спешите делать скороспелые выводы. Рассматривая применение TDD на примере разработки реального программного кода, автор демонстрирует простоту и мощь этой методики. В книге приведены два программных проекта, целиком и полностью реализованных с использованием TDD. За рассмотрением примеров следует обширный каталог приемов работы в стиле TDD, а также паттернов и рефакторингов, имеющих отношение к TDD. Книга будет полезна для любого программиста, желающего повысить производительность своей работы и получить удовольствие от программирования. В формате a4.pdf сохранен издательский макет.","catalogType":"LITRES","catalogTypeLabel":"Книга в каталоге","authorLine":"П. Анджан, Кент Бек","authors":[{"id":"551abace-120e-11e4-824d-0025905a06ea","displayName":"П. Анджан","protectedUrl":"/author/551abace-120e-11e4-824d-0025905a06ea","wikipediaUrl":null,"wikidataUrl":null},{"id":"7e9b6596-5b3f-102b-94c2-fc330996d25d","displayName":"Кент Бек","protectedUrl":"/author/7e9b6596-5b3f-102b-94c2-fc330996d25d","wikipediaUrl":null,"wikidataUrl":null}],"genres":[{"id":5221,"title":"зарубежная компьютерная литература","token":null,"publicUrl":"https://bookra.app/genre/5221"},{"id":5272,"title":"программирование","token":null,"publicUrl":"https://bookra.app/genre/5272"}],"keywords":["тестирование","искусство программирования","разработка программного обеспечения","тестирование программного обеспечения"],"facts":[{"key":"dateWritten","label":"Дата написания","value":"2002-12-31"},{"key":"publisher","label":"Издательство","value":"Питер"},{"key":"isbn","label":"ISBN","value":"978-5-496-02570-6"},{"key":"bookLanguage","label":"Язык книги","value":"ru"},{"key":"sourceLanguage","label":"Язык оригинала","value":"en"},{"key":"series","label":"Серия","value":"Библиотека программиста (Питер)"},{"key":"adult","label":"Возрастное ограничение","value":"12+"}],"seoSections":[{"key":"summaryShort","title":"Описание","body":"Книга демонстрирует применение тест‑приведённой разработки (TDD) на примере системы денежных операций, раскрывая как писать тесты до кода, как рефакторить, как использовать шаблоны проектирования и как масштабировать подход к большим проектам."},{"key":"conflict","title":"Главный конфликт / проблема","body":"Как поддерживать чистый, расширяемый и надёжный код при добавлении новых функций и работе с мультивалютными вычислениями, избегая дублирования и ошибок в поведении"},{"key":"keyIdeas","title":"Ключевые идеи","body":["Тесты пишутся до кода и служат спецификацией","Цикл Red‑Green‑Refactor обеспечивает быстрый прогресс","Value Object – неизменяемые объекты с equals и hashCode","Наследование и суперкласс Money упрощают общий код","Сравнение объектов должно учитывать тип и значение","Тест‑ориентированная разработка как средство выявления и устранения дублирования.","Абстрагирование конкретных валют в общий класс Money и удаление подклассов.","Введение интерфейса Expression и класса Sum для поддержки сложения и умножения.","Bank как единственный источник курсов обмена, использующий полиморфизм.","Тесты должны быть быстрыми, изолированными и независимыми.","Принцип Arrange‑Act‑Assert (3A) упрощает структуру тестов.","Методы setUp и tearDown обеспечивают подготовку и очистку среды."]},{"key":"conclusion","title":"Вывод","body":"Тест‑приведённая разработка, сочетанная с грамотным применением шаблонов проектирования и последовательным рефакторингом, приводит к созданию надёжных, гибких и легко поддерживаемых программных систем."},{"key":"audience","title":"Кому полезна","body":["Software developers","QA engineers","Agile teams","Students of software engineering"]},{"key":"topics","title":"Главные темы","body":["Test‑Driven Development (TDD)","Design patterns in TDD","Refactoring","Testing frameworks and patterns","Large‑scale TDD application"]},{"key":"characters","title":"Персонажи","body":["Анджан П. — Автор книги, объясняет применение шаблонов проектирования в TDD, приводит практические примеры и рекомендации.","Kent Beck — Показывает процесс TDD, приводит примеры и объясняет принципы.","Bob Martin — Обсуждает влияние TDD на парное программирование и частую интеграцию.","Jim Newkirk — Показывает, как запускать тесты при каждой новой версии пакета.","Tim Makinon — Показывает, как смена партнёра может привести к перезапуску кода.","Peter Hansen — Показывает, как простая реализация может выявить ошибки в тесте.","Richard Gabriel — Предлагает оставить последний тест неработающим, чтобы быстро продолжить работу.","Erich Gamma — Участвует в обсуждении применения шаблонов, например, в JHotDraw.","Bob Binder — Приводит пример большого количества тестов для треугольника.","Money — Содержит общее поле amount и метод equals, объединяет общие части Dollar и Franc.","Dollar — Объект-значение, реализует умножение и equals, представляет доллар.","Franc — Похож на Dollar, но представляет франки, реализует умножение и equals."]},{"key":"quotes","title":"Цитаты","body":["\"Чистый код, который работает, – это цель, к которой стоит стремиться\"","\"Red – Green – Refactor – это мантра TDD.\"","Мы можем сделать их еще более похожими, изменив тип возвращаемого значения на Money:","В итоге достигается система, где Money, Sum и Bank работают через интерфейс Expression, а операции плюс и умножение возвращают Expression.","Тесты должны выполняться достаточно быстро, чтобы я мог запускать их самостоятельно и делать это достаточно часто.","Тесты должны полностью игнорировать друг друга.","«чистый код, который работает»","«Если вы знаете, что писать, и если это получится достаточно быстро, то смело пишите готовый код»","Если исходить из этого предположения, то можно найти (и мы действительно находим) общие проблемы со стандартными решениями.","В рамках TDD рефакторинг используется интересным образом."]}],"authorSummary":null,"hasArtifacts":true,"canReadInApp":false,"readUrl":"https://web.bookra.app/?startapp=b_33965","artifactsUrl":"https://web.bookra.app/?startapp=b_33965","readCtaLabel":"Читать онлайн","artifactsCtaLabel":"AI-разбор","appReadLinks":null,"appAnalysisLinks":{"tg":"https://t.me/bookra_lib_bot/BookRa?startapp=b_33965","vk":"https://vk.com/app54470698#startapp=b_33965","max":"https://max.ru/id7751370047_bot?startapp=b_33965","web":"https://web.bookra.app/?startapp=b_33965"},"guestReaderUrl":null,"authorCtaLabel":"Все книги автора","authorProtectedUrl":"/author/551abace-120e-11e4-824d-0025905a06ea","readersCount":198,"adultLabel":"12+","yearLabel":null,"datePublished":null,"publisherLabel":"Питер","isbn":"978-5-496-02570-6","oclc":null,"lccn":null,"partnerUrl":"https://litres.ru/book/kent-bek/ekstremalnoe-programmirovanie-razrabotka-cherez-testirovanie-164068/","accessNote":"Карточка книги и AI-разбор откроются на защищенных страницах BookRa после входа."},"reader":null,"similarBooks":[{"idCatalog":232903,"shortId":"1iTqsK7p","title":"Чистая архитектура. Искусство разработки программного обеспечения","authorLine":"Роберт С. Мартин, Александр Н. Киселев","primaryAuthorId":"68468ed7-bb65-11e2-ac71-002590591ea6","coverUrl":"https://storage.yandexcloud.net/bookra-catalog-litres-public/content/91ae629a-dbb8-11e8-ae59-0cc47a5f3f85/thumbs/400.webp","publicUrl":"https://bookra.app/books/1iTqsK7p"},{"idCatalog":114825,"shortId":"1r3C1OlD","title":"Идеальный программист. Как стать профессионалом разработки ПО","authorLine":"Роберт С. Мартин, Е. А. Матвеев","primaryAuthorId":"68468ed7-bb65-11e2-ac71-002590591ea6","coverUrl":"https://storage.yandexcloud.net/bookra-catalog-litres-public/content/7f0d28d9-7729-11e5-b6ff-002590591ed2/thumbs/400.webp","publicUrl":"https://bookra.app/books/1r3C1OlD"},{"idCatalog":171688,"shortId":"2wtFbrjW","title":"Пользовательские истории. Искусство гибкой разработки ПО","authorLine":"Джефф Паттон, О. Потапова","primaryAuthorId":"8c57eedb-13c6-11e7-b6fa-00259059d1c2","coverUrl":"https://storage.yandexcloud.net/bookra-catalog-litres-public/content/d0f132f4-5207-11e7-b2fb-0cc47a52085c/thumbs/400.webp","publicUrl":"https://bookra.app/books/2wtFbrjW"},{"idCatalog":534407,"shortId":"0OYyKuG5","title":"Гибкие навыки. Исчерпывающее руководство по прокачке себя для начинающих разработчиков","authorLine":"Михаил Анатольевич Райтман, БОМБОРА, Джон Сонмез","primaryAuthorId":"3cc7c38b-3de2-11e0-8c7e-ec5afce481d9","coverUrl":"https://storage.yandexcloud.net/bookra-catalog-litres-public/content/0c664662-614c-11ee-8496-0cc47af30fe4/thumbs/400.webp","publicUrl":"https://bookra.app/books/0OYyKuG5"},{"idCatalog":106406,"shortId":"0eeuBNKq","title":"Программист-фанатик","authorLine":"Чед Фаулер, И. Рузмайкина","primaryAuthorId":"2569c767-b1fc-11e4-b5d9-0025905a06ea","coverUrl":"https://storage.yandexcloud.net/bookra-catalog-litres-public/content/d8779521-ecaf-11e4-8b80-0025905a069a/thumbs/400.webp","publicUrl":"https://bookra.app/books/0eeuBNKq"},{"idCatalog":91973,"shortId":"3uJTN4JL","title":"Как тестируют в Google","authorLine":"Джефф Каролло, Джеймс А. Уиттакер, Джейсон Арбон, Юлия Нечаева, Алена Васюхина","primaryAuthorId":"6e4f15ac-7f37-11e3-a294-0025905a06ea","coverUrl":"https://storage.yandexcloud.net/bookra-catalog-litres-public/content/1491d3f9-be70-11e3-b422-0025905a069a/thumbs/400.webp","publicUrl":"https://bookra.app/books/3uJTN4JL"},{"idCatalog":175293,"shortId":"3BSMywyF","title":"Impact mapping: Как повысить эффективность программных продуктов и проектов по их разработке","authorLine":"Альпина Паблишер, Гойко Аджич, Алексей Олейник","primaryAuthorId":"479b8c95-e05d-11ee-8496-0cc47af30fe4","coverUrl":"https://storage.yandexcloud.net/bookra-catalog-litres-public/content/818617c1-6980-11e7-9a04-0cc47a52085c/thumbs/400.webp","publicUrl":"https://bookra.app/books/3BSMywyF"},{"idCatalog":562350,"shortId":"3k4p57oG","title":"Гейм-дизайн: как создаются игры","authorLine":"Майкл Киллик, Д. Брайт","primaryAuthorId":"9889962e-d68a-11ee-8496-0cc47af30fe4","coverUrl":"https://storage.yandexcloud.net/bookra-catalog-litres-public/content/9fffd0d3-d68a-11ee-8496-0cc47af30fe4/thumbs/400.webp","publicUrl":"https://bookra.app/books/3k4p57oG"}],"similarBooksPagination":{"page":1,"pageSize":12,"totalItems":8,"totalPages":1,"hasPrev":false,"hasNext":false}},"notFound":false}