Tracer Bullets против прототипов - PullRequest
       6

Tracer Bullets против прототипов

17 голосов
/ 29 октября 2010

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

Спасибо

Ответы [ 5 ]

20 голосов
/ 16 октября 2013

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

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

Во многом это мое собственное понимание концепций, поэтому, пожалуйста, прочитайте критически.

Как они похожи

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

Чем они отличаются

Две методологии различаются по двум основным причинам: какие неизвестные они пытаются исследовать и какие принципы им руководят.

Разница первая: что они исследуют

Опытные образцы изучают детали реализации . Будете ли вы использовать SQL или NoSQL бэкэнд? Быстро издевайтесь над ними обоими, чтобы сделать сравнение. Можете ли вы ежедневно поставлять 10 000 whoozits на главный сервер? Подбери маленький сценарий и попробуй.

Tracer bullets исследуют выполнимость решения . Как только вы узнаете подробности реализации, выберите один автономный компонент и дайте ему вращение. Создаете приложение для управления проектами? Выделите один кусок, как списки дел, и стреляйте в это.

В процессе разработки продукта вы хотите выполнять итерацию как можно быстрее, поэтому вам следует быстро начать съемку, чтобы понять, не попадаете ли вы в цель. «Трассирующие пули» - это отзывы акционеров!

Разница вторая: принципы

Основным принципом, управляющим прототипами, является «сделай сам». Это быстро, это грязно, это дает результат (обычно информацию) и выбрасывается. Не добавляйте ничего, что мешает: получите информацию и выйдите.

Основными принципами, которыми руководствуются трассирующие пули, являются полнота и простота. Причина простоты проста: вы хотите увидеть результаты быстро. Полнота немного сложнее. Это признание реальности: если у вас есть продукт, который «работает», вы должны немедленно приложить свои усилия в другом месте. Если продукт некачественный, не имеет документации или использует ярлыки, вы будете жить с этими недостатками в течение длительного времени. Сделай правильно с первого раза!

Вы можете заметить, что существует много синергизма между идеей полной трассирующей пули и идеей другого прагматического программиста "Нет сломанной Windows".

Преимущества

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

11 голосов
/ 29 октября 2010

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

Код трассировки не подлежит уничтожению: вы пишете его на хранение. Он содержит все проверки ошибок, которые есть у любого производственного кода. Это просто не полностью функционально.

Где прототип может быть выброшен, это не мое прочтение того, что они защищают в этом конкретном эссе.

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

5 голосов
/ 12 сентября 2013

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

Tracer Bullets: маркеры Tracer используются для «Skeleton Applications», которые являются просто оболочками приложений, которые не содержат большой (если вообще есть) функциональности, но проходят весь жизненный цикл программы. Т.е. соединяется с клиентом, соединяется с базой данных, запрашивает базу данных (но вы на самом деле не заботитесь о данных). Скелетное приложение - это в основном фреймворк для вашего приложения. После разработки каркасного приложения вы используете маркеры трассировки для определения основных компонентов вашего приложения. Для меня это выходит за рамки простого рассмотрения того, какую функциональность вы хотите реализовать. Как хорошая практика, и на самом деле то, что я делаю на работе в качестве инженера-программиста, я думаю, что маркеры трассировщика в большей степени основаны на ваших модульных тестах (которые вы должны иметь для любого приложения, которое вы разрабатываете). Если вы точно определите модульные тесты, которые фиксируют ВСЕ функциональные возможности данной пользовательской истории, это работает как очень очень важная трассирующая пуля по двум причинам: 1) Когда вы начинаете модифицировать каркас вашего кода, если у вас есть точные модульные тесты, настроенные для каждой из функциональных возможностей данной пользовательской истории, когда вы вернетесь к изменению кода (для этого на самом деле предназначена ваша трассировочная пуля) , чем вы ЗНАЕТЕ, что вы не нарушаете ни одну из текущих функциональных возможностей или любых других уже созданных функциональных возможностей (потому что ваши тесты сломаются, если вы каким-либо образом нарушали свой код). 2) Если вы создаете новую функцию, как в метафоре трассировщика пистолета, используемой в этой статье , ваши тесты покажут, насколько точны ваши «трассирующие пули» для данной функции , Таким образом, если вы намереваетесь, чтобы какая-то функция выполняла определенное действие, и вы хорошо смоделировали это в своих модульных тестах, если ваш код не дает желаемого результата, вы можете легко вернуться и изменить код, чтобы получить более точный вывод. По сути, маркеры трассировки (инкапсулированные в ваших тестовых примерах) покажут вам, насколько точны ваши программные решения.

Итак, в итоге, прототипы предназначены для проверки того, ВОЗМОЖНО ли решение, а Tracer Bullets - для проверки того, насколько ваше текущее решение соответствует идеальному решению, которое вы хотите создать.

Для получения дополнительной информации о модульном тестировании я бы рекомендовал изучить Test Driven Development (TDD) .

Я надеюсь, что все это имеет смысл и полезно. Дайте знать, если у вас появятся вопросы! Джош

4 голосов
/ 29 октября 2010

См. это .Я думаю, что будет справедливо сказать, что трассирующие пули - это просто метафора, помогающая объяснить ценность прототипов.Я не думаю, что есть разница.

1 голос
/ 09 октября 2016

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

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

...