Увод у развој тест вожње (ТДД)
Замислите сценарио у којем желите да напишете следећу функцију као део неког већег пројекта:
ИН рите функцију да врати тип троугла на основу вредности дужине 3 стране троугла. Хајде да то мало олакшамо претпоставком да је тест за улазни тип података већ постављен тако да добијате само нумеричке вредности за рад.
претварање инт у дуплу јава
Ситуација изгледа лако. Наставите и напишите функцију која изгледа отприлике овако -
алгоритам:
Input : 3 numeric values
Output : 1 string stating type of triangle
Function : triangleType (side1 side2 side3)
Start :
1. If side1 == side2 == side3
Then Return Equilateral Triangle
2. Else if side1 == side2 or side1 == side3 or side2 == side3
Then Return Isosceles Triangle
3. Else
Return Scalar Triangle
Stop
Након што завршите функцију, дато вам је неколико тврдњи које треба да извршите. И на ваше изненађење откривате да је само 50% случајева прошло.
Хајде да погледамо тест изјаве. Они који пролазе су:
1. Потврдите да ли је (Стринг_тоЛоверЦасе(триангле_типе(678))==скаларни троугао) = Тачно
2. Потврдите да ли је (Стринг_тоЛоверЦасе(триангле_типе(666))==једнакостранични троугао) = Тачно
3. ассерт(Стринг_тоЛоверЦасе(триангле_типе(676))==једнакокраки троугао) = Тачно
Па ствари изгледају добро до овде. Али они који не успевају су:
4. Потврдите да ли је (Стринг_тоЛоверЦасе(триангле_типе(000))==није троугао) = Нетачно
5. Потврдите да ли је (Стринг_тоЛоверЦасе(триангле_типе(-6-7-8))==није троугао) = Нетачно
6. Потврдите да ли је (Стринг_тоЛоверЦасе(триангле_типе(528))==није троугао) = Нетачно
- У 4 улазне вредности исказа су (000). Сада знамо да (000) формира тачку, а не троугао. У ствари, ако је било која улазна вредност нула, троугао није могућ. Али у нашем случају то ће вратити једнакостранични троугао!
- Такође и 5 изјава нас подсећа да дужина никада не може бити негативна вредност. Видите скалу дужине -30 цм. Дакле, ако имамо чак једну -ве вредност дужине троугао није могућ. Али у нашем случају у зависности од вредности може да врати било који од 3 резултата. Овде враћа скалар.
- Шта је сада са 6 изјава. Све вредности су >= 0 и сигурно је скаларни троугао. Или јесте? Запамтите правило да је у троуглу збир било које две стране увек већи или једнак 3.
Овде видимо за:
8 + 2 > 5
8 + 5 > 2
5 + 2 > 8
Излаз :
садржи питхон
True
True
False
Пада на тесту троугла. Дакле, дужине (258) не чине троугао.
Дакле, оно што нам треба је нека врста провере троугла на месту која нам говори да ли је оно што имамо чак троугао или не. Као део решења пишете још једну функцију која изгледа овако:
алгоритам:
Input : 3 sides of the triangle
Output : Boolean value: True if 3 sides form a triangle false otherwise
Function : triangleValidator(side1 side2 side3)
Start
1. If (side1 <= 0 or side2 <= 0 or side3 <= 0) and
(side2 + side3 >= side1) and
(side3 + side1 >= side2) and (side1 + side2 >= side3)
then return True
3. Return False
Stop
Наша претходна функција сада укључује 2 додатне линије на почетку и вола! сви тестови сада пролазе.
Ово је само једноставан пример сценарија који нас подсећа да када пишемо код на нивоу производње морамо бити пажљиви чак и са једноставним стварима. Имајући на уму једноставне ивичне случајеве и проверавајући једнообразне низове, повећали смо покривеност тестом и учинили да наш програм даје математички тачније резултате.
Испод је имплементација горњег приступа:
лоцалдатетиме јаваPython3
# Check if given sides form a triangle or not def triangleValidator(side1 side2 side3): if side1 <= 0 or side2 <= 0 or side3 <= 0: return False elif (side1 + side2 >= side3) and (side2 + side3 >= side1) and (side3 + side1 >= side2): return True return False # Return the type of triangle def triangleType(side1 side2 side3): # If not a triangle return 'Not a triangle' if triangleValidator(side1 side2 side3) == False: return 'Not A Triangle' # Else perform type checking if side1 == side2 == side3: return 'Equilateral Triangle' elif (side1 == side2) or (side2 == side3) or (side3 == side1): return 'Isosceles Triangle' return 'Scalar Triangle' def call(): print(triangleType(678)) print(triangleType(666)) print(triangleType(676)) print(triangleType(000)) print(triangleType(-6-7-8)) print(triangleType(528)) if __name__=='__main__': call()
JavaScript // Check if given sides form a triangle or not function triangleValidator(side1 side2 side3) { if (side1 <= 0 || side2 <= 0 || side3 <= 0) { return false; } else if (side1 + side2 > side3 && side2 + side3 > side1 && side3 + side1 > side2) { return true; } return false; } // Return the type of triangle function triangleType(side1 side2 side3) { // If not a triangle return 'Not a triangle' if (triangleValidator(side1 side2 side3) === false) { return 'Not A Triangle'; } // Else perform type checking if (side1 === side2 && side2 === side3) { return 'Equilateral Triangle'; } else if (side1 === side2 || side2 === side3 || side3 === side1) { return 'Isosceles Triangle'; } return 'Scalar Triangle'; } // Assertions console.assert(triangleType(6 7 8).toLowerCase() === 'scalar triangle'); console.assert(triangleType(6 6 6).toLowerCase() === 'equilateral triangle'); console.assert(triangleType(6 7 6).toLowerCase() === 'isosceles triangle'); console.assert(triangleType(0 0 0).toLowerCase() === 'not a triangle'); console.assert(triangleType(-6 -7 -8).toLowerCase() === 'not a triangle'); console.assert(triangleType(5 3 8).toLowerCase() === 'not a triangle');
Горњи програм када се тестира на тврдњама о којима је раније било речи ће сада проћи тест случајеве.
У индустрији смишљање кутних кућишта, а затим развијање функција како би се осигурало да ти тестни случајеви прођу, назива се „развој вођен тестом“. Овај блог је само увид у то шта ТДД значи у пракси.