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



Имеет ли смысл писать тот или иной тест? Это зависит от того, насколько аккуратно вы оцените MTBF. Если обстоятельства требуют, чтобы вы увеличили MTBF от 10 лет до 100 лет, значит, имеет смысл уделить время для разработки самых маловероятных и чрезвычайно редко возникающих ситуаций (если, конечно, вы не можете каким-либо иным образом доказать, что подобные ситуации никогда не могут возникнуть).

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


TriangleTest

testEquilateral

self assert: (self evaluate: 2 side: 2 side: 2) = 1


testIsosceles

self assert: (self evaluate: 1 side: 2 side: 2) = 2


testScalene

self assert: (self evaluate: 2 side: 3 side: 4) = 3


testIrrational

[self evaluate: 1 side: 2 side: 3]

on: Exception

do: [: ex | ^self].

self fail


testNegative

[self evaluate: -1 side: 2 side: 2]

on: Exception

do: [: ex | ^self].

self fail


testStrings

[self evaluate: ‘a’ side: ‘b’ side: ‘c’]

on: Exception

do: [: ex | ^self].

self fail


evaluate: aNumber1 side: aNumber2 side: aNumber3

| sides |

sides:= SortedCollection

with: aNumber1

with: aNumber2

with: aNumber3.

sides first <= 0 ifTrue: [self fail].

(sides at: 1) + (sides at: 2) <= (sides at: 3) ifTrue: [self fail].

^sides asSet size

Когда следует удалять тесты?

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

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

• Второй критерий – это коммуникация. Если у вас есть два теста, которые тестируют один и тот же участок кода, однако читателем эти тесты рассматриваются как два различных сценария, сохраните оба теста.

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