Предпосылка приоритета трансформации
Предпосылка приоритета трансформации ( TPP ) — это подход к программированию, разработанный Робертом К. Мартином (дядя Боб) как усовершенствование, позволяющее сделать процесс разработки через тестирование (TDD) более простым и эффективным для программиста.
Предпосылка приоритета трансформации гласит, что следует отдавать предпочтение более простым преобразованиям:
[...] У рефакторинга есть аналоги, называемые трансформациями . Рефакторинг — это простые операции, которые изменяют структуру кода, не меняя его поведения. Преобразования — это простые операции, изменяющие поведение кода. Преобразования могут использоваться как единственное средство для прохождения текущего провального теста в
red/green/refactor
цикл. Преобразования имеют приоритет или предпочтительный порядок, который, если поддерживать его путем упорядочения тестов, предотвратит тупики или длительные простои в работе.red/green/refactor
цикл.- «Дядя Боб» Мартин , «Приоритетная предпосылка трансформации», [1] Блог дяди Боба
Этот подход позволяет программисту выполнять простейшие действия для целей разработки через тестирование, поскольку он может явно ссылаться на список преобразований и отдавать предпочтение более простым преобразованиям (из верхней части списка) по сравнению с теми, которые расположены ниже в списке. первый экземпляр.
Посылка приоритета трансформации — это название, данное ментальной структуре, которую разработчики TDD создают с течением времени, чтобы сбалансировать ваш код, чтобы он не был слишком конкретным, а не универсальным. Идея состоит в том, что с каждым примером, который вы добавляете в тесты, вы перемещаете список приоритетов преобразования вверх, делая ваш код более универсальным и способным обрабатывать больше случаев. Напротив, ваши тесты с большим количеством примеров становятся все более конкретными и сосредоточенными на проблеме. Итак, вы начинаете с константы для вашего первого теста, для следующего теста вы можете изменить эту константу на «если», а на следующем шаге вы можете ввести цикл. Каждый раз вы продвигаетесь вверх по приоритетному помещению. Целью следования этой структуре является избежание случайных осложнений и добавление только к существенным осложнениям. Каждый шаг — это наименьшее возможное изменение, которое вы можете внести, чтобы реализовать только код, необходимый для реализации примеров, приведенных в тесте.
— Билли Томпсон, Предпосылка приоритета преобразования — тема дня № 21 в области разработки программного обеспечения [2]
Преобразования [3]
[ редактировать ]- ({} → ноль) вообще нет кода → код, в котором используется ноль
- (ноль → константа)
- (константа → константа+) от простой константы к более сложной константе
- (константа → скаляр) замена константы переменной или аргументом
- (утверждение → утверждения), добавляя больше безусловных утверждений.
- (безусловное → if) разделение пути выполнения
- (скаляр → массив)
- (массив → контейнер)
- (оператор → хвостовая рекурсия)
- (если → пока)
- (оператор → нехвостовая рекурсия)
- (выражение → функция) замена выражения функцией или алгоритмом
- (переменная → присваивание) замена значения переменной.
- (case) добавление случая (или еще) к существующему переключателю или если
Дядя Боб также прямо заявил: «Вероятно, есть и другие», [1] и
[Я] думаю, что список приоритетов зависит от языка... Например, в Java мы могли бы переместить (if → while) и (переменная → присваивание) выше (оператор → хвостовая рекурсия) , чтобы итерация всегда была предпочтительнее рекурсии. , и присваивание предпочтительнее передачи параметров... потому что Java не является функциональным языком.
- Роберт Мартин, запись в блоге «Фиб. Предпосылка TP» [3]
Как использовать трансформации на практике
[ редактировать ]Ридлхувер поясняет, что Преобразования помогают вам выбрать, какие тесты писать и в каком порядке.
[Преобразования] на самом деле могут помочь нам выбрать, какие тесты и в каком порядке следует писать. Например, если мы решим написать тест, который требует от нас добавления оператора if в наш код, этот тест требует преобразования «безусловный -> if». Зная это, мы можем попытаться подумать о других тестах, которые полагаются исключительно на преобразования, расположенные выше в списке. Конечной наградой является то, что, написав наши тесты с использованием порядка приоритетов преобразований, мы никогда не дойдем до точки, когда один тест заставит нас переписать весь метод.
— Алан Ридлхувер, «Посылка приоритета трансформации» [4]
Кори Хейнс представляет живую демонстрацию кодирования ( Ката римских цифр ), в которой он решает задачу кодирования с использованием преобразований.
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Мартин, Роберт (2010). «Приоритет трансформации» .
- ^ Томпсон, Билли (2021). «Приоритетная предпосылка трансформации» .
- ^ Перейти обратно: а б Мартин, Роберт (2010). «Фиб. Предпосылка ТП» .
- ^ Ридлхувер, Алан (2011). «Приоритетная предпосылка трансформации» .
- Ката римскими цифрами с комментариями
- Применена предпосылка приоритета трансформации
- Посылка приоритета трансформации, объясненная дядей Бобом