Testondersteuning in frameworks voor webapplicaties



Vergelijkbare documenten
Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Object Oriented Programming

Dynamische Websites. Week 9

DIA Opdracht 4 (Arjan Dekker)

MVC BASICS 2. Kevin Picalausa

Les 3. Gebruik in volledige programma Default argumenten Vergelijken van objecten

Chris de Kok TDI 3. Vak: Software Architectuur Datum: Docent: Fons van Kesteren

Inhoud eindtoets. Eindtoets. Introductie 2. Opgaven 3. Terugkoppeling 9

IMP Uitwerking week 13

AUTHENTICATIE. Version Date Author Description Mark Hameetman Initiele document

4 ASP.NET MVC. 4.1 Controllers

Dynamische Websites. Week 10

CENTEXBEL CLIENT WEB

Gebruik van cryptografie voor veilige jquery/rest webapplicaties. Frans van Buul Inter Access

Je hoeft je maar met twee bestanden bezig te houden:

OAS en het Kennisplatform API s. Dimitri van Hees

CENTEXBEL CLIENTS WEB

Aanleveren van te verzenden sms berichten aan SMS Via

Scala. Korte introductie. Sylvia Stuurman

Dynamische Websites. Week 3. donderdag 3 oktober 13

Wat is een child-theme?

Dynamische Websites. Week 2

Modelleren en Programmeren

Website beoordeling bestsiteanalysis.eu

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

Kleine cursus PHP5. Auteur: Raymond Moesker

Hier volgt als hulp wat technische informatie voor de websitebouwer over de werking van de xml web service.

AJAX (XMLHttpRequest)

Hand-out Introduction to Programming, werkcollege 7 Alex Reuneker 2013

Formulieren en waarden posten naar een view

digital art 2d - over posters - opdracht drugs poster en website

Handleiding Facultaire website Expression Engine

Project Embedded Linux Domaza. Elektronica-ICT. Dimitri Kozakiewiez Jonas Govaerts. Academiejaar

Project documentatie Project Expo

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Modelleren en Programmeren

Sitecore en AngularJS: hoe werken ze samen

Knowledgeable Referenceable Personable Accountable Scalable

De plug-in is heel eenvoudig te installeren met een setup-programma. Waarna je een aantal menu opties in het tools menu er bij krijgt.

Correspondentie inzake overnemen of reproductie kunt u richten aan:

Volledige integratie in APEX. Laurens Hamelink Twinq VvE Software Menno Hoogendijk - Qualogy

