logo

Älä unohda Edge-koteloita!

Test Drive Developmentin (TDD) esittely

Kuvittele skenaario, jossa haluat kirjoittaa seuraavan funktion osana jotakin suurempaa projektia:

IN Kirjoita funktio palauttaaksesi kolmion tyypin kolmion kolmen sivun pituuden perusteella. Tehdään siitä hieman helpompaa olettamalla, että syötetietotyypin testi on jo paikallaan, joten saat vain numeerisia arvoja työskentelyyn.



amisha patel

Tilanne näyttää helpolta. Kirjoitat funktion, joka näyttää suunnilleen tältä -

Algoritmi:   

    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

Kun olet suorittanut toiminnon, sinulle annetaan muutama väite suoritettavana. Ja yllätykseksesi huomaat, että vain 50 % tapauksista meni läpi. 

Katsotaanpa testilausuntoja. Ne jotka läpäisevät ovat:
1. Vahvista jos (merkkijono_pieniin kirjaimiin(kolmiotyyppi(678))==skalaarikolmio) = oikein 
2. Vahvista jos (merkkijono_pieniin kirjaimiin(kolmiotyyppi(666))==tasasivuinen kolmio) = oikein 
3. assert(String_toLowerCase(triangle_type(676))==tasakylkinen kolmio) = Oikea 
No, kaikki näyttää hyvältä tähän asti. Mutta ne, jotka epäonnistuvat, ovat:
4. Vahvista, jos (merkkijono_pienikirjain(kolmiotyyppi(000))==ei kolmio) = Väärin 
5. Vahvista jos (merkkijono_pienikirjain(kolmiotyyppi(-6-7-8))==ei kolmio) = Väärin 
6. Vahvista jos (merkkijono_pienikirjain(kolmiotyyppi(528))==ei kolmio) = Väärin 

  • Vuonna 4 lausekkeen syöttöarvot ovat (000). Nyt tiedämme, että (000) muodostavat pisteen eikä kolmion. Itse asiassa, jos jokin syötearvo on nolla, kolmio ei ole mahdollinen. Mutta meidän tapauksessamme se palauttaa tasasivuisen kolmion!
  • Myös 5 lausunto muistuttaa meitä siitä, että pituus ei voi koskaan olla negatiivinen arvo. Näet vaa'an, jonka pituus on -30 cm. Joten jos meillä on edes yksi -ve-arvo pituus, kolmio ei ole mahdollinen. Mutta meidän tapauksessamme arvosta riippuen se voi palauttaa minkä tahansa kolmesta tuloksesta. Tässä se palauttaa skalaarin.
  • Entä nyt 6 lausunto. Kaikki arvot ovat >= 0 ja se on varmasti skalaarikolmio. Vai onko se? Muista sääntö, että kolmion minkä tahansa kahden sivun summa on aina suurempi tai yhtä suuri kuin kolmas.

Tässä näemme:  

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

Lähtö:  

vertailukelpoinen java
True  
True
False

Se epäonnistuu kolmiomaisuuden testissä. Näin ollen pituudet (258) eivät muodosta kolmiota.

Tarvitsemme siis eräänlaisen kolmion validoinnin, joka kertoo meille, onko se, mikä meillä on, jopa kolmio vai ei. Osana ratkaisua kirjoitat toisen funktion, joka näyttää tältä:

Algoritmi:   

fmovies
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

Edellinen toimintomme sisältää nyt 2 ylimääräistä riviä alussa ja wola! kaikki testit ovat nyt ohi.

Tämä on vain yksinkertainen esimerkkiskenaario muistuttamaan meitä siitä, että kun kirjoitamme tuotantotason koodia, meidän on oltava varovaisia ​​jopa yksinkertaisten asioiden kanssa. Pitämällä yksinkertaiset reunatapaukset mielessä ja tarkistamalla yhtenäisillä merkkijonotapauksilla lisäsimme testien kattavuutta ja saimme ohjelmamme palauttamaan matemaattisesti oikeat tulokset.

Alla on yllä olevan lähestymistavan toteutus:  

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

Kun yllä oleva ohjelma testataan aiemmin käsiteltyjen väitteiden perusteella, läpäisee testitapaukset.

Alalla kulmakoteloiden kehittäminen ja toimintojen kehittäminen varmistaakseen, että testitapaukset läpäisevät, kutsutaan "testilähtöiseksi kehitykseksi". Tämä blogi on vain välähdys siitä, mitä TDD tarkoittaa käytännössä.
 

Luo tietokilpailu