logo

Nepamirškite „The Edge“ dėklų!

Bandomojo disko kūrimo (TDD) įvadas

Įsivaizduokite scenarijų, kai norite parašyti šią funkciją kaip kokio nors didesnio projekto dalį:

IN aprašykite funkciją, kad grąžintumėte trikampio tipą, pagrįstą 3 trikampio kraštinių ilgio verte. Palengvinkime, darydami prielaidą, kad įvesties duomenų tipo testas jau atliktas, todėl jūs gaunate tik skaitines reikšmes, su kuriomis galėsite dirbti.



konvertuoti eilutę į int java

Situacija atrodo lengva. Eikite į priekį ir parašykite funkciją, kuri atrodo maždaug taip -

Algoritmas:   

    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

Kai atliksite funkciją, jums bus pateikti keli tvirtinimai. Ir jūsų nuostabai pastebėjote, kad tik 50% atvejų praeina. 

Pažvelkime į testo teiginius. Tie, kurie praeina, yra:
1. Patvirtinti, jei (Eilutė_mažosios raidės(trikampio_tipas(678))==skaliarinis trikampis) = Teisingai 
2. Patvirtinti, jei (Eilutė_apatinė raidė(trikampio_tipas(666))==lygiakrais trikampis) = Teisingas 
3. assert(String_toLowerCase(trikampio_tipas(676))==lygiašonis trikampis) = Teisingai 
Na, kol kas viskas atrodo gerai. Tačiau nesėkmingi yra šie:
4. Patvirtinti, jei (Eilutė_apatinė raidė(trikampio_tipas(000))==ne trikampis) = Neteisinga 
5. Patvirtinti, jei (Eilutė_mažosios raidės(trikampio_tipas(-6-7-8))==ne trikampis) = Neteisinga 
6. Patvirtinti, jei (Eilutė_apatinė raidė(trikampio_tipas(528))==ne trikampis) = Neteisinga 

  • Į 4-oji teiginio įvesties reikšmės yra (000). Dabar žinome, kad (000) sudaro tašką, o ne trikampį. Tiesą sakant, jei bet kuri įvesties reikšmė lygi nuliui, trikampis neįmanomas. Bet mūsų atveju tai grąžins lygiakraštį trikampį!
  • Taip pat 5-oji pareiškimas mums primena, kad ilgis niekada negali būti neigiama reikšmė. Matote -30 cm ilgio skalę. Taigi, jei turime nors vieną -ve ilgio reikšmę, trikampis neįmanomas. Tačiau mūsų atveju, priklausomai nuo vertės, jis gali pateikti bet kurį iš 3 rezultatų. Čia jis grąžina skaliarą.
  • O dabar kaip su 6-oji pareiškimas. Visos reikšmės yra >= 0 ir tai tikrai yra skaliarinis trikampis. O gal taip? Prisiminkite taisyklę, kad trikampyje bet kurių 2 kraštinių suma visada yra didesnė arba lygi 3-iajai.

Čia matome:  

8 + 2 > 5  
8 + 5 > 2
5 + 2 > 8

Išvestis:  

True  
True
False

Jis neatlaiko trikampio testo. Taigi ilgiai (258) nesudaro trikampio.

kas yra maven

Taigi mums reikia tam tikro trikampio patvirtinimo, kuris mums pasakytų, ar tai, ką turime, yra net trikampis, ar ne. Kaip sprendimo dalį rašote kitą funkciją, kuri atrodo taip:

Algoritmas:   

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

Mūsų ankstesnė funkcija dabar apima 2 papildomas eilutes pradžioje ir wola! dabar visi testai praeina.

Tai tik paprastas scenarijaus pavyzdys, primenantis mums, kad rašydami gamybos lygio kodą turime būti atsargūs net su paprastais dalykais. Turėdami omenyje paprastus kraštutinius atvejus ir tikrindami su vienodomis eilutėmis, padidinome savo bandymų aprėptį ir padarėme, kad programa pateiktų matematiškai teisingesnius rezultatus.

Žemiau pateikiamas aukščiau aprašyto metodo įgyvendinimas:  

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'); 

Aukščiau pateikta programa, išbandyta pagal anksčiau aptartus teiginius, dabar išlaikys bandomuosius atvejus.

Pramonėje pateikiami kampiniai dėklai ir tada kuriamos funkcijos, užtikrinančios, kad tie bandomieji atvejai būtų sėkmingi, vadinami „bandomu kūrimu“. Šis tinklaraštis yra tik žvilgsnis į tai, ką TDD reiškia praktiškai.
 

Sukurti viktoriną