Кент бек экстремальное программирование разработка через тестирование: Экстремальное программирование. Разработка через тестирование

Содержание

Экстремальное программирование. Разработка через тестирован…

Бек, К.

В книге приведены два программных проекта, целиком и полностью реализованных с использованием TDD. За рассмотрением примеров следует обширный каталог приемов работы в стиле TDD, а также паттернов и рефакторингов, имеющих отношение к TDD. Книга будет полезна для любого программиста, желающего повысить производительность своей работы и получить удовольствие от программирования.

Полная информация о книге

  • Вид товара:Книги
  • Рубрика:Теория и технология программирования
  • Целевое назначение:Производств.
    -практич.изд.,практич.рук-во
  • ISBN:978-5-4461-1439-9
  • Серия:Библиотека программиста.
  • Издательство: Питер
  • Год издания:2020
  • Количество страниц:221
  • Тираж:700
  • Формат:70х100/16
  • УДК:681.
    3.06
  • Штрихкод:9785446114399
  • Доп. сведения:пер. с англ. П. Анджана
  • Переплет:обл.
  • Сведения об ответственности:Кент Бек
  • Код товара:36357

Экстремальное программирование: разработка через тестирование | Алгоритмы | Статьи | Программирование Realcoding.Net

Экстремальное программирование: разработка через тестирование

Test-driven Development by Example
Серия: Библиотека программиста (`Питер`)
Кент Бек

Издательство: Питер, 2003 г.
Мягкая обложка, 224 стр.
ISBN 5-8046-0051-6, 0-321-14653-0
Тираж: 3000 экз.
Формат: 70×100/16

Изящный, гибкий и понятный код, который легко модифицировать, который корректно работает и который не подкидывает своим создателям неприятных сюрпризов. Неужели, подобное возможно? Чтобы достичь цели, попробуйте тестировать программу еще до того, как она написана. Именно такая парадоксальная идея положена в основу методики TDD (Test-Driven-Development — разработка, основанная на тестировании). Бессмыслица? Не спешите делать скороспелых выводов. Рассматривая применение TDD на примере разработки реального программного кода, автор демонстрирует простоту и мощь этой новой методики. В книге рассматриваются два программных проекта, целиком и полностью реализованных с использованием TDD. За рассмотрением примеров следует обширный каталог приемов работы в стиле TDD, а также паттернов и рефакторингов, имеющих отношение к TDD. Книга будет полезна для любого программиста, желающего повысить производительность свой работы и получить удовольствие от программирования.

Бестселлеры:

  • Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес
    Приемы объектно-ориентированного проектирования. Паттерны проектирования
  • Генри С. Уоррен, мл.
    Алгоритмические трюки для программистов
  • Джеймс Рамбо, Айвар Якобсон, Грэди Буч
    UML. Специальный справочник
  • Роберт Калбертсон, Крис Браун, Гэри Кобб
    Быстрое тестирование
  • С.В. Черемных, И.О. Семенов, В.С. Ручкин
    Моделирование и анализ систем. IDEF-технологии: практикум
  • Юкио Сато
    Обработка сигналов. Первое знакомство
  • Грейди Буч, Джеймс Рамбо, Айвар Джекобсон
    Язык UML. Руководство пользователя
  • Д. Ватолин, А. Ратушняк, М. Смирнов, В. Юкин
    Методы сжатия данных. Устройство архиваторов, сжатие изображений и видео
  • Эдвард Йордон
    Путь камикадзе. Как разработчику программного обеспечения выжить в безнадежном проекте
  • Дж. Фридл
    Регулярные выражения

Бесплатные PowerPoint презентации в формате .ppt и .pptx для школьников, студентов и учителей

Возможность рассказать о себе, ярко и оригинально представить замысел, считается гарантией того, что вы запомнитесь как человек с потенциалом. Безусловно, чтобы осуществить все гладко и изящно потребуются определенные инструменты.

Во всем цивилизованном обществе собственно презентация дает возможность донести необходимую информацию потенциальным полезным лицам. Преимущественно, когда произносят «презентация», подразумевают презентации в формате программы Microsoft PowerPoint. Составить презентацию может каждый, но для этого нужны: владение программой, практика составления презентаций и креативное отношение к делу, а также, что немаловажно – время.

Как решить такую задачу? Что делать, когда в срочном порядке нужна презентация, но изготовить презентацию не представляется возможным? Решение всегда есть. Сайт GoldLibrary.ru предлагает скачать готовую презентацию! Готовые презентации уже размещены на сайте и все, что вам нужно сделать – подобрать подходящую и скачать её. Все материалы на сайте предоставлены бесплатно, никакой регистрации, никаких дополнительных действий. Даже, если на сайте не нашлось подходящей работы, есть возможность без особых усилий доделать самую приближенную по содержанию.

В Золотой Библиотеке Презентаций вы найдете работы на любой вкус. Есть как деловые презентации, так и презентации для школьников. Чем хороши презентации powerpoint? Тем, что вид файла такой программы является наиболее известным, он понятен для большинства пользователей, а также адаптирован под системы широкоформатной презентации.

Все чаще и чаще пользователи мировой сети обращаются за поддержкой к специализированным порталам.

На создание средней по продолжительности презентации уходит от пары суток до месяца. Чтобы собственными усилиями её создать, потребуется пройти как минимум специальные видеокурсы или прочитать книгу, которые стоят немало. В качестве другого способа значительно легче скачать презентации на различные темы с сайта, тем более, что они совершенно бесплатные.

Зайдя на наш сайт, вы сразу увидите, что именно здесь возможно отыскать всё, что угодно – например, доклады на такие темы как финансы, обучение, искусство и пр. Громадное количество тем позволяет без проблем отыскать тут проекты на любые жизненные случаи, без нужды расходовать время на собственноручное составление привлекательной презентации.

Экстремальное программирование. Разработка через тестирование

Возвращение известнейшего блокбастера. Изысканный, гибкий и понятный код, который просто видоизменить, который тактично трудится и который не подкидывает собственным разработчикам досадных сюрпризов. Неуж-то аналогичное возможно? Дабы добиться цели, вспомните опробывать программку ещё до такого, как она написана. Как раз эта феноменальная мысль положена в базу способа TDD (Test-Driven-Development – разработка, базирующаяся на тестировании). Не торопитесь создавать скороспелые выводы. Рассматривая использование TDD на случае разработки реального программного кода, создатель показывает простоту и силу данной способа. В книжке приведены 2 программных плана, полностью и всецело реализованных с внедрением TDD. За рассмотрением примеров идет по стопам широкий каталог способов работы в манере TDD, а еще паттернов и рефакторингов, имеющих отношение к TDD. Книжка может быть полезна для разработчика программного обеспечения, желающего увеличить производительность собственной работы.

1234567891011

Перейти

Права на издание получены по соглашению с Addison-Wesley Longman. Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как надежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные ошибки, связанные с использованием книги.

ISBN 978-0321146533 англ.

ISBN 978-5-496-02570-6

© 2003 by Pearson Education, Inc.

© Перевод на русский язык ООО Издательство «Питер», 2017

© Издание на русском языке, оформление ООО Издательство «Питер», 2017

© Серия «Библиотека программиста», 2017

Предисловие

Чистый код, который работает (clean code that works), – в этой короткой, но содержательной фразе, придуманной Роном Джеффризом (Ron Jeffries), кроется весь смысл методики разработки через тестирование (Test-Driven Development, TDD). Чистый код, который работает, – это цель, к которой стоит стремиться потому, что

• это предсказуемый способ разработки программ. Вы знаете, когда работу можно считать законченной и не беспокоиться о длинной череде ошибок;

• дает шанс усвоить уроки, которые преподносит код. Если вы воспользуетесь первой же идеей, которая пришла в голову, у вас не будет шанса реализовать вторую, лучшую идею;

• улучшает жизнь пользователей ваших программ;

• позволяет вашим коллегам рассчитывать на вас, а вам – рассчитывать на них;

• писать такой код приятнее.

Но как получить чистый код, который работает? Многие силы мешают нам получить чистый код, а иногда не удается даже получить код, который просто работает. Чтобы избавиться от множества проблем, мы будем разрабатывать код, опираясь на автоматизированное тестирование. Такой стиль программирования называется разработкой через тестирование. Согласно этой методике

• новый код пишется только после того, как будет написан автоматический тест, завершающийся неудачей;

• любое дублирование устраняется.

Два простых правила, не правда ли? Однако они генерируют сложное индивидуальное и групповое поведение со множеством технических последствий:

• в процессе проектирования мы постоянно запускаем код и получаем представление о его работе, это помогает принимать правильные решения;

• мы сами пишем тесты, так как не можем ждать, что кто-то другой напишет тесты для нас;

• наша среда разработки должна быстро реагировать на небольшие модификации кода;

• дизайн программы должен базироваться на использовании множества автономных, слабо связанных компонентов, чтобы упростить тестирование кода.

Два упомянутых правила TDD определяют порядок этапов программирования.

1. Красный – напишите небольшой тест, который не работает, а возможно, даже не компилируется.

2. Зеленый – заставьте тест работать как можно быстрее, при этом не думайте о правильности дизайна и чистоте кода. Напишите ровно столько кода, чтобы тест сработал.

3. Рефакторинг – устраните из написанного кода любое дублирование.

Красный – зеленый – рефакторинг – это мантра TDD.

Если допустить, что такой стиль программирования возможен, можно предположить, что благодаря его использованию код будет содержать существенно меньше дефектов, кроме того, цель работы будет ясна всем, кто принимает в ней участие. Если так, тогда разработка только кода, необходимого для прохождения тестов, приводит также к социальным последствиям:

• при достаточно низкой плотности дефектов команда контроля качества (Quality Assurance, QA) сможет перейти от реагирования на ошибки к их предупреждению;

Обучение программированию через тестирование или TDD | GeekBrains

https://d2xzmw6cctk25h. cloudfront.net/post/1982/og_image/e7a72a02a523097ed0f22989a948de24.png

Еще в XIX веке шотландский автор Самуэль Смайлс написал: «Мы учимся мудрости на ошибках гораздо быстрее, чем на успехах». Этому утверждению созвучны многие методологии разработки, где особое место уделяется тестированию, — например, DevOps и Agile. Лучшей считается та проверка, которая быстро находит ошибки. Если баги не обнаружены — цикл неудачный.

В школах и вузах нас сначала учат многочисленным правилам и ограничениям и лишь потом подпускают к практике. Даже если цена ошибки копеечная, «разрушительная» самодеятельность карается, а не поощряется. И так в любой области.

Программирование показывает, насколько несостоятелен такой подход. В качественном редакторе кода, совершая ошибку, вы получаете указатель на нее, код и ссылку в документации. Так вы понимаете, какие действия в данной задаче эффективны или запрещены. Но если код компилируется без ошибок, то это не гарантирует его качество. При этом вы лишаетесь возможности подробно, на примере, выявить «бутылочное горлышко».

Это не означает, что обучение через одну лишь практику эффектно. Необходима правильная градация. Такая, где на первом месте — анализ возможных ошибок.  Это Test-Driven Development (TDD), или разработка через тестирование — частное направление экстремального программирования. Суть этого принципа сводится к следующему:

  1. Составляется тест для небольшого отрывка кода, описывающего «базу».
  2. Создается код, прогоняется тест.
  3. По мере увеличения объема кода тест прогоняется повторно, каждый раз подтверждая правильность.

Отметим плюсы такого подхода:

  1. Пошаговый рефакторинг кода. При классическом подходе программист часто увлекается разработкой отдельных модулей или всего кода в целом, упуская частности.
  2. Разработка исходит из анализа возможных ошибок. Это заставляет внимательно изучать, откуда берутся баги, а также помогает трезво расширять функциональность. Если вы не можете гарантировать работоспособность участка кода — придется или отказаться от него, или плотнее взяться за теорию.
  3. Разработчик рассматривает больше вариантов реализации. Пошагово увеличивая сложность кода с учетом уже созданного теста, вы изучаете варианты решений, чтобы выбрать простое или гарантированно работающее.

Профессионала легко отличить от новичка по умению находить чужие ошибки и отвечать, почему код не работает. Именно для такой тренировки мозга мы шерстим форумы, участвуем в олимпиадах, проходим тестирования. Поэтому TDD или разработка через тестирование действительно позволяет быстрее достичь продвинутого уровня в программировании.

Чтобы погрузиться в тему TDD, почитайте классные вводные статьи:

  1. Обзорный текст на Habr.
  2. Подробная статья на Technology Conversations.
  3. Наглядный туториал на Agile Data.
  4. Тест на вашу совместимость с TDD на Scott Logic.

И несколько книг:

  1. Экстремальное программирование: разработка через тестирование. Кент Бек.
  2. The Art of Unit Testing: With Examples in .NET. Roy Osherove.
  3. xUnit Test Patterns: Refactoring Test Code. Gerard Meszaros.
  4. Test-Driven Web Development with Python. Harry Percival.
  5. Growing Object-Oriented Software, Guided by Tests, Steve Freeman.

И не забывайте, что важнейшее правило в программировании через тестирование — максимум практики. Только погружаясь в реальный код, вы получите реальные знания.

★ Экстремальное программирование — технологии организации п

                                     

2.1. Базовые техники XP. Тестирование. (Testing)

XP предполагает написание автоматических тестов. особое внимание уделяется двум разновидностям тестирования:

  • Модульное тестирование модулей. (Unit testing of modules)
  • Функциональное тестирование. (Functional testing)

Разработчик не может быть уверен в правильности написанного кода, как долго, как вы не работают абсолютно все unit-тесты, работал. системы тесты модулей модульные тесты позволяют разработчикам, чтобы убедиться, что каждая в отдельности работает правильно. они также помогают другим разработчикам понять, почему тот или иной фрагмент кода и как он работает — в исследовании тестовый код логики тестируемого кода, становится понятно, как можно увидеть, как это должно быть использовано. модульные тесты также позволяют разработчику без всякого страха рефакторинга refactoring (рефакторинг).

Функциональные тесты предназначены для проверки функционирования логических образуется при взаимодействии нескольких часто — довольно внушительных размеров частей. они менее подробные, чем юнит-тесты, но крышка гораздо больше — то есть тесты на время выполнения влияет больше объем кода, шанс обнаружить любое некорректное поведение, очевидно, больше. по этой причине, в промышленном программировании, написание функциональных тестов часто более высокий приоритет, чем написание модульных тестов.

Для XP более высокий приоритет подход называется TDD (ТДД) от англ. test-driven development (разработка через тестирование) — разработка через тестирование. В соответствии с этим подходом, вы сначала напишите тест, который изначально не удается, то реализует логику нужно проходить тест. TDD (ТДД), в определенном смысле, позволяет писать код, который более удобен в использовании, так как при написании теста, когда логика еще, проще всего позаботиться об удобстве будущей системы.

Книга: Экстремальное программирование. Разработка через тестирование — Кент Бек

  • Просмотров: 1221

    Тени тевтонов

    Алексей Иванов

    Самый ожидаемый роман 2021 года! 1457 год. Враги штурмуют замок Мариенбург – столицу…

  • Просмотров: 1065

    Срезающий время

    Алексей Борисов

    Сколько раз мы замечали среди людей странную привычку сваливать свою вину на кого-то и…

  • Просмотров: 985

    Ученик поневоле

    Александр Курзанцев

    Тебя выбрали учеником магической академии. Чем не повод для радости? Но что если из-за…

  • Просмотров: 967

    Чужие игры. Столкновение

    Вадим Панов

    Звезда киберспорта, популярный видеоблогер, неординарная художница, талантливый биолог,…

  • Просмотров: 938

    Стилет для «Тайфуна»

    Михаил Алексеев

    Рыцаря Средневековья можно было ошеломить, заставить отступить, но убить было крайне…

  • Просмотров: 925

    На острие удара

    Михаил Михеев

    В современном мире грань между войной и миром становится тонкой, почти незаметной, и…

  • Просмотров: 925

    Мне надо кое в чем тебе признаться…

    Аньес Мартен-Люган

    Жизнь галеристки Авы – словно картинка из глянцевого журнала: красивый дом, обожаемый муж…

  • Просмотров: 894

    Иностранец. Друзья и враги

    Игорь Шелег

    Часть денег в развитие района… Часть на предприятия… Еще часть выделить на усиление…

  • Просмотров: 889

    Зеркало Ноя

    Лев Альтмарк

    Герой большинства рассказов Льва Альтмарка – израильский репатриант, приехавший из…

  • Просмотров: 886

    Когда оживают Тени

    Сергей Джевага

    Сотни лет прошли с тех пор, как орды Люцифера уничтожили мир. Сотни лет остатки…

  • Просмотров: 868

    Детектор патриотизма

    Юрий Поляков

    Без преувеличения известного русского писателя Юрия Полякова можно назвать ведущим…

  • Просмотров: 864

    Снег в Техасе

    Павел Долохов

    Павел Долохов (Павел Маркович Долуханов, 1937–2009) известен как ученый с мировым именем,…

  • Просмотров: 855

    Ошибка каскадера

    Даниил Гуревич

    Новый роман Даниила Гуревича «Ошибка каскадера» приглашает читателя в театральное…

  • Просмотров: 825

    Жить в эпоху перемен

    Всеволод Воробьёв

    Эта новая книга Всеволода Воробьёва по сути является как бы продолжением предыдущей…

  • Просмотров: 800

    Долгое счастливое утро

    Наталия Соколовская

    Повести и рассказы, вошедшие в эту книгу, – единый текст. Разрозненные на первый взгляд…

  • Просмотров: 782

    Пение пчел

    София Сеговия

    В день, когда под мостом нашли брошенного ребенка, жизнь их городка изменилась навсегда.…

  • Просмотров: 780

    И зелень августа, и иней декабря…

    Всеволод Воробьёв

    Данная книга – второе издание сборника охотничьих рассказов и стихов старейшего…

  • Просмотров: 759

    Святые и дурачок

    Анджей Иконников-Галицкий

    «Святые и дурачок» – книга об обретении веры, о людях, почитаемых как святые во всём…

  • Просмотров: 759

    Гостеприимная вода

    Всеволод Воробьёв

    Эта книга предназначена, прежде всего, для тех читателей, кто всем видам отдыха…

  • Просмотров: 739

    Записные книжки дурака

    Евгений Сатановский

    Евгений Сатановский – предприниматель и меценат, президент Института Ближнего Востока и…

  • Просмотров: 728

    Омало

    Елизавета Корстон

    Ее зовут Тамара и она, обычная русская девушка, не стремится к кардинальным переменам в…

  • Просмотров: 701

    DOOM. Как в битвах с демонами закалялся…

    Дэн Пинчбек

    DOOM – игра, ставшая символом целого поколения. Она объединила вокруг себя огромное…

  • Просмотров: 692

    Любовь в тягость

    Элена Ферранте

    «Любовь в тягость» – это тонкая и психологически выверенная проза, роман одновременно…

  • Просмотров: 691

    Убийство со вкусом кьянти

    Юлия Евдокимова

    Новый рецепт детективной истории: кулинарная тайна. «Аппетитная» книга, в которой…

  • Разработка через тестирование: на примере [Книга]

    Описание книги

    Чистый код, который работает — сейчас. Это кажущееся противоречие это лежит в основе многих проблем программирования. Тест-драйв развитие отвечает на это противоречие парадоксом — проверьте программу, прежде чем писать ее.

    Новая идея? Нисколько. С момента зарождения вычислительной техники программисты указывали входы и выходы перед программированием именно так. Разработка через тестирование берет эту извечную идею, смешивает это с современными языками и средами программирования, и готовит вкусное рагу, гарантированно удовлетворит ваш аппетит к чистому коду это работает — сейчас.

    Разработчики каждый день сталкиваются со сложными проблемами программирования, но они не всегда готовы определить лучших решение. Чаще всего такие сложные проекты генерируют много стресса и плохой код. Чтобы собрать силы и мужества, необходимого для решения, казалось бы, титанических задач, программисты следует обратить внимание на разработку через тестирование (TDD), проверенный набор методы, поощряющие простой дизайн, и наборы тестов, которые внушают доверие.

    Стимулируя разработку с помощью автоматизированных тестов, а затем устраняя дублирование, любой разработчик может написать надежный код без ошибок нет независимо от его уровня сложности.Более того, TDD поощряет программисты, чтобы быстро учиться, более четко общаться и искать конструктивная обратная связь.

    Читатели научатся:

    • Решать сложные задачи, начиная с простых и переходя к более сложному.

    • Напишите автоматизированные тесты перед кодированием.

    • Органическое развитие дизайна путем рефакторинга для добавления дизайна решения по одному.

    • Создание тестов для более сложной логики, включая отражение и исключения.

    • Используйте шаблоны, чтобы решить, какие тесты писать.

    • Создавайте тесты с использованием xUnit, архитектуры, лежащей в основе многих инструменты тестирования, ориентированные на программистов.

    Эта книга описывает два проекта TDD от начала до конца, иллюстрируя методы, которые программисты могут использовать, чтобы легко и резко повысить качество их работы. Примеры с последующими ссылками на представленные шаблоны TDD и рефакторинги. С упором на гибкие методы и быстрые стратегии развития, Разработка через тестирование обязательно вдохновит читателей принять эти малоиспользуемые, но мощные техники.

    0321146530B10172002

    Показать и скрыть еще

    Основы разработки через тестирование: Код для кода

    Разработка через тестирование, декодирование

    Для большинства систем существуют рабочие проверки, и в мире программной инженерии разработка через тестирование может помочь поддерживать эти проверки и, в свою очередь, код. Разработка через тестирование (TDD) — это метод и практика разработки программного обеспечения, в которых при написании кода используется принцип «сначала тестирование».

    TDD требует модульного тестирования, при котором отдельные модули или компоненты программного обеспечения тестируются перед кодом, который они должны проверять. Дело в том, чтобы протестировать самую маленькую часть любого программного обеспечения, всего с несколькими входами и одним выходом, чтобы убедиться, что каждая единица программного обеспечения работает так, как задумано. Модульное тестирование — это первый уровень тестирования программного обеспечения, обычно перед интеграционным тестированием. Модульное тестирование важно, потому что стоимость исправления ошибки во время модульного тестирования меньше, чем исправление ошибок на более высоких уровнях тестирования.

    В управляемом тестированием цикле разработки инженер пишет модульный тест, который определяет желаемую функцию, создает минимальный объем кода для прохождения этого теста, а затем реструктурирует новый код в соответствии с удовлетворительными стандартами.

    Например, цикл TDD будет выглядеть следующим образом:

    • Написать тест
    • Проведите тест и посмотрите, не сработает ли он
    • Написать код
    • Провести тесты снова
    • Код перезаписи
    • Повторить

    В 1990-е годы разработка через тестирование была первоначально формализована Кентом Беком как одна из основ методологии экстремального программирования (XP).XP — это особая гибкая среда разработки инженерных практик. Его максима: производить более качественное программное обеспечение, а также повышать качество жизни инженерных команд. Пять ценностей XP: общение, простота, обратная связь, смелость и уважение.

    Сегодня, однако, TDD признана отдельной дисциплиной с упором на постоянное улучшение кода. В результате вложения в тесты должны сэкономить время и деньги в будущем при добавлении новых функций или перезаписи операций.Тем не менее, для сохранения окупаемости инвестиций (ROI) критически важно, чтобы тестовый код был чистым, организованным и качественным. Например, спросите себя, легко ли это читать? Это кратко? Говорит ли тест как можно больше с минимальным количеством кода? Чтобы тесты были краткими и понятными, модульные тесты должны содержать только один результат.

    Рентабельность инвестиций в разработку через тестирование

    Хотя разработка через тестирование может показаться трудоемкой, она позволяет выявлять проблемы на раннем этапе, экономя время и снижая стоимость устранения (и ошибок) в долгосрочной перспективе.

    TDD может показаться большой предварительной работой, но, если все сделано правильно, это может привести к поддерживаемому и многократно используемому коду, который также упрощает добавление новых функций, что может означать повышение производительности труда инженера в целом. TDD также поощряет инженеров к рефакторингу и постоянному улучшению своей работы.

    Согласно книге Кента Бека о TDD, команды и практикующие TDD сообщают:

    • Значительное сокращение процента неудачных результатов за счет умеренного увеличения первоначальных усилий по разработке
    • Компенсация накладных расходов за счет сокращения работ на заключительных этапах проекта
    • Улучшение качества разработки кода, а также более высокая степень технического качества

    Какие подводные камни?

    Подход к разработке через тестирование — это большой сдвиг для инженеров в том, как они подходят к программированию.Инженерам необходимо уделить значительное количество времени на изучение подхода TDD. Это может показаться дорогостоящим на начальном этапе, но когда есть надлежащая адаптация для разработки, основанной на тестировании, долгосрочные выгоды возрастают, поскольку инженер получает более удобную возможность рефакторинга кода и обеспечения его повторного использования другими.

    Тем не менее, это также зависит от способности инженера создать дорожную карту и хранилище документов в форме запланированных тестов. Есть ли у тестов исполняемые спецификации и документация по приложению? Тесты должны описывать требования, которые они проверяют.

    Типичные инженерные ошибки включают:

    • Тесты проводятся недостаточно часто
    • Написание слишком больших тестов
    • Написание слишком большого количества тестов одновременно
    • Написание несущественных тестов
    • Написание тестов для тривиального кода, например, сверхабстракции

    Типичные ошибки команды:

    • Частичное внедрение: когда в командах всего несколько разработчиков, использующих TDD, это может привести к хаотическим процессам проверки кода
    • Плохое обслуживание: когда код не поддерживается, это может привести к набору тестов с длительным временем работы, что запрещает другую работу.
    • Заброшенный набор тестов: отказ от TDD может привести к путанице и хаосу для организации кода — аналогично ловушке частичного внедрения

    Как правильно проводить разработку через тестирование

    Помимо основ цикла разработки через тестирование, чистый тест должен следовать 5 правилам, которые следуют аббревиатуре FIRST:

    • Быстро: для частого выполнения тесты должны быть быстрыми
    • Независимые: тесты не могут зависеть друг от друга
    • Повторяемость: тест должен быть воспроизводим
    • Самостоятельная проверка: тест должен быть двоичным (пройти или не пройти) для быстрого и легкого заключения
    • Своевременно: тест должен быть написан непосредственно перед кодом, который он будет проверять.

    Ваш код соответствует коду?

    Разработка через тестирование требует модульного тестирования — важного первого шага, — но есть четыре уровня тестов, которые необходимо запустить впоследствии, чтобы убедиться, что ваш код и программное обеспечение работают без сбоев. Второй уровень интеграционного тестирования идет после модульного тестирования. Интеграционное тестирование — это когда отдельные модули объединяются и тестируются вместе, как группа. Это необходимо для проверки наличия ошибок между интегрированными блоками.В-третьих, тестирование системы. Системное тестирование — это тестирование готового и интегрированного программного обеспечения, чтобы проверить систему в целом и соответствует ли она указанным требованиям. В-четвертых, это приемочное тестирование, когда система тестируется, чтобы определить, соответствует ли она требованиям бизнеса и приемлема ли она для поставки.

    Стул — хорошая аналогия того, как думать об этих четырех уровнях тестирования. При изготовлении стула ножки, подлокотники, спинка, обивка и сиденье изготавливаются отдельно и испытываются отдельно.Когда две или более части (или блоки) готовы, они собираются вместе, и можно проводить интеграционное тестирование. Когда кресло собрано и интегрировано, выполняется системное тестирование. Когда это будет сделано, приемочные испытания подтвердят, что кресло готово для конечных пользователей.

    Чтобы убедиться, что код соответствует требованиям, вы также можете запускать дымовые и регрессионные тесты. Дымовые тесты гарантируют, что наиболее важные функции системы работают. Регрессионное тестирование гарантирует, что любые изменения, исправления ошибок или улучшения программного обеспечения не повлияли на него отрицательно.

    Лучшие практики разработки через тестирование

    Разработка через тестирование может сохранить код вашей команды чистым и организованным, а также сэкономить время в долгосрочной перспективе, но долгосрочные преимущества разработки через тестирование заключаются в том, есть ли у инженеров достаточно времени для изучения процесса TDD и будут ли они может полностью принять и практиковать тестирование и рефакторинг.

    При использовании TDD важно помнить следующее:

    • Скорость — ключ к успеху. Не так важно делать идеальный код.Более важно, чтобы все работало, пока не придет время рефакторинга кода
    • .
    • TDD — это образ мышления, это способ подойти к дизайну и подумать о реализации перед написанием кода.
    • Документация имеет решающее значение, чтобы другие могли повторно использовать и практиковать код.

    TDD — это инвестиция в будущее, которая в конечном итоге может помочь инженерам стать лучшими программистами. Это экономит время, упрощает рефакторинг кода, позволяет улучшить дизайн, обеспечивает живую документацию и работу вашего кода.Как и во всем, практика важна.

    Аманда Роза — писатель-фрилансер. Вы можете найти ее работы в AngelList, Zendesk и Data-Driven Investor.

    Продвинутая тема — Разработка через тестирование — Масштабируемая гибкая среда

    У нас никогда не бывает достаточно времени на тестирование, поэтому давайте сначала напишем тест.
    —Кент Бек

    Разработка через тестирование (TDD) — это философия и практика, которые рекомендуют создавать и выполнять тесты перед внедрением кода или компонента системы.Проверяя их на соответствие серии согласованных тестов, TDD — метод гибкого тестирования — улучшает результаты системы, гарантируя, что реализация системы соответствует ее требованиям. TDD, наряду с разработкой на основе поведения (BDD), является частью подхода «сначала тестирование» к обеспечению качества при разработке. Написание тестов сначала создает более сбалансированный портфель тестов с множеством быстрых автоматических тестов разработки и меньшим количеством медленных, ручных, сквозных тестов. (Более подробно о пирамиде тестирования и сбалансированном портфеле тестирования см. Раздел Test-First статьи «Команда и техническая гибкость».)

    Бек и другие определили набор практик экстремального программирования (XP) под общим названием TDD [1]. На рисунке 1 показан процесс:

    Рис. 1. Процесс разработки через тестирование
    1. Сначала напишите тест, чтобы разработчик понимал требуемое поведение. Это может быть новый тест или модификация существующего теста.
    2. Запустите тест и посмотрите, как он не работает. Поскольку кода еще нет, это может показаться бессмысленным, но оно решает две полезные задачи: проверяет работу теста, включая любые средства тестирования, и демонстрирует, как система будет вести себя, если код неверен.
    3. Напишите минимальный объем кода, необходимый для прохождения теста. Если это не удается, переработайте код или тест, пока он не пройдет нормально.
    4. Продолжайте внедрение нового кода, пока не пройдут все тесты. Этот шаг дает разработчику уверенность в том, что его изменения соответствуют текущим требованиям и не привели к ошибке в другой части системы.
    5. Выполните рефакторинг по мере необходимости, чтобы обеспечить соответствие дизайна изменяющимся требованиям (например, возникающий дизайн). Разработчики постоянно обновляют свои проекты, чтобы гарантировать, что меняющиеся требования и растущая кодовая база не приводят к низкому качеству кода.

    В XP эта практика была разработана в первую очередь для работы в контексте модульных тестов, которые представляют собой тесты, написанные разработчиком (также форма кода), которые оценивают используемые классы и методы. Это форма «тестирования белого ящика », поскольку они проверяют внутреннее устройство системы и различные пути кода. Чтобы обеспечить высокое качество, разработчики работают парами над созданием кода и тестов, обеспечивая несколько точек зрения и встроенную экспертную оценку. Даже если тесты не разрабатываются парами, они предоставляют еще один набор глаз, которые просматривают код.

    Богатый набор модульных тестов гарантирует, что при рефакторинге не появятся новые ошибки, что позволяет разработчикам постоянно улучшать свои проекты. Рефакторинг обеспечивает качество, позволяя создавать проекты со временем, поддерживая меняющиеся требования решения.

    Модульные тесты

    TDD создает большой набор тестов на уровне разработчика, что позволяет отделу обеспечения качества (QA) и тестирующему персоналу сосредоточиться на других задачах тестирования. Вместо того, чтобы тратить время на поиск и сообщение об ошибках на уровне кода, они могут сосредоточиться на более сложном поведении и взаимодействии между компонентами.

    Сообщество открытого исходного кода создало фреймворки для модульного тестирования, охватывающие большинство языков, включая Java, C, C #, C ++, XML, HTTP, Python и другие. Существуют инфраструктуры модульного тестирования для большинства сред программирования, с которыми может столкнуться разработчик. Фреймворки модульного тестирования предоставляют средства для разработки и обслуживания модульных тестов, а также для их автоматического выполнения в системе.

    В TDD тестирование и код пишутся вместе и, следовательно, происходят в одной итерации.В результате автоматизация регрессионного тестирования для модульных тестов в основном бесплатна для команды. Модульное тестирование — краеугольный камень гибкости программного обеспечения. Инвестиции в комплексное модульное тестирование улучшают качество и производительность.

    Тесты компонентов

    Teams также используют тесты для оценки более крупных компонентов системы. Многие из них представлены на различных архитектурных уровнях, где они предоставляют услуги, необходимые для функций или других модулей. Инструменты и методы тестирования для реализации тестов компонентов различаются.Например, фреймворки тестирования могут содержать сложные модульные тесты, написанные на языке фреймворка (например, Java, C, C # и т. Д.). Это позволяет многим командам использовать свои фреймворки модульного тестирования для создания компонентных тестов. Они могут даже не думать о них как о отдельных функциях, поскольку это просто часть их стратегии тестирования. В других случаях разработчики могут включать другие инструменты тестирования или писать полностью настраиваемые тесты на любом языке или в любой среде, которая является для них продуктивной, для тестирования более широкого поведения системы.Эти тесты также автоматизированы и служат основной защитой от непредвиденных последствий рефакторинга и нового кода.

    Ускорение тестирования с помощью тестовых пар

    Тесты

    TDD проверяют относительно небольшую часть системы, но каждый тест может потребовать значительных затрат времени и средств для запуска и настройки. Кроме того, для каждого из них могут потребоваться зависимые компоненты и инфраструктура предприятия, которые могут быть доступны или недоступны немедленно. «Тестовые двойники» — это конструкции кода, которые ускоряют тестирование, заменяя медленные, недоступные или дорогие компоненты более быстрыми прокси.Практики TDD обычно широко используют тестовые двойники. См. Статью «Встроенное качество» для получения дополнительных сведений о тестовых двойниках и информации о приложении.


    Узнать больше

    [1] Бек, Кент. Разработка через тестирование. Аддисон-Уэсли, 2003.

    Последнее обновление: 1 ноября 2018 г.

    Информация на этой странице принадлежит © 2010-2021 Scaled Agile, Inc. и защищена американскими и международными законами об авторских правах. Ни изображения, ни текст не могут быть скопированы с этого сайта без письменного разрешения правообладателя.Scaled Agile Framework и SAFe являются зарегистрированными товарными знаками Scaled Agile, Inc. Посетите раздел часто задаваемых вопросов о разрешениях и свяжитесь с нами для получения разрешений.

    Актуальна ли разработка через тестирование (TDD)?

    При создании мобильных приложений вы должны исходить из конкретных требований и предоставлять тщательно протестированное приложение. В отличие от веб-приложений, если ваши пользователи сталкиваются с ошибкой на своем мобильном телефоне, вы не сможете исправить ее. Вы должны повторно опубликовать мобильное приложение и надеяться, что ваши пользователи загрузят его.

    Вот почему надежные методы тестирования имеют первостепенное значение при разработке мобильных приложений.

    TDD, или разработка через тестирование, представляет собой структуру программирования, в которой разработчики сначала пишут все возможные тестовые примеры, а затем разрабатывают код для прохождения каждого тестового примера. С TDD код более надежен и прост в обслуживании. Простой поиск в Google показывает, насколько он популярен среди разработчиков, а иногда и среди компаний. Однако актуален ли TDD? Давай выясним!

    В 1996 году Chrysler создавал проект расчета заработной платы под названием Комплексная система компенсации (C3), но, как и многие другие корпоративные проекты, он находился в постоянном развитии и никогда не выходил на свет (фактически он был полностью отменен, когда Chrysler был приобретен Daimler- Бенц 2000 года — но это уже другая история!).

    Компания Chrysler привлекла Кента Бека, известного специалиста по Smalltalk, для оптимизации системы и повышения ее производительности. Когда Бек работал над проектом (который создавался на языке C3), он понял, что в процессе разработки Chrysler есть некоторые проблемы, и использовал возможность для внесения некоторых изменений.

    В 1999 году Бек написал книгу о своей методологии, которую он назвал Extreme Programming (XP). В своей книге « Extreme Programming Explained » он определил множество конструкций, которые впоследствии стали популярными в современных практиках программирования и разработки, наиболее известной из которых является TDD (разработка через тестирование).

    12 основных практик XP:

    1. Заказчики определяют функции приложения с помощью пользовательских историй.

    2. Команды XP рано запускают в производство небольшие выпуски кода.

    3. Команды XP используют единую систему имен и описаний.

    4. Команды делают упор на простой объектно-ориентированный код.

    5. Разработчики заранее пишут автоматизированные модульные тесты, а затем запускают их на протяжении всего проекта.

    6. Команды XP часто пересматривают и редактируют общий дизайн кода, этот процесс называется «рефакторингом».

    7. Программисты работают в парах бок о бок, постоянно обсуждая код друг друга.

    8. Все программисты коллективно владеют кодом и могут его изменять.

    9. Команды XP интегрируют код и выпускают его в репозиторий каждые несколько часов. Они никогда не держатся за это больше суток.

    10. Программисты работают всего 40 часов в неделю; нет сверхурочных.

    11. Представитель заказчика остается на месте на протяжении всего проекта разработки.

    12. Программисты должны следовать единому стандарту кодирования, чтобы весь код в системе выглядел так, как будто он был написан одним человеком.

    Кент Бек часто описывает свою роль как «открытие заново» TDD, а не как ее создание. Фактически, некоторые из этих методов использовались еще в 1960-х годах в проекте НАСА «Меркурий», первой программе пилотируемых космических полетов в Соединенных Штатах.

    Итак, если TDD использовался еще в 1960-х годах, актуален ли он в 21 веке?

    Мнения в отрасли

    В 2014 году Дэвид Хайнемайер Ханссон (он же DHH) опубликовал комментарий, который вызвал цепочку обсуждений и твитов по всему Интернету: «TDD мертв.Да здравствует тестирование ».

    В своей статье (на которую он ссылается в своем комментарии) он утверждает, что TDD наносит ущерб дизайну архитектуры, потому что заставляет разработчиков думать обо всех ситуациях, когда код может выйти из строя, без фактического написания самого кода. Иногда это нелогично для разработчика, а иногда противоречит процессу; тем не менее, это считается почти преступлением — не следовать ему, заставляя людей думать, что TDD — единственный правильный способ программирования.

    Он напоминает нам, что общий принцип TDD гласит: «Код, который сложно тестировать изолированно, плохо спроектирован.В этом случае «изоляция» означает, что единица кода должна быть независимой и отделенной от хранилищ данных для тестирования. Это означает, что вам необходимо создавать фиктивные объекты — имитирующие объекты всех объектов в вашей системе, которые могут действовать как объекты хранилища данных, хотя на самом деле они сами не являются объектами хранилища данных. Это позволяет вам протестировать только одну «единицу» вашей бизнес-логики без тестирования самого хранилища данных.

    На самом деле, однако, это вынуждает вас поддерживать не только бизнес-логику и тесты, но и сами макеты, что подрывает дизайн вашего приложения (как подробности DHH здесь).Это нападение на TDD привело к серии видеодебатов между DHH, Кентом Беком и Мартином Фаулером. Они довольно интересные и, конечно, очень самоуверенные. Их можно посмотреть здесь:

    — TW Hangouts | TDD мертв? — YouTube

    — TW Hangouts | TDD мертв? Часть II — YouTube

    — TW Hangouts | TDD мертв? Часть III — YouTube

    — TW Hangouts | TDD мертв? Часть V и VI — YouTube

    Вы также можете прочитать этот блог, чтобы получить полную информацию.

    Ян Купер придерживается более прагматичного подхода к TDD в своем популярном выступлении «TDD, где все пошло не так».«Он говорит, что TDD распространялся неправильно, что замедляло разработчиков; они, похоже, думали, что TDD означает тестирование каждой мельчайшей функциональности, тогда как на самом деле это означает тестирование функциональности в минимально возможной единице. Купер утверждает, что один из способов избежать этого — это переход от тестирования внутренних технических деталей к тестированию поведения пользователя.

    Заключение

    На собственном опыте я видел, как многие организации и «профессионалы» утверждали, что TDD абсолютно необходим для разработки программного обеспечения, но я никогда не видел, что это строго предписано.Разработчику или команде предстоит решить эту проблему. Это приводит к ситуациям, когда разработчики думают: «Я закончил, но мне просто нужно добавить тесты».

    Сочувствую. Как разработчик, я заметил, что TDD часто тормозит меня, мешает моему творчеству и кажется все более излишним по мере развития моей карьеры. Меня гораздо больше интересует решение проблем, чем обдумывание всех возможных вариантов отказа и последующее написание кода для удовлетворения этих сценариев. На самом деле, когда я кодирую, я могу столкнуться с совершенно другими тестами.

    На Dev.to есть отличная статья о TDD и производительности, и я настоятельно рекомендую вам прочитать ее, прежде чем формировать собственное мнение.

    Так что, возможно, TDD не умер — это просто необходимо для столь необходимой подтяжки лица!

    Сваати Какарла — соучредитель и технический директор Skcript. Ей нравится говорить и писать об эффективности кода, производительности и стартапах. В свободное время она находит утешение в йоге, езде на велосипеде и работе с открытым кодом.

    Подходит ли разработка через тестирование для вашего проекта? | Гунит Сингх | Agile Shake

    В 2003 году американский инженер-программист Кент Бек (создатель экстремального программирования) заново открыл идею концепции программирования Test First, которая является частью экстремального программирования. Разработка через тестирование — это автоматизированный процесс, управляемый тестированием, когда программист пишет тестовые примеры для достижения желаемого улучшения системы.

    Тестовый цикл разработки —

    Существуют различные способы использования TDD. Например, «Держите это просто и глупо» и «Вам это не понадобится». Кент Бек также предложил принцип дизайна, связанный с TDD: «Подделывайте, пока не сделаете это».

    1. Добавить тестовый пример
      При разработке через тестирование каждое новое требование начинается с тестового примера.Напишите краткий тестовый пример для функции. Разработчик должен понимать требования через пользовательские истории, а также понимать влияние на уже написанную функцию.
    2. Выполнить тест до отказа
      После первого выполнения тестового примера он завершится ошибкой по ожидаемой причине. Потому что вы не написали новый код, чтобы передать дело.
    3. Напишите код
      Напишите код для прохождения теста. На данном этапе код может быть несовершенным, но приемлемым для прохождения теста.Код не должен быть написан за пределами тестового примера.
    4. Снова запустить тест
      После написания кода повторно запустите тест еще раз, чтобы проверить соответствие вашим тестовым примерам. На этот раз тестовый пример должен пройти и не нарушить работу функции. В противном случае разработчику необходимо переписать код, чтобы пройти тест.
    5. Код рефакторинга
      По мере роста вашей кодовой базы вам следует проводить надлежащую очистку. Дублирование необходимо удалить. Разделите код на логические части для понимания или повторного использования другой функцией.Программист должен каждый раз повторно запускать тестовые примеры, чтобы убедиться, что функциональность не нарушается.
    6. Повторить
      Начните с другого тестового примера для следующей функции.

    Как и другие принципы проектирования, вы не можете использовать TDD для всех ситуаций.

    TDD не подходит для всех ситуаций. Не рекомендуется применять TDD при тестировании пользовательского интерфейса. Макеты субъективны и должны проверяться вручную. Пользовательский интерфейс постоянно меняется, и вы будете постоянно изменять тестовые примеры.
    Вы должны использовать TDD для проверки поведения, лежащего в основе этого пользовательского интерфейса.

    Почему бы не использовать TDD для пользовательского интерфейса
    — Тестовый код требует дополнительного обслуживания кода.
    — Превышение стоимости реализации функциональности.

    Всегда существует конфликт между краткосрочным развитием и долгосрочными целями развития. В краткосрочной перспективе у команды разработчиков не так много времени, чтобы сначала написать тестовые примеры. Они всегда приходят, чтобы начать писать код, и тестировщики проверяют работоспособность вручную.Разработчик исправит ошибку и поставит на тестирование, пока функционал не будет готов. Это хорошо для небольшого проекта. Но если говорить о долгосрочном развитии. Управлять выпусками очень утомительно из-за того, что тестирование выполняется вручную. Если разработчик начнет разработку нового кода, это может нарушить другие функции.

    Экстремальное программирование (XP): ценности, принципы и практика

    Время чтения: 12 минут

    С учетом того, что программная инженерия существует в такой быстро меняющейся среде, традиционные подходы к управлению проектами больше не работают.Это означает, что ИТ-специалисты должны найти новые способы решения часто меняющихся задач разработки.

    Разделяя эту идею и сосредотачиваясь на существующих методах инкрементальной разработки, 17 специалистов по программному обеспечению представили философию управления проектами Agile в 2001 году. Принципы гибкой, быстрой и ориентированной на сотрудничество разработки программного обеспечения были изложены в Agile Manifesto.

    Extreme Programming (XP) — одна из многочисленных гибких структур, применяемых ИТ-компаниями. Но его ключевая особенность — акцент на технических аспектах разработки программного обеспечения — отличает XP от других подходов.

    Инженер-программист Кен Бек представил XP в 90-х годах с целью найти способы быстро писать высококачественное программное обеспечение и иметь возможность адаптироваться к меняющимся требованиям клиентов. В 1999 году он усовершенствовал подходы к XP в книге Extreme Programming Explained: Embrace Change .

    XP — это набор инженерных практик. При выполнении этих практик разработчики должны выходить за рамки своих возможностей.Вот откуда взялось слово «крайность» в названии фреймворка. Чтобы лучше понять эти методы, мы начнем с описания жизненного цикла XP и ролей, задействованных в этом процессе.

    Процесс и роли экстремального программирования

    Фреймворк XP обычно включает 5 этапов или этапов процесса разработки, которые повторяются непрерывно:

    1. Планирование, первый этап, когда заказчик встречает команду разработчиков и представляет требования в форме пользовательских историй для описания желаемого результата. Затем команда оценивает истории и создает план выпуска, разбитый на итерации, необходимые для охвата требуемой функциональности часть за частью. Если одна или несколько историй не могут быть оценены, могут быть введены так называемые всплески , что означает, что необходимы дальнейшие исследования.
    2. Проектирование на самом деле является частью процесса планирования, но его можно выделить отдельно, чтобы подчеркнуть его важность. Это связано с одной из основных ценностей XP, которую мы обсудим ниже, — простотой.Хороший дизайн привносит в систему логику и структуру и позволяет избежать ненужных сложностей и дублирования.
    3. Кодирование — это этап, в течение которого фактический код создается путем реализации определенных практик XP, таких как стандарты кодирования, парное программирование, непрерывная интеграция и коллективное владение кодом (весь список описан ниже).
    4. Тестирование — это ядро ​​экстремального программирования. Это регулярная деятельность, которая включает как модульные тесты (автоматическое тестирование, чтобы определить, правильно ли работает разработанная функция), так и приемочные тесты (тестирование заказчиком для проверки того, что система в целом создана в соответствии с начальными требованиями).
    5. Прослушивание — это постоянное общение и обратная связь. Заказчики и менеджеры проектов участвуют в описании бизнес-логики и ожидаемой ценности.

    Кратко о жизненном цикле XP

    Такой процесс разработки предполагает сотрудничество между несколькими участниками, каждый из которых имеет свои собственные задачи и обязанности. Экстремальное программирование ставит людей в центр системы, подчеркивая ценность и важность таких социальных навыков, как общение, сотрудничество, отзывчивость и обратная связь.Итак, эти роли обычно связаны с XP:

    1. Ожидается, что клиенты будут активно участвовать в процессе разработки, создавая пользовательские истории, обеспечивая постоянную обратную связь и принимая все необходимые бизнес-решения, связанные с проектом.
    2. Программисты или разработчики — это члены команды, которые фактически создают продукт. Они несут ответственность за реализацию пользовательских историй и проведение пользовательских тестов (иногда отводится отдельная роль Tester ).Поскольку XP обычно ассоциируется с кросс-функциональными командами, набор навыков таких членов может быть разным.
    3. Трекеры или менеджеры связывают клиентов и разработчиков. Это не обязательная роль, и ее может выполнять один из разработчиков. Эти люди организуют встречи, регулируют обсуждения и отслеживают важные показатели эффективности.
    4. Тренеры могут быть включены в команды в качестве наставников, чтобы помочь в понимании практики XP. Обычно это внешний помощник или внешний консультант, который не участвует в процессе разработки, но уже использовал XP раньше и поэтому может помочь избежать ошибок.

    Ценности и принципы экстремального программирования

    В конце 90-х Кен Бек резюмировал набор определенных ценностей и принципов, которые описывают экстремальное программирование и приводят к более эффективному сотрудничеству внутри команды и, в конечном итоге, к более высокому качеству продукта.

    Ценности и принципы XP

    Ценности экстремального программирования

    XP имеет простые правила, основанные на 5 значениях, которые определяют командную работу:

    1. Связь. Все члены команды работают сообща на всех этапах проекта.
    2. Простота. Разработчики стремятся писать простой код, повышающий ценность продукта, так как он экономит время и силы.
    3. Обратная связь. Члены команды часто поставляют программное обеспечение, получают отзывы о нем и улучшают продукт в соответствии с новыми требованиями.
    4. Респект. Каждый человек, участвующий в проекте, способствует достижению общей цели.
    5. Мужество. Программисты объективно оценивают собственные результаты без оправданий и всегда готовы отреагировать на изменения.

    Эти ценности представляют собой особый образ мышления мотивированных командных игроков, которые делают все возможное для достижения общей цели. Принципы XP проистекают из этих ценностей и отражают их более конкретно.

    Принципы экстремального программирования

    Большинство исследователей обозначают 5 принципов опыта как:

    1. Быстрая обратная связь. Члены команды понимают данную обратную связь и сразу же на нее реагируют.
    2. Предполагаемая простота. Разработчикам необходимо сосредоточиться на работе, которая важна в данный момент, и следовать принципам YAGNI (Вам это не понадобится) и DRY (Don’t Repeat Yourself).
    3. Инкрементальные изменения. Небольшие изменения, внесенные в продукт постепенно, работают лучше, чем сразу большие изменения.
    4. Принятие перемен. Если клиент считает, что продукт необходимо изменить, программисты должны поддержать это решение и спланировать, как реализовать новые требования.
    5. Качественная работа. Команда, которая хорошо работает, производит ценный продукт и гордится им.

    Обсудив основные ценности и принципы XP, давайте подробнее рассмотрим практики, заложенные в этой среде.

    Экстремальные практики программирования

    Практики XP — это набор определенных правил и методов, которые отличает его от других методологий. При использовании вместе они усиливают друг друга, помогают снизить риски процесса разработки и приводят к ожидаемому качественному результату.XP предлагает использовать 12 практик при разработке программного обеспечения, которые можно разделить на четыре группы.

    Основные практики XP

    Разработка через тестирование

    Можно ли быстро написать четкий код? По словам практикующих специалистов, ответ — да. Качество программного обеспечения зависит от коротких циклов разработки, которые, в свою очередь, позволяют получать частые отзывы. И ценная обратная связь приходит от хорошего тестирования Команды XP практикуют технику разработки через тестирование (TDD), которая предполагает написание автоматизированного модульного теста перед самим кодом. Согласно этому подходу, каждый фрагмент кода должен пройти проверку, чтобы быть выпущенным. Таким образом, разработчики программного обеспечения сосредотачиваются на написании кода, который может выполнять необходимую функцию. Таким образом, TDD позволяет программистам использовать немедленную обратную связь для создания надежного программного обеспечения. Вы можете узнать больше об улучшении тестирования программного обеспечения в нашей специальной статье.

    Игра в планирование

    Это встреча, которая происходит в начале итерационного цикла. Команда разработчиков и заказчик собираются вместе, чтобы обсудить и утвердить функции продукта.В конце игры-планирования разработчики планируют предстоящую итерацию и выпуск, назначая задачи для каждой из них.

    Клиент на месте

    Как мы уже упоминали, согласно XP, конечный заказчик должен полностью участвовать в разработке. Заказчик должен постоянно присутствовать, чтобы отвечать на вопросы команды, расставлять приоритеты и при необходимости разрешать споры.

    Программирование пар

    Эта практика требует, чтобы два программиста совместно работали над одним и тем же кодом.В то время как первый разработчик сосредотачивается на написании, второй просматривает код, предлагает улучшения и исправляет ошибки в процессе. Такая командная работа приводит к созданию высококачественного программного обеспечения и более быстрому обмену знаниями, но занимает примерно на 15 процентов больше времени. В этом отношении для долгосрочных проектов разумнее попробовать парное программирование.

    Рефакторинг кода

    Чтобы повысить эффективность бизнеса с помощью хорошо разработанного программного обеспечения на каждой короткой итерации, команды XP также используют рефакторинг. Цель этой техники — постоянно улучшать код.Рефакторинг заключается в устранении избыточности, устранении ненужных функций, повышении согласованности кода и в то же время разделении элементов. Держите свой код чистым и простым, чтобы его можно было легко понять и изменить при необходимости. посоветует любой член команды XP.

    Парное программирование в итерационном цикле XP, источник: extremeprogramming.org

    Непрерывная интеграция

    Разработчики всегда поддерживают полную интеграцию системы.Команды XP переводят итеративную разработку на новый уровень, поскольку они фиксируют код несколько раз в день, что также называется непрерывной доставкой. Практики XP понимают важность общения. Программисты обсуждают, какие части кода можно использовать повторно или совместно использовать. Таким образом, они точно знают, какие функции им нужно развивать. Политика общего кода помогает устранить проблемы интеграции. Кроме того, автоматическое тестирование позволяет разработчикам обнаруживать и исправлять ошибки перед развертыванием.

    Небольшие релизы

    Эта практика предполагает быстрый выпуск MVP и дальнейшее развитие продукта путем небольших и дополнительных обновлений.Небольшие выпуски позволяют разработчикам часто получать отзывы, рано обнаруживать ошибки и отслеживать, как продукт работает в производственной среде. Один из способов сделать это — практика непрерывной интеграции (CI), о которой мы упоминали ранее.

    Простой дизайн

    Лучший дизайн программного обеспечения — самый простой, который работает. Если обнаружится какая-либо сложность, ее следует удалить. Правильный дизайн должен пройти все тесты, не иметь повторяющегося кода и содержать как можно меньше методов и классов. Он также должен четко отражать намерения программиста.

    Специалисты

    XP подчеркивают, что шансы упростить конструкцию выше после того, как продукт находится в производстве в течение некоторого времени. Дон Уэллс советует писать код для тех функций, которые вы планируете реализовать сразу, вместо того, чтобы писать его заранее для других будущих функций: «Лучший подход — создать код только для тех функций, которые вы реализуете, пока вы ищете достаточно знаний, чтобы выявить простейшие. дизайн. Затем постепенно реорганизуйте код, чтобы реализовать свое новое понимание и дизайн.”

    Стандарты кодирования

    Команда должна иметь общие наборы практик кодирования, используя одни и те же форматы и стили для написания кода. Применение стандартов позволяет всем членам команды с легкостью читать, совместно использовать и реорганизовывать код, отслеживать, кто работал над определенными частями кода, а также ускорять обучение других программистов. Кодекс, написанный по одним и тем же правилам, поощряет коллективную собственность.

    Коллективный код собственности

    Эта практика декларирует ответственность всей команды за проектирование системы.Каждый член команды может просматривать и обновлять код. Разработчики, у которых есть доступ к коду, не попадут в ситуацию, когда они не знают, куда добавить новую функцию. Практика помогает избежать дублирования кода. Внедрение коллективного владения кодом побуждает команду к большему сотрудничеству и свободе придумывать новые идеи.

    Системная метафора

    Системная метафора означает простой дизайн, обладающий набором определенных качеств. Во-первых, дизайн и его структура должны быть понятны новым людям.Они должны иметь возможность начать работу над этим, не тратя слишком много времени на изучение спецификаций. Во-вторых, названия классов и методов должны быть последовательными. Разработчики должны стремиться называть объект так, как если бы он уже существовал, чтобы сделать общий дизайн системы понятным.

    40-часовая неделя

    Проекты

    XP требуют, чтобы разработчики работали быстро, эффективно и сохраняли качество продукта. Чтобы соответствовать этим требованиям, они должны чувствовать себя хорошо и отдохнувшими. Сохранение баланса между работой и личной жизнью предотвращает выгорание профессионалов.В XP оптимальное количество рабочих часов не должно превышать 45 часов в неделю. Одна сверхурочная работа в неделю возможна только в том случае, если через неделю ее не будет.

    Преимущества и недостатки XP

    Практика

    XP обсуждалась на протяжении десятилетий, поскольку ее подход и методы довольно противоречивы по ряду аспектов и не могут быть применены в любом проекте. Здесь мы попытаемся определить плюсы и минусы методологии XP.

    XP в двух словах о плюсах и минусах

    Экстремальные преимущества программирования

    Итак, среда XP может быть полезной и помочь сократить время и затраты на разработку по следующим причинам:

    • Непрерывное тестирование и рефакторинг помогают создать стабильных и хорошо работающих систем с минимальной отладкой;
    • Значение
    • Simplicity подразумевает создание четкого и краткого кода , который легко читать и при необходимости изменять в будущем;
    • Минималистичный итеративный подход к разработке гарантирует, что работоспособные результаты могут быть получены очень скоро и созданы только необходимые функции;
    • Документация сокращена на , поскольку объемные документы с требованиями заменены пользовательскими историями;
    • Нет или сверхурочно очень мало практикуется;
    • Постоянное общение обеспечивает высокий уровень видимости и подотчетности и позволяет всем членам команды следить за ходом проекта;
    • Парное программирование показало продуктов более высокого качества с меньшим количеством ошибок; большинство участников исследования также сообщили, что им больше нравится такое сотрудничество и они чувствуют себя более уверенно в своей работе;
    • Привлечение клиентов гарантирует их удовлетворение , поскольку их участие в процессе разработки и тестирования может напрямую влиять на результат, получая именно то, что они хотели.

    Крайние недостатки программирования

    С другой стороны, XP имеет ряд недостатков, которые необходимо учитывать при принятии решения о том, какой фреймворк выбрать для вашего следующего проекта:

    • Во многих случаях заказчик не имеет четкого представления о конечном результате, что делает почти нереальным точную оценку объема, стоимости и времени ;
    • Регулярные встречи с клиентами часто занимают много времени , которое вместо этого можно было бы потратить на написание кода;
    • Документация может быть скудной и не иметь четких требований и спецификаций, что приводит к смещению объема проекта;
    • Быстрый переход от традиционных методов разработки программного обеспечения к экстремальному программированию требует значительных культурных и структурных изменений ;
    • Парное программирование занимает больше времени и не всегда работает правильно из-за человеческого фактора и несовместимости персонажей;
    • XP лучше всего работает с совместно расположенными командами и клиентами, присутствующими лично для проведения личных встреч, ограничивая его применение распределенными командами;
    • Иногда у клиентов нет ни желания, ни времени, ни опыта для участия в разработке продукта. Принимая во внимание сжатые сроки, это может стать источником стресса , так как либо не предоставляется ценная обратная связь, либо нетехнический представитель пытается управлять техническими специалистами, мало или совсем не разбираясь в процессе;
    • Некоторые авторы также упоминают чрезмерное внимание коду, а не дизайну, отсутствие контроля качества, дублирование кода и плохие результаты с неопытными разработчиками.

    Любая компания может применять принципы XP в своих проектах; Однако важно понимать как хорошие, так и плохие стороны.Читайте дальше, чтобы узнать, чем XP отличается от других методологий и когда применение ее методов будет лучшим выбором.

    Сравнение XP с другими фреймворками

    Как мы упоминали выше, XP является частью гибкой методологии. Он разделяет основные принципы Agile, то есть частые выпуски, короткие циклы разработки, постоянное общение с заказчиком, кросс-функциональные команды и так далее. По этой причине XP часто путают с другими популярными фреймворками Agile, такими как Scrum, Kanban и Lean. Ознакомьтесь с нашим подробным техническим описанием, чтобы получить более подробную информацию, или инфографикой, чтобы получить краткое описание основных гибких методов. Здесь мы кратко сравним их и посмотрим, в чем заключаются основные различия.

    Но прежде чем мы углубимся, важно отметить, что XP на самом деле не является структурой управления проектами, хотя многие ее практики частично совпадают с практиками из области управления проектами. Таким образом, его основное внимание уделяется техническим аспектам разработки и реализации конкретных практик, а не управленческой и организационной сторонам.

    XP против Scrum, Kanban и Lean в двух словах

    Экстремальное программирование против Scrum

    Scrum обычно ассоциируется с самоорганизующимися командами. Также обычно есть спринты продолжительностью от 2 до 4 недель, в то время как итерации XP короче — от 1 до 2 недель. Кроме того, XP гораздо более гибок с возможными изменениями в итерациях, в то время как Scrum не позволяет вносить какие-либо изменения после того, как задан бэклог спринта. Еще одно отличие состоит в том, что в XP заказчик расставляет приоритеты по функциям и решает порядок их разработки, но в Scrum команда сама определяет, над чем работать в первую очередь.

    Основные роли

    Scrum — это владелец продукта, мастер Scrum и команда Scrum, которые отличаются от ролей в XP.

    Однако нет необходимости выбирать между XP и Scrum. Включение практик XP и методов Scrum считается достаточно эффективным, поскольку XP фокусируется на инженерных аспектах, а Scrum организует процесс.

    Экстремальное программирование против Канбан

    Канбан уделяет большое внимание визуализации процесса разработки и строго ограничивает количество функций, разрабатываемых одновременно.Для него также характерен непрерывный рабочий процесс, в то время как XP имеет отдельные итерации, хотя оба предлагают небольшие частые выпуски и высокий уровень гибкости и адаптируемости к меняющимся требованиям.

    Роли в Канбане строго не определены.

    Экстремальное программирование против Lean

    На самом деле сложно сравнивать XP и Lean, потому что последний является скорее философией или подходом к процессу разработки и приносящим пользу клиентам. Его основные принципы включают устранение отходов, принятие решений как можно позже, доставку как можно раньше и т. Д.Таким образом, Lean уделяет основное внимание не ограниченным по времени итерациям или конкретным методам разработки, как в XP, а в основном быстрой доставке MVP и сокращению потерь времени.

    Когда использовать XP

    Теперь, когда мы обсудили плюсы и минусы методологии XP и определили ее место среди других гибких фреймворков, мы можем поговорить о тех случаях, когда это применимо. Важно убедиться, что размер, структура и опыт компании, а также база знаний сотрудников позволяют применять методы XP.Вот факторы, которые следует учитывать.

    Высокоадаптивная разработка. Некоторые системы не имеют постоянных функциональных возможностей и подразумевают частые изменения. XP был разработан, чтобы помочь командам разработчиков адаптироваться к быстро меняющимся требованиям.

    Рискованные проекты. Команды, применяющие практики XP, с большей вероятностью избегут проблем, связанных с работой над новой системой, особенно когда заказчик устанавливает строгие сроки выполнения проекта. Кроме того, высокий уровень взаимодействия с клиентами снижает риск того, что они не примут конечный продукт.

    Небольшие команды. Практики XP эффективны для команд, не превышающих 12 человек. Управлять такими группами, как правило, проще, общение более эффективно, а на проведение собраний и мозговых штурмов уходит меньше времени.

    Автоматизированное тестирование. Еще одним фактором, который может повлиять на выбор XP, является способность разработчиков создавать и запускать модульные тесты, а также наличие необходимых инструментов тестирования.

    Готовность принять новую культуру и знания. XP отличается от традиционных подходов к разработке программного обеспечения, и то, как следует реализовать некоторые из его практик, может быть неочевидным. Поэтому важно, чтобы ваша организация и члены команды были готовы принять изменения. Также стоит пригласить опытного тренера, если вы ранее не работали с XP.

    Участие клиентов. Поскольку XP требует, чтобы клиенты, разработчики и менеджеры работали бок о бок, убедитесь, что ваш клиент всегда доступен для ввода данных до завершения проекта.

    Принципы гибкости становятся все более популярными, поскольку доказывают свою эффективность. Несмотря на то, что экстремальное программирование не является самой распространенной методологией, оно предлагает множество разумных приемов, которые могут принести пользу при разработке программного обеспечения и которые стоит рассмотреть для внедрения в ваши проекты.

    Test First и разработка через тестирование: есть ли разница?

    Тестирование — это предсказание будущего!

    «Разработка сначала тестирование» — это старая концепция, которую заново открыл и задокументировал Кент Бек в книге «Объяснение экстремального программирования» (глава 13 во втором издании).Разработка с предварительным тестированием (TFD) — это подход к разработке, при котором разработчики не пишут ни одной строчки кода до тех пор, пока они не создадут тестовые примеры, необходимые для доказательства того, что единица работы решает бизнес-проблему и технически правильна при модульном тестировании. уровень. Отвечая на вопрос на Quora, Бек описал, как читал о разработчиках, использующих подход «сначала тестирование», еще до XP и Agile. Разработка через тестирование — это разработка, ориентированная на тестирование, в сочетании с дизайном и рефакторингом кода. Как разработка, ориентированная на тестирование, так и разработка, основанная на тестировании, полезны для улучшения качества, морального духа и доверия, и хотя оба они связаны, они не одинаковы.

    Еще немного истории. Программирование / разработка «сначала тестирование» было представлено (или повторно представлено) в качестве основной практики экстремального программирования в главе 7 документа «Объяснение экстремального программирования» (стр. 50). Разработка через тестирование как метод была описана в книге Test Driven Development: By Example (2003, возможно, мы перечитаем эту книгу в будущем) и представляет собой эволюцию концепции «сначала тестирование».

    Тестовая разработка состоит из нескольких основных шагов.

    1. Разработчик принимает единицу работы и пишет набор тестов, которые докажут, что код действительно работает правильно на уровне единицы.
    2. Затем они запускают тесты. Тесты должны завершиться неудачно, потому что код для решения бизнес-задачи, встроенный в единицу работы, не был написан. Если тесты пройдены, перепишите их так, чтобы они не прошли (при условии, что кто-то другой не устранил проблему).
    3. Напишите код, необходимый для решения проблемы. Помните, что простота — главное, и пишите достаточно кода, чтобы решить проблему.
    4. Снова запустите набор тестов. Если тесты пройдены, вы закончили; однако, если ЛЮБОЙ из тестов не прошел, вернитесь к шагу 3 и исправьте код.Повторяйте шаги третий и четвертый, пока все тесты не пройдут.

    Разработка через тестирование, TDD (также известная как проектирование через тестирование) добавляет один дополнительный «шаг» к процессу после модульных тестов.

    1. Выполните рефакторинг кода и дизайна, чтобы максимально упростить и то и другое, и исключить возможное дублирование.

    По мере написания и рефакторинга кода дизайн развивается на основе отзывов, собранных по одной истории за раз. TDD объединяет практику программирования и модульного тестирования с эволюционным дизайном, разрушая разделение ролей, которое сокращает совместную работу и увеличивает стоимость качества.Концептуальный прогресс; однако есть организации, такие как банкоматы, автомобильные товары и медицинские устройства, для которых концепция эволюционного дизайна — это слишком далеко, и единственным вариантом остается сначала тестирование.

    В TDD в примере Бек определяет два «правила» для TDD, которые не были прямо определены во введении TFD. Первый — никогда не писать ни строчки кода до тех пор, пока вы не напишете автоматический тест, который дает сбой, а второй — избегать дублирования. TFD признала необходимость сочетания ручных и автоматизированных модульных тестов.Оба эти правила могут применяться (и должны применяться, если возможно) как для TDD, так и для TFD, и в конечном итоге являются просто хорошей практикой.