390 likes | 647 Views
Testipõhine arendus .NET platvormil. Mart Karu mart.karu (ät) soluvi.com Soluvi. Kes räägib?. Mart Karu Tegutseb: ühingutes Metamathic ja Soluvi doktoriõppes TTÜ-s Teinud tarkvara aastast 1995 .NET platvormil aastast 2003. Mis plaanis?. Sissejuhatav ülevaade (Mis?)
E N D
Testipõhine arendus .NET platvormil Mart Karu mart.karu (ät) soluvi.com Soluvi
Kes räägib? • Mart Karu • Tegutseb: • ühingutes Metamathic ja Soluvi • doktoriõppes TTÜ-s • Teinud tarkvara aastast 1995 • .NET platvormil aastast 2003
Mis plaanis? • Sissejuhatav ülevaade (Mis?) • Praktiline rakendamine (Kuidas?) • Uued arengud (Kuidas nutikamalt?) • Küsimused ja vastused
Mis? • Testipõhine arendus – Test Driven Development (TDD) • Tarkvara-arenduse võte • Pärineb XP / Agile praktikutelt • Põhineb automatiseeritud testidel • Lühikesed ja kiired tsüklid
Red-Green-Refactor! Punane Mõtle mida tarkvara peaks tegema ja kirjuta ebaõnnestuv test Kirjuta lihtsaim testi rahuldav programmikood Korrasta Roheline Korrasta lähtekoodi, kui märkad segadust või halbu võtteid
Mis on “test”? • Moodultest (Unit Test) • Integratsioonitest (Integration Test) • Vastuvõtutest (Acceptance Test)
Moodultest • Testib ühte kõige väikseimat osa • Iga testiklassi kohta üks testitav klass (ja tavapäraselt ka vastupidi) • Iga testimeetod testib ühte kindlat testitavat meetodit • Ei pea olema arusaadav tellijale • On kiire
Integratsioonitest • Testib kombineeritult moodulite või klasside omavahelist koostööd. • Läbib mitmeid tarkvarakihte ja protsesse
Funktsionaal- või vastuvõtutest • Testib süsteemi lõppkasutaja nägemuse järgi • Automatiseerib kasutajaliidese tegevusi • Ütleb kas süsteem vastab seatud funktsionaalsetele nõuetele.
Protsess Vastuvõtutestid Integratsiooni- testid Moodultestid
Millest koosneb test? • Arrange – olukorra seadistamine • Act – tegevuse käivitamine • Assert – olukorra kontrollimine
DEMO Mõned lihtsad tsüklid
Miks TDD hea on? • Soodustab head disaini • enne teostust tuleb mõelda • evolutsiooniline disain • disain on lihtne • aitab keskenduda olulisele • mängib läbi klientsüsteemi(-klassi) töö • soodustab head objektorienteeritud disaini – loose coupling, high cohesion
Miks TDD hea on? • Aitab verifitseerida • vähem vigu • spetsifitseerib tarkvara käitumist • iga tarkvaralõigu toimimine on kontrollitav • tagasiside tehtud tööst
Miks TDD hea on? • Psühholoogia • suurendab kindlust töös • tõstab motivatsiooni • Tõstab produktiivsust • kiirem tagasiside muutuste korral • kiirem arendamine
Osa 2 Praktiline Rakendamine
Testimisvahendid • NUnit • MbUnit • MSTest • xUnit
Testidega katmine (Coverage) • NCover ja NCover • PartCover • Visual Studio
Hea testi tunnused • Automatiseritud ja taaskorratav • Lihtne hallata • Töötab kiirelt • Igaüks võib kasutada ükskõik millal • Töötab isoleeritult • Katab piisavalt testitavat koodi
Automatiseerimine • Pidev Integratsioon (Continuos Integration, CI) • kiire tagasiside • turvavõrk • Build taskid • Testandmed
Testide haldamine • Testid enne koodi • Testid eraldi projekti • Kommunikeeri kavatsusi • MeetodiNimi_Juhtum_OodatudTulem • Ka teste tuleb korrastada • Testid ei tohiks kattuda • Üks Assert iga testimeetodi kohta • Osaline testide jooksutamine
Moodultest: Kiirus • Moodultestides tuleb vältida: • IO-d • andmebaasisuhtlust • protsesside / threadide vahelist testimist • Aitavad testiteisikud (Test Double) • aeglaste sõltuvuste asendamiseks • objektidevahelise suhtluse kontrolliks
Testiteisikud • Dummy Object • Test Stub • Test Spy • Mock Object • Fake Object
DEMO Testiteisikud
Tarkvara-arhitektuur ja TDD MODEL VIEW Moodulestid Moodultestid Template Domain Template Integr. testid Template Helper Moodultestid Domain Service Integr. testid ASP.NET Vastuvõtutestid Vastuvõtutestid Integr. testid CONTROLLER DAO Interface Controller Controller Moodulestid DB ? Integr. testid
Testidetasüsteemi testifitseerimine • Muudetavad piirkondade leidmine • Muutepunktide selgitamine • Integratsioonitestid muutepunktidele • Väliste sõltuvuste lõhkumine • Sisemiste sõltuvuste lõhkumine • Testidega katmine • Moodultestid, muudatused ja refactor
Kuidas kasutusele võtta? • Oluline on kogu organisatsiooni tugi • Koolitus / õpe, paaritamine • Vältida kohustuslikuks tegemist • Geriljavõtted
Ettevaatust! • Testiteisikute liigne kasutamine • Testide haldamine • Katvuse meetrika • Tavapärane testimine
Osa 3 Uued ja põnevad asjad
Behaviour Driven Development (BDD) • TDD edasiarendus • Spetsifikatsiooni kvaliteet • Äri- ja tehnikavaldkond ühel sõnavaral • Ilmutatud kujul ja verifitseeritav (äri)väärtus süsteemis • (Eel)analüüsi mahu optimeerimine
BDD vahendid • Vastuvõtutestid • Cucumber (ruby) • SpecFlow • Moodul- ja integratsiooni-testid • rSpec (ruby) • SpecUnit .NET • SubSpec • Mspec • Specter (boo)
Cucumber • Testide kirjeldamine loetavas inimkeeles • Teste (heal juhul) kirjutavad tellijad • Testid = nõuded • Stsenaariumid automatiseeritakse kasutades sobivaimat testimisraamistikku
Cucumber. Kasutamine.NET platvormil • IronRuby + Cucumber • Testid käitivatakse .NET keskkonnas • Testide sammud on kirjutatud Ruby-s • Ruby MRI + Cucumber + Cuke4Nuke • Cucumberi testid käivitatakse Ruby keskkonnas • Testide sammud on kirjutatud C#-s
DEMO Cucumber .NET-is
rSpec • Valdkonnapõhine keel (DSL) • saab esitada käivitatavaid näiteid testitava koodi käitumisest. • Võimaldab hierarhilisi kontekste ja seadeid • Võimaldab dokumenteerida teste
DEMO rSpec .NET-is
Kokkuvõte • Rõõmsat TDD/BDD kasutamist!
Kasulikud viited • nunit.org • www.ayende.com/projects/rhino-mocks.aspx • behaviour-driven.org • rspec.info • cukes.info • ironruby.net • The Rspec Book • The Art of Unit Testing • XUnit Test Patterns