Drupal 7 tip: voeg overal contextual links toe Gepubliceerd op Dominique De Cooman (

Orbis Software. Portal4U. Installatie Handleiding. Dit document bevat de Installatie Handleiding voor Portal4U

Dynamische webapplicaties in Java

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS

Joomla! en SEO: De basis elementen van SEO. Richard Bruning

Enterprise. RESTful Webservices. serieus alternatief voor SOAP?

Maak een pivot uit een Generic.List

Teamhandleiding DOMjudge (versie 2.2.0muKP) 31 mei 2008


Informatica. Deel II: les 2. Leibniz - erven - digitaal. Jan Lemeire Informatica deel II februari mei Parallel Systems: Introduction

Objective-C Basis. 23 april 2005, Eindhoven Patrick Machielse

procesbeschrijving. Opdracht 1

Handleiding RS Form! 1.0.4

RESPONSIVE DRUPAL THEMING MET SASS, COMPASS, SUSY EN AURORA DRUPAL TECH TALK 25 APRIL 2013 MARC VAN GEND TRIQUANTA

Handleiding Authenticatie

FFO Webdesign 1e jaar theorietoets NL niveau4... Totaal aantal vragen: 40

Handleiding. Mailchimp

Externe pagina s integreren in InSite en OutSite

Een unit test is geen integratie test. Niet het hele systeem, maar onderdelen van een systeem worden getest.

MINICURSUS PHP. Op dit lesmateriaal is een Creative Commons licentie van toepassing Sebastiaan Franken en Rosalie de Klerk Bambara

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Extra voorbeelden. 1 Objectenhierarchie. 2 Kalender

Handleiding configuratie en gebruik tekenmodule

De sheets zijn gebaseerd op met name hoofdstuk. D. Bell en M. Parr, Java voor studenten, Prentice Hall,

2019 SUNEXCHANGE USER GUIDE LAST UPDATED

Dynamiek met VO-Script

Een sjabloon (in PHP template genaamd) bevat de volledige

Capita Selecta Design Patterns voor administratieve applicaties

joomladagen 2017 fl ex box niels

PYramid Onroerend Erfgoed Style Documentation

Controllers, actions en views

Javascript deel 3. Document Object Model Objecten

NB Deze lijst is alleen beschikbaar tijdens het project! Alleen voor eigen gebruik, er kunnen geen rechten aan worden ontleend.

DOMjudge teamhandleiding

Contextanalyse. Patrick v/d Vlist

Introductie en even voorstellen

LINQ en SharePoint Development

Correspondentie inzake overnemen of reproductie kunt u richten aan:

In een paar stappen. je weggever aanbieden. via ActiveCampaign

Formulierbeheer Importeren bestaand (model)formulier... 2 Wat is exporteren/importeren eigenlijk?... 3 Formulier aanpassen/opbouwen...

Zelftest Inleiding Programmeren

Dashboard. 1 Apr Apr 2012 Comparing to: Site % Bounce Rate. 125 Visits. 535 Pageviews. 00:02:23 Avg. Time on Site. 4.

User Profile Repository Technisch Ontwerp Versie 1.1

Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur

VoipCenter Application Programming Interface (API)

Leer-Rijk Leveranciers API

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur

Dashboard. 1 Nov Nov 2011 Comparing to: Site % Bounce Rate. 409 Visits. 2,197 Pageviews. 00:02:58 Avg. Time on Site. 5.

Eigen Widgets in CRM. Introductie. Limitering. Widgets beschikbaar stellen. Tips & Tricks Eigen Widgets in CRM

Navigatie is een belangrijk onderdeel van elke website. Er

Activant Prophet 21. Prophet 21 Version 12.0 Upgrade Information

ASRemote WebService. Via deze webservice kunt u:

Dynamische Websites. Week 1. woensdag 18 september 13

Website beoordeling pre-r.com

Hand-outs. Een succesvolle website in het mobiele tijdperk

Lab Webdesign: Javascript 7 april 2008

SPOJ oplossingen Gilles Callebaut 7 augustus 2015

Client Applicaties (Browser+Desktop) http/https. Apache Webserver. http proxy. WMS WFS Adm SLD Tomcat. Tomcat. GeoServer. PostGIS

Transcriptie:

Testondersteuningin frameworksvoorwebapplicaties MirkovanEde(9902236) NijmeegsInstituutvoorInformaticaenInformatiekunde RadboudUniversiteitNijmegen Versie:1.1,11februari2009 Omvang:3ects

Samenvatting Frameworkszijneenveelgebruiktebasisvoorhetbouwenvaneenwebapplicatie. Omdatdezeapplicatiesooksteedsbedrijfskritischerworden,ishetvanbelangdat zijgoedgetestkunnenworden.daaromisdematewaarineenframeworkdaar ondersteuningvoorbiedteenbelangrijkgegeven. Omdaterzoveelwebframeworkszijn,isinditonderzoekgekekennaarslechtsdrie, populaire,frameworks:cakephp,djangoenrubyonrails.dezedrieraamwerken zijngeanalyseerdopdematevanondersteuningdiezijbiedenophetgebiedvan testen.desoortentestsdieindezeanalysezijnonderzochtzijneenverzameling vandemeestessentiëlesoortenblack ofgrayboxtestsdieuitgevoerdkunnen worden. Alleframeworksbiedeninruimemateondersteuningvoordezelfdesoortentests. Zowelmodel basedtestingalscapture and playbacktestswordendoorgeenenkel frameworkondersteunt.degrootsteverschillentredenopbijdemogelijkhedentot analyserenvandeoutputdienaardebrowsergaat.daarbijhebbencakephpen RubyonRailseenvoorsprongopDjango. 2

Inhoudsopgave Testondersteuninginframeworksvoorwebapplicaties... 1 Samenvatting... 2 Inhoudsopgave... 3 H1.Inleiding... 4 Inleiding...4 Documentstructuur...4 H2.Probleemstellingenrelevantie... 5 Kwaliteitvansoftware...5 Manierenvantesten...5 Frameworksvoorwebapplicaties...6 Onderzoeksvraagendeelvragen...7 H3.Typesoftwaretests... 8 Inleiding...8 Inventarisatie...8 Conclusie...10 H4.Frameworksvoorwebapplicaties...11 Inleiding...11 CakePHP...11 RubyonRails...13 Django...15 Features...16 Conclusie...17 H5.Vergelijkingoptestondersteuningvandeframeworks...18 Inleiding...18 Testondersteuning...18 Toelichtingopderesultaattabel...19 Conclusie...24 H6.Conclusie...26 Conclusie...26 Reflectieenaanbevelingen...26 H7.Bibliografie...27 3

H1. Inleiding Inleiding Ominzichttegevenwaaromditonderzoekwordtuitgevoerdenwathetbelang ervanis,beschrijftdithoofdstukhetprojectkadervandezebachelorthesis. Testeniseenbelangrijkonderdeelvanallemodernesoftware ontwikkelingsmethodesenhetbelangervanwordtdooriedereenwordt onderschreven,hoewelhetechterookeenonderdeelisdatervaak,vanwegetijd ofgeldgebrekalseerstebijinschiet. Eenanderbekendfenomeenisdatwebapplicaties,applicatiesdieviahetinternet gebruiktworden,steedsgroter,complexerenookbedrijfskritischerworden.dat betekentdusdathetvansteedsgroterbelangwordtomdezeapplicatiesop grondigeengestructureerdewijzetetesten. Omdatbijhetbouwenvandezewebapplicaties,zekerwanneerhetgroteen complexeapplicatiesbetreft,bijnaaltijdframeworkswordeningezet,ishetdusvan belangdatdezeframeworksondersteuningbiedenvoorhettestenvandecodeen programmatuurdiehieringemaaktworden. Ditonderzoekzaldaaromkijkennaardetestondersteuningdiedergelijke frameworksvoorwebapplicatiesbieden. Documentstructuur Inheteerstehoofdstukvandezescriptiezalhetprobleemuitdedoekenworden gedaanenaangegevenwordenwatderelevantievanhetprobleemis.daaruitzal deonderzoeksvraagvolgenendedeelvragendienodigzijnomdeze onderzoeksvraagtebeantwoorden. Dehoofdstukken3,4en5zullenvervolgensderesultatentonendieresulterenuit hetonderzoeknaardedrieopgesteldedeelvragen.daarnaastzalperhoofdstuk eenkleineconclusieoverdedeelvraagwordengetrokken,alsmedeeenstukje reflectieopderesultaten. Hetlaatstehoofdstukbevatvervolgensdeconclusievanditonderzoek,waarmee deonderzoeksvraagbeantwoordis.ookzalindithoofdstukkortworden aangegevenofenwelkvervolgonderzoekereventueelgedaankanworden. 4

H2. Probleemstellingenrelevantie Kwaliteitvansoftware Nietalleenistesteneenonderdeelvanallerecentesoftewareontwikkelingsmethodes,inspeciaalvoorsoftwareopgesteldekwaliteitsmodellen neemtheteenbelangrijkeplaatsin.demodellenvanmccall(cavano & McCall, 1978),origineelopgesteldvoordeUSAirforceenbedoeldomtebemiddelentussen ontwikkelaarsengebruikers,enboehm(boehm, Brown, & Kaspar, 1978)zijn algemeengeaccepteerdenzienrespectievelijkeralsvolgtuit (Woolderink, 2007): Afbeelding1:KwaliteitsmodelvanMcCall(links)enBoehm Zoalstezien,ruimenbeidemodelleneenaparteplekinvoordetestabilityvande softwareenonderkendendaarmee,allanggeleden,hetbelangvantestenvoorde kwaliteitvansoftware.ookhet modernere,deeersteversiestamtuit1991,de meestrecenteuit2001,standaardkwaliteitsmodelvoorsoftware,iso9126(iso, 2001),datisgebaseerdopdemodellenvanMcCallenBoehmenaangepastaande behoeftesenervaringenmetdiemodellen,laatziendathettestenvansoftware eenbelangrijkeplaatsinneemtomtekomentoteenkwaliteitsproduct. Manierenvantesten Erzijnveelaspectenwaaropsoftwaregetestkanworden:hoesnelishetsysteem (performance),hoeintensiefkanhetgebruiktworden(stress),hoegaathet systeemommetonverwachtgedragzoalsverkeerdeinputvangebruikers (robustness),hoeveiligishetsysteem(security),etcetera.waarweindezescriptie naarzullenkijken,ishetfunctioneeltesten,waarbijergetestwordtofhet programmavoldoetaandefunctioneleeisendieerzijnopgesteld,ookwel conformancetestinggenoemd. 5

Jekuntonderscheidmakentussenverschillendemanierenvantesten.Allereerstis erhetverschiltussenstatischendynamischtesten.statischtestenwordtgedaan zonderdecodedaadwerkelijkuittevoeren,zoalsbijvoorbeeldeencompilerdoet. Bijdynamischetestenwordtdeprogrammacodeweluitgevoerd.Tijdensdeze scriptiezullenwealleenkijkennaardeondersteuningvoordynamischtesten. Eenanderveelgemaaktonderscheidishetverschiltussenwhiteboxenblackbox testen.bijblackboxtestenwordthettetestenobjectgezienalseenzwartedoos, waarietsingaatenweeruitkomt.bijwhiteboxtestenheeftmendebeschikking overdeprogrammacodeengebruiktmendieomtetesten.erzijnnatuurlijkvele combinatiesmogelijk,greyboxtestengenoemd,bijvoorbeeldwanneermenweet uitwelkemoduleseensysteemisopgebouwd,maardemodulesweleenblackbox zijn. Samenvattendzullenwehetindezescriptiealleenhebbenoverdynamischblack engreyboxtesten. Frameworksvoorwebapplicaties Eenanderbekendfenomeenisdatertegenwoordigmeerenmeer,vaak bedrijfskritische,applicatieswordenontwikkelddievolledigwebbasedzijn. PopulairetalenvoorditsoortapplicatieszijnonderandereJava,Microsoft s.net talen,python,rubyenphp. Vanwegedegroteverscheidenheidaantalenbeschikbaarzijnvoorwebapplicaties, zullenwedescopebeperkentotdeopensourcetalenphp,ruby,eneventueel PythonenJava. Vooraldezetalenzijnbestaanframeworks,diehetdeontwikkelaarmakkelijker maken,zorgenvoorgestructureerde,gelaagdecodeendaaromveelgebruikt wordenbijhetontwikkelenvanwebapplicaties.bekendeframeworkszijn bijvoorbeeldrubyonrailsvoorruby,djangovoorpython,strutsenspringvoor JavaenSymphony,,hetZendframeworkenCakePHPvoorPHP. Vanwegedebeperkteomvangvanditonderzoekenhetgroteaantalframeworks datervoorsommigetalenbeschikbaaris,zullenwetweeraamwerkenbekijken. AllereerstisdatCakePHP,zoalsdenaamaldoetvermoedenisditeenPHP frameworkenwekiezendezeomdatphpeenzeerpopulairetaalisvoor webapplicatiesencakephpdaarbinnenéénvandegrotereframeworksis.het tweedeframeworkdatwezullenbekijkenisrubyonrails,voorde programmeertaalrubyentevensergpopulair. Omdatwebapplicatiesgroter,bedrijfkritischencomplexerworden,ishetvan grootbelangdatdezecodevanhogekwaliteitenduseengoedtestbaaris.veelvan dezeframeworkshebbeninmeerofminderemateondersteuningingebouwdvoor hetontwerpenenuitvoerenvantests.devraagisofdezespecifieke testondersteuningzorgtvoorgoedetestsvansoftwarediegeschrevenisindeze frameworks.deconcretevraagstellingdiewekunnenformulerenis: 6

Welkeondersteuningvoortestenbiedendeveelgebruikteframeworksvoor webapplicaties? Onderzoeksvraagendeelvragen Omdeonderzoeksvraagtekunnenbeantwoorden,isdevolgendekennisnodig: A. Watvoortypetestskunnenweonderscheidenbinnendeaangegeven criteria? B. Hoezijndegeselecteerdeframeworksopgebouwd? C. Welkevandesoortentestswordendoordegeselecteerdeframeworks ondersteund? OnderzoeknaarhetantwoordopdeelvraagAzalgedaanwordendoormiddelvan literatuuronderzoek. HetantwoordopdeelvraagBzalgeschiedendoormiddelvanliteratuuronderzoek. HetantwoordopdeelvraagCzalwordendeelsgezochtmoetenwordenin documentatieendeelsdoorhetmakenvanvoorbeeldendielatenzienhoedeeisen enrandvoorwaarden,zoalsgevondenbijdeelvraaga,geïmplementeerdkunnen worden. Hetcombinerenvandeantwoordenopdedeelvragenverschaftonsvervolgens eeninzichtindematevantestondersteuningvandezeframeworks. 7

H3. Typesoftwaretests Inleiding Dithoofdstukbeschrijfteeninventarisatievanmogelijkesoortentestsdiede frameworkszoudenkunnenondersteunen,binnendekadersdiegesteldzijnin hoofdstuk2.vanelketypetestzaleenkorteomschrijvingwordengegeven. Dezeinventarisatieistotstandgekomendoormiddelvaneenliteratuuronderzoek enhetnagaanvanbestpracticesophetgebiedvansoftwareontwikkelingmet behulpvanwebframeworks.delijstmetsoortentestsdiedithoofdstukoplevert, zalwordengebruiktvoorhetvergelijkenvandetestondersteuningvande geselecteerdeframeworks. Inventarisatie Handmatigtesten Hetsysteemondersteunthethandmatiguitvoerenvantests,bijvoorbeeldviade commandline. Captureandplayback Hettestsysteemonthouddehandmatiguitgevoerdetestsenkandieopeenlater herhalen. Codecoverageanalyse Alhoewelditgeenblackboxtestis,isdecodecoverageanalyseeenveelgebruikte testentevenseenindicatieofdeopgesteldetestsuitedecodedekt. Doctests Testcasesdieindedocumentatiewordengeschrevenvaneenmethodeoffunctie. Dezekunnendangeautomatiseerdallemaaluitgevoerdworden.Hiermeekandus uitsluitenddewerkingvandefunctieopzichwordengetest,nietdeinteractiemet anderemethodesbinnendeunit. Geautomatiseerdeunittests Unittestswordengebaseerdopvantevorenvastgesteldeinput,eventueel ondersteuntdoorzogenaamdefixtures.daarnakunnenzegeautomatiseerd, uitgevoerdworden.unittestswordenuitgevoerdophetniveauvanhetmodel. Verderishetinteressantwelkeoptiesergebodenwordenomdezeunittestsinte richten: Fixtures;herbruikaredefinitiesvandetestdata,waardoordezedoor meerderetestgebruiktkanworden. Mockobjects;hetsimulerenvanobjectenwaarhettetestenobjectvan afhankelijkis. 8

Geautomatiseerdefunctioneletests Ookfunctioneletestsmakenmeestalgebruikvanfixtures.Integenstellingtotde unittest,wordthierechternietslechtséénmodelgetest,maareencompleet requestuitgevoerdomtezienofdathetverwachteresultaatoplevert. Binnendefunctioneletests,zullenwekijkennaardevolgendeopties: Databasewijzigingen;ishetmogelijkomnahetuitvoerenvaneen functioneletestteanalyserenoferwijzigingenindedatabasezijn aangebracht? HTTPHeaders;ishetmogelijkdeHTPPheadersteanalyseren? Viewvariabelen/objecten;omdatwehethierhebbenovertestsop controller niveau,ishetmogelijkomtezienwelkedataeraandeview doorgegevenwordt? Authenticatie;kandetestzichauthenticerenalseenbepaaldegebruiker tijdenshetuitvoerenvandetest? Webtests Omdatweinditonderzoekspecifiekkijkennaarframeworksvoorwebapplicaties, ishetookinteressantomtezienoferspecifiekeondersteuningwordtgeboden voorditplatform.wezullendevolgendeoptiesonderscheiden: GETrequests;hetsimulerenvanHTTPGETrequests. POSTrequests;hetsimulerenvanHTTPPOSTrequests,onderandere bruikbaarvoorhettestenvanformulieren. Bestandsuploads:simulerenvanbestandsuploads. HTTPHeaders;ishetmogelijkdeHTPPheadersteanalyseren? HTTPredirects:kunnenHTTP redirectsgevolgdworden? Viewvariabelen/objecten;ishetmogelijkomtezienwelkedataervande controlleraandeviewisdoorgegeven? Outputtest:controlerenofdeHTMLoutputis,zoalsverwachtwerd, eventueelgecombineerdmeteenparseromtezienofdeoutputgeldige (X)HTMLoplevert. Cookieondersteuning:hetcorrectafhandelenvandecookieszoalsdiedoor deapplicatiegebruiktworden. Interface/inbrowsertests Geautomatiseerdtestenvandeinterfacemiddelsdebrowser,volgenshetcapture andplaybackprincipe,zodatdetestsherhaaldkunnenworden.daarbijkunnenwe kijkenofdezetestsbrowseronafhankelijkzijn,ietswatmetnamebijdeinterface vaneenwebapplicatienogaleenstruikelpuntkanzijn. Model basedtesting Hetvolledigkunnenspecificerenvanhetgedragvandewebapplicatie,zodathet testsysteemautomatischzijneigentestcaseskanafleidenomdeapplicatievolledig tetesten. 9

Conclusie Dithoofdstukheefteenlijstopgeleverdmetbasisoptiesdieeenframeworkkan ondersteunenophetgebiedvanhettestenvandecodeenbeantwoorddaarmee deelvraaga: Watvoortypetestskunnenweonderscheidenbinnendeaangegeven criteria? Dezeoptiesvoldoenallemaalaandeeisenzoalswedieeraangesteldhebbenin hoofdstuk2,namelijkdathetdynamisch,grey enblackboxtestenzijn.erzijnnog welmeeroptiestebedenkendieeenframeworkookkanondersteunenenhetis eensubjectiefoordeelofeenbepaaldeoptieeenstandaardoptiebehoorttezijn.ik denkechterdatdezelijstvrijcompleetis,enhetontbrekenvanbepaaldeoptiesin dezelijstzalookgeenfundamenteelverschilmakenvoorhetvervolgvanhet onderzoek.eventueelvervolgonderzoekkanmeeroptiesmeenemeninhet eindoordeel. 10

H4. Frameworksvoorwebapplicaties Inleiding Dithoofdstukbeschrijftdeselectievanframeworksdiewezullengebruikeninde restvanditonderzoek.vandegeselecteerderaamwerkenzaleenkorte beschrijvingwordengegeven,waarbijergekekenwordtnaardealgemene werkingvanhetframeworkaangevuldmeteenkortoverzichtvandefeaturesdie hetframeworkbiedt.hiermeewordtzaldeelvraagbbeantwoordworden: Hoezijndegeselecteerdeframeworksopgebouwd? CakePHP CakePHPiseenobject georiënteerd,opensourcerapid developmentframework(cake, 2001)geschreveninenvoor degeïnterpreteerde,imperatieveprogrammeertaalphp (PHPGroup).CakePHPisgestoeldophetdesignpattern Model View Controller(kortwegMVC,datgeïntroduceerd werddoorsmalltalk)endwingtdeontwikkelaarsomhun applicatieoptedelenindriedelen.dezedriedelenhebben elkhuneigenverantwoordelijkheden: Hetmodel;representeertdedatawaaropdeapplicatiewerkt.Tussendemodels kunnenverschillendetyperelatiesbestaan.typischwordtdezedatauiteindelijk opgeslagenineendatabase.hetmodelbevatdebusinesslogicavandeapplicatieen opslagenbewerkenvandedataverlooptviademodels. Deview;verzorgtdepresentatievandedata.Voorwebapplicatieszijndatmeestal webpagina s,maaraanandererepresentaties,zoalsxmlofeenpdf document, valtooktedenken.deviewdoetgeenbewerkingenopdedata. Decontroller,verwerktdebinnenkomendeverzoeken(events).Dezezijnmeestal afkomstigvanhandelingenvandegebruikers,maarzoudenevenzogoedop anderemanieren(bijvoorbeeldviaeensoapinterface)binnenkunnenkomen.de controllervoertookapplicatie logicauit,zoalsbijvoorbeelddeautorisatie.een typischmvc requestzieteralsvolguit(cake, 2001): 11

Afbeelding2:MVCrequest 1. Vanafdeclientkomtereenverzoek 2. DeCakePHPdispatcherbekijkthetverzoekenstuurthetdoornaarde correctecontroller. 3. Decontrollervoertzijntakenuit,bijvoorbeeldauthentificatieenautorisatie vandegebruikerdiehetverzoekdoet.daarnastuurthijopdrachten (bijvoorbeeldverwijderenofaanpassendata)ofverzoekennaarde benodigdemodels. 4. Hetmodelgeeftdataterug 5. Decontrollerstuurtalledatanaardeview 6. Deviewgebruiktdezedataomdeoutputoptebouwenenstuurtdeinhoud terugnaardeclient. Features HieronderstaateenlijstmetfeaturesdiehetCakePHPframeworkbiedt,zoals beschrevenstaatopdewebsitevanhetproject(cake, 2001): 1. CompatibelmetPHP4enPHP5 2. GeïntegreerdeCRUD(create,read,updateendelete)voordatabase interactie 3. Applicatiescaffolding,hetautomatischverwerkenvanstandaardverzoeken, opbasisvandegedefinieerdedatabasetabellen.bedoeltalstijdelijke,snelle start. 4. Codegenereren,hetautomatischgenererenvandebasisvandeapplicatie, opbasisvandegedefinieerdedatabasetabellen. 5. Vriendelijke(mensenzoekmachine)URL'senaangepasteroutes 6. Ingebouwdevalidatie,validatievaningevoerdegegevens,opbasisvanhet model. 7. ViewHelpersvoorAJAX,JavaScript,HTML formulieren,zorgtervoordat nietallehtmlcodehandmatiguitgewerkthoeftteworden. 8. Componenten,gedeeldeuitbreidingenopdecontrollers,Standaard componentenalsemail,cookie,security,session,enrequest. 12

9. Behaviors,gedeeldeuitbreidingenopdemodels. 10. Flexibeltoegangsbeheer(ACL,accesscontrollists) 11. FlexibeleCaching,opniveauvanmodelsenviews. 12. Localisatie,hetframeworkbiedtondersteuningvoormultilingual applicaties. EenstandaardCakePHP requestisdoordemogelijkheidvanrouting(punt5), behaviors,componentenendemogelijkheidomanderedatabronnendanslechts dedatabasetegebruiken,ietsuitgebreiderdanhethierbovenbeschreven standaardmvc request.(cake, 2001) Afbeelding3TypischCakePHPrequestafhandeling RubyonRails RubyonRailsiseenMVCframework,geschreveninenvoorde programmeertaalruby.detaalrubyiseengeïnterpreteerde,puur object georiënteerdetaaldie,aldusdekenners,erglijktop Smalltalk.DetaalRubystamtuit1995(Matsumoto, 1995)enis, zoalsgezegdpuurobject georiënteerd. 5.times { print "We *love* Ruby -- it's outrageous!" } Codevoorbeeld:AllesiseenobjectinRuby,zelfsprimitievetypen 13

HetframeworkRubyonRails(RoR)stamtuit2003(RoR, 2003)engebruiktevenals CakePHPhetModel View Controllerpatroon.Descheidingindriedelenwerkt identiekalshierbovenbeschrevenbijcakephp.rorkomt,integenstellingtot CakePHP,meteeneigenwebserver,Webrick,maarkanookgebruiktwordenmet anderewebserversalsapache. EentypischRoRrequestzieteralsvolgtuit(RoR, 2003): Afbeelding4.RubyonRailsarchitectuur QuaarchitectuurlijktRoRdusergveelopCakePHPenhethandeltopvrijwel dezelfdemanierverzoekenaf. Features OokquafeatureslijkenRoRenCakePHPergopelkaar.Opzichisdatookniet verwonderlijk,alsjebedenktdatcakephpineersteinstantienaarvoorbeeldvan RoRisgebouwd.DevolgendestandaardfeaturesmakendeeluitvanRoR 1. Eigenwebserver,Webrick 2. GeïntegreerdeCRUD(create,read,updateendelete)voordatabase interactie 3. Applicatiescaffolding,hetautomatischverwerkenvanstandaardverzoeken, opbasisvandegedefinieerdedatabasetabellen.bedoeltalstijdelijke,snelle start. 14

4. Codegenereren,hetautomatischgenererenvandebasisvandeapplicatie, opbasisvandegedefinieerdedatabasetabellen. 5. Vriendelijke(mensenzoekmachine)URL'senaangepasteroutes 6. Ingebouwdevalidatie,validatievaningevoerdegegevens,opbasisvanhet model. 7. ViewHelpersvoorAJAX,JavaScript,HTML formulieren,zorgtervoordat nietallehtmlcodehandmatiguitgewerkthoeftteworden. 8. Partials;hergebruikvandelenvanandereviews 9. Standaardondersteuningvooremail,cookies,authorisatie 10. Flexibeltoegangsbeheer(ACL,accesscontrollists) 11. FlexibeleCaching,opniveauvanmodelsenviews. 12. Localisatie,hetframeworkbiedtondersteuningvoormultilingual applicaties. 13. Requestprofiler;nagaanwaarinhetafwerkenvaneenrequestdoorhet frameworkdebottleneckzit. Django Djangoiseenwebframeworkgeschrevenvooreninde programmeertaalpython(python, 1991).DetaalPython stamtuithetbeginvandejarennegentigenis ontworpendoordenederlanderguidevanrossum. HetprojectDjangoisontstaanin2005enisgebaseerd ophetmvcdesignpatternwathierbovenreedsis uitgelegd.daarbijhanteertdjangoweleenanderebenaming:watinmvcde controllerheet,heetindjangodeviewenwatinmvcdeviewisgenoemd,noemt Djangodetemplate.Hetideehierachteris,isdatdeviewdedatabeschijftdie getoondwordtaandegebruiker,maarniethoediedataerdanuitziet.detemplate bepaaltdanhoededataeruiteindelijkuitkomttezien.jezouhetframeworkdan alseenmtvframeworkaankunnenduiden. DemanierwaaropDjangoeenrequestverwerkt,zieterschematischalsvolgtuit: (Holovaty & Kaplan-Moss, 2007) 15

Afbeelding5RequestverwerkingvanDjango DitzieterietsandersuitdehetschemavanCakePHPenRoRenbehoeftwatuitleg. WaneerereenHTTP requestbinnenkomt,wordtditdoorhetframework verwerkttoteenhttprequestobject.viadeurlconfwordthiernadejuisteview aangesproken,dieditverzoekverderafdienttehandelen.wanneerereenfout optreedt,wordtditdoordeexceptionhandleropgepakt,enuiteindelijkgaatalles viaeentemplatelangsderedsponsemiddlewareterugnaardeclient. InfeitelijktditdusergophetMVCpatroonvandeanderetweeframeworks,maar iseenenanderwatandersbenoemd. Features HieronderstaateenlijstvandemeestopvallendefeaturesdieDjangobiedt: Uitgebreideondersteuningvoorformulierverwerkingenvalidatie Standaardbeheer interface,dieautomatischbeschikbaariszondercode daarvoortehoevenmaken Standaardauthenticatiesysteem Eigentemplatesysteem,gebaseerdopovererving 16

Templatesyssteenisvoorzienvantagsenfiltersomeenvoudighetuiterlijk vandeoutputtebepalen. Ondersteuningvoorcookies StandaardCRUDondersteuning Vriendelijke(mensenzoekmachine)URL'senaangepasteroutes Caching Ondersteuningvoormeertaligeapplicaties Securityondersteuning Conclusie Dithoofdstukbiedteenbeschrijvingvanalleframeworksdievergelekenzullen wordeninhetvervolgvanditonderzoek.daarbijzijnuiteraardnietalledetails besproken,datisnatuurlijknietmogelijk,maareriseengoedbeeldontstaanover hoedezeframeworksinelkaarsteken.daarmeeisdetweededeelvraag beantwoord. 17

H5. Vergelijkingoptestondersteuningvandeframeworks Inleiding Dithoofdstukbeschouwtdeondersteuningdiedeframeworks,zoalswedie geïntroduceerdhebbeninhoofdstuk4,biedenaandeverschillendesoortentests dieinhoofdstuk3staanbeschrevenenbeantwoordhiermeedederdedeelvraag zoalsdieisopgesteldinheteerstehoofdstuk.deresultatenzullenallereerstin tabelvormgepresenteerdworden,waarnadeopvallendeverschillen,of onderdelendiedatbehoeven,toegelichtzullenworden. Testondersteuning Onderstaandetabelgeefteenoverzichtvanwelkesoortentestsondersteunt wordenperframework.hierbijisinitieelalleengekekennaardeondersteuning diedeframeworks out of the box bieden,maarvanwegedemodulaireopzetvan sommigeframeworksiservoorgekozenomtevermeldenwanneereenbepaalde featuremiddelseenenkelepluginondersteuntwordt. Typetest CakePHP Django RubyonRails Handmatigtesten Captureandplayback Codecoverageanalyse ++ * * Doctests ++ * Unittests ++ ++ ++ Fixtures ++ ++ ++ Objectmocking ++ * ++ Functioneletests ++ ++ Databasewijzigingen ++ ++ HTTPredirects + ++ Viewvariabelen/objecten ++ ++ Authenticatie Webtests GETrequests ++ ++ ++ POSTrequests ++ ++ ++ Fileuploads ++ ++ HTTPHeaders ++ ++ ++ HTTPredirects + ++ Viewvariabelen/objecten ++ ++ 18

Cookies ++ ++ Outputtests ++ + ++ Interface/inbrowsertests ** * * Model basedtesting +:biedtenigeondersteuning,++:biedtruimeondersteuning,*:biedtondersteuningmiddelsplugin Toelichtingopderesultaattabel Dezeparagraafbespreektdeopvallendeverschillenenonderdelendietoelichting behoevenuitderesultaattabeldiehierbovenbeschrevenstaat.daarbijdient allereerstopgemerkttewordendatdemaniervantestenvancakephpenrubyon Railsgoedmetelkaarvergelijkbaarzijn,omdatzedezelfdeindelingentypetests kennen,watookteverklarenisaangeziendeopbouwvandebeideframeworks sterkegelijkenisvertoond.djangoechterkenttweesoortentests:standaard unittests,dieeigenlijkdirectuitpythonkomen,entestsdiegebruikmakenvan Django sclientklasse.dielaatstebevatinfeitedemogelijkhedendiebijcakephp enrorverdeeldzijnoverdefunctioneletestsendewebtests. Handmatigtestenencaptureandplaybacktest Geenvanalleframeworksbiedtondersteuningvanhethandmatig,bijvoorbeeldvia decommandlineinterface,uitvoerenvanbepaaldetests.daarmeeisde ondersteuningvancaptureandplaybackvandezetestsnatuurlijkookonmogelijk. Alleframeworksgaanuitvanhetuitvoerenvantestsineenscript. Doctests AlleenDjangobiedtstandaardondersteuningvoordezogenaamdedoctests.RoR kanwelwordenuitgerustwordenomditteondersteunen,doorhetgebruikenvan eenplugin.omeenbeeldtevormen,eendoctestindjangozieteralsvolgtuit: def get_elem(a_list, index): """ >>> a = ['John', 'Sjaak', 'Piet'] >>> my_func(a, 0) 'John' >>> my_func(a, 1) 'Sjaak' """ return a_list[index] Codevoorbeeld1:doctestinDjango Unittests Alleonderzochteframeworksbiedeneenruimeondersteuningvoorhetuitvoeren vanunittests.daarbijbiedenookalledriedeframeworksdemogelijkheidtothet gebruikvanfixtures,ietswatbijzonderhandig,bijnanoodzakelijk,isvoorhet efficiëntopstellenvandetests.hetisdaarbijwelinteressantomvoorelk 19

frameworkeensimpeleunittesttelatenzien,zodatdeverschillenen overeenkomstenzichtbaarworden.wegaandaarbijuitvaneensimpelmodel genaamdcar,waarbijeenautoeenbepaaldekleurkanheeft. class CarTest extends Car { var $name = 'CarTest'; var $usedbconfig = 'test_suite'; } class CarTestCase extends CakeTestCase { var $fixtures = array( 'car_test' ); function testcolor() { $this->cartest =& new CarTest(); } } $result = $this->cartest->color("ferrari"); $this->assertequal($result, 'red'); Codevoorbeeld2:unittestinCakePHP import unittest from myapp.models import Car class CarTestCase(unittest.TestCase): def setup(self): self.ferrari = Car.objects.create(name="Ferrari", color="red") def testcolor(self): self.assertequals(self.ferrari.color(), 'red') require 'test_helper' Codevoorbeeld3:unittestinDjango class CarTest < ActiveSupport::TestCase fixtures :cars def test_color color = Car.color('Ferrari') assert_equal color, 'red' end end Codevoorbeeld4:unittestinRubyonRails 20

Zoalstezienis,losvandeverschillendetaalconstructies,zijnditsoortsimpele testsinalleframeworksopvergelijkbaremanieroptezetten.detestvandjango gebruikt,terdemonstratie,geenfixtureszoalsdeanderetweewel,maarheeftook diemogelijkheidendatgeldtandersomook. Objectmocking Eenanderopvallendpuntinonzevergelijkingisobjectmocking.Ditwordt gebruiktomafhankelijkhedenbijhettestentereducerenendaarvoorbieden zowelroralscakephpondersteuning.bijobjectmockingwordtereennieuwe klassegemaaktvaneenbepaaldereferentieklasse,waarbijallebestaande methodesnogbestaan,maardezezijnallemaalleeg.beideframeworkshebbenook nogeensdemogelijkheidtotzogenaamdpartialmocking,zodathetmogelijkisom sommigemethodeswelinoorspronkelijkestaattehouden.djangoondersteunt objectmockingnietstandaard,maarkanmiddelseenpluginhierweltoeuitgerust worden. Functioneletests Zoalsaleerderopgemerkt,scharenCakePHPenRoRhettestenvandecontrollers onderdefunctioneletests.detestdiedaarbijuitgevoerdwordt,betreftdusnieteen simulatievaneenhttprequest.djangokentdezemaniervantestenniet,views (watdecontrollerswordengenoemdindeanderetweeframeworks)entemplates wordengetestmiddelssimulatievanhttprequests. Fileuploads Eenbelangrijkonderdeelbijhettestenvanwebformulieren,ishetkunnentesten vanformulierenwaarbijhetuploadenvaneenbestandeneenrolspeelt.ditiseen situatiediebijwebapplicatiesnatuurlijknietongewoonisendaaromookgetest zoumoetenkunnenworden.cakephpbiedthieralsenigeframeworkgeen ondersteuningvoor,hoewelhetwelinderoadmapvoortoekomstigereleases staatopgenomen. HTTPRedirects EencontrollertestdiedetecteertwelkeHTTP headersdecontrollerterugstuurt,is inrubyonrailswelmogelijk,maarnietincakephp.wileendergelijketestgedaan wordenincakephp,danishetwelmogelijkomdaareenworkaroundvoorte maken.omdittedemonstrerenstaathierondereersteenvoorbeeldvaneen dergelijketestinrorenvervolgensincakephp. def test_should_create_post assert_difference('post.count') do post :create, :post => { :title => 'Hello', :body => 'This is my first post.'} end assert_redirected_to(:controller => "posts", :action => "index") assert_equal 'Post was successfully created.', 21

end flash[:notice] Codevoorbeeld5:FunctioneletestinRubyonRails class TestPostsController extends PostsController { var $name = 'Posts'; function redirect($url, $status = null, $exit = true) { $this->redirecturl = $url; } } function _stop($status = 0) { $this->stopped = $status; } class PostsControllerTestCase extends CakeTestCase { function construct() { $this->posts = new TestPostsController(); } function testcreate() { $beforecount = $this->posts->post->find('count'); $this->posts->data = array( 'Post' => array( 'title' => 'Hello', 'body' => 'This is a test post!', ) ); $this->posts->add(); $aftercount = $this->posts->post->find('count'); $this->assertequal($beforecount+1,$aftercount); $this->assertequal($this->posts->session-> read('message.flash.message'), 'Post was successfully created.'); } $this->assertequal($this->posts->redirecturl, array('action' => 'index')); } Codevoorbeeld6:FunctioneletestinCakePHP Zoalsuitditvoorbeeldblijkt,isdetestinRubyonRailseenstuksimpelerdandiein CakePHP.DitverschilkomtvoornamelijkomdatinCakePHPbepaaldemethodes vandecontrolleroverschrevenmoetenwordenomzegoedtekunnentesten.in 22

RoRisdatnietnodigenzitdieondersteuningzonderextramoeitedirect ingebakken. Djangobiedtookdergelijkeondersteuning.Zoalsalopgemerkt,zitdeze functionaliteitbijditframeworkopeenwatandereplaats,maartochiseen vergelijkbaretestmogelijk: from django.test import * import doctest class ViewTests(TestCase): def runtest(self): c = Client() response = c.post('/posts/add',{'title': 'Test title', 'message': 'This is the actual post'}) self.assertredirects(response, '/posts/') self.assertequal(self.response.context['flash'] ['message'], 'Post was successfully created.') Codevoorbeeld7:webtestinDjango Outputtests Totslotkijkenwenognaardeondersteuningdiedeframeworksbiedenophet gebiedvanoutput analyse,ietswatbijwebframeworkseenbelangrijkissueis. HierkunnenweconcluderendatCakePHPenRubyonRailshiereenuitgebreide ondersteuningvoorbeiden.omdeverschillenenovereenkomstente demonstrerenzettenwenogmaalseenvergelijkbaretestopvooralleframeworks. class mytestwebtestcase extends CakeWebTestCase { function testhomepage() { $result = $this->get('/pages/home'); $this->assertresponse(200); $this->asserttext('lorem ipsum dolor sit amet.'); $this->asserttitle('foobar :: Home'); }} $this->assertelementsbyselector( ul#navigation > li', array('menu item 1', Menu item 2 ) ); Codevoorbeeld8:outputtestinCakePHP def test_should_show_post get "/pages/home" assert_response :success 23

# Assert_select zeer krachtig assert_select 'title', 'Foobar :: Home' assert_select 'ul.navigation' do... end end Codevoorbeeld9:outputtestinRubyonRails def test_home(self): response = self.client.get('/pages/home') self.assertequal(response.status_code, 200) # Zijn er 5 newsitems aan de template gestuurd? self. assertequal(len(response.context['newsitems']), 5) self.assertequal(response.template[0].name, 'home.html') Codevoorbeeld10:outputtestinDjango Eenaantalverschillenisdemoeitewaardomeventebelichten.Zoalstezienvalt, biedenrorencakephpdemogelijkheidomdeoutput,watmeestalhtmlis, vergaandteanalyseren.djangokanwelzienoferbijvoorbeeldeenbepaaldestring indeoutputzit,maarkandehtml structuurnietanalyseren. Djangoheeftweldemogelijkheidomtezienwelkevariabelendeviewheeft doorgegevenaandetemplate.ookrubyonrailsheeftdieoptie,maarmetcakephp valtdatalleentetestenmeteenfunctioneletest. In browsertests Alleframeworkshebbeneensterretjebijin browsertests,omdatertoolszijndie ditonafhankelijkvanhetframeworkkunnedoen.eenvoorbeeldvaneen dergelijketoolisselenium(seleniumhq).helaasisdienietbrowseronafhankelijk, ietswatbijwebpagina sweleenbelangrijkpuntis.cakephpheefteeningebouwde koppelingvoorseleniumenisdaarmeeietsbeteruitgerustdandeanderetwee frameworks. Modelbasedtests Helaaszijnmodelbasedtestnogeenstukjetehooggegrepenvooralleframeworks. Zoverikdatmetzekerheidkanzeggeniserooknoggeenenkelwebframeworkdie datsoortondersteuningwelbiedt. Conclusie Hetislastigomtoteengoedevergelijkingtekomentussendeframeworks.Dit wordtteneerstebemoeilijktdoordezeerverschillendewijzewaaropde frameworkshuntestshebbeningedeeld.kunjesomseenbepaaldetestniet linksomrealiseren,dankanhetvaakwelrechtsom. 24