dbquery TU Delft Bachelorproject IN3405 Verslag Auteur: Rutger PLAK (# ) Opdrachtgever: Larry POORT, Anan6 BV

Maat: px
Weergave met pagina beginnen:

Download "dbquery TU Delft Bachelorproject IN3405 Verslag Auteur: Rutger PLAK (#1358375) Opdrachtgever: Larry POORT, Anan6 BV"

Transcriptie

1 TU Delft Bachelorproject IN3405 dbquery Verslag Auteur: Rutger PLAK (# ) Opdrachtgever: Larry POORT, Anan6 BV Supervisor: Gerd GROSS Faculteit: EWI August 17, 2012

2

3 Voorwoord Om een bachelor Technische Informatica aan de Technische Universiteit van Delft af te ronden is het in de laatste fase van de opleiding verplicht een project te doen in de vorm van een stage bij een bedrijf of op de universiteit. Dit project heet het Bachelorproject en geldt voor 15 ECTS. Deze stage is uitgevoerd bij Anan6 BV te s Gravenhage in opdracht van eigenaar van Anan6 en tevens interne begeleider Larry Poort. Ik wil hem graag bedanken voor zijn hulp in de vorm van aanbevelingen en ervaringsgericht advies. Ook wil ik hem bedanken voor de ervaring die ik heb mogen opdoen tijdens deze stage. De heer Gerd Gross is tijdens deze stage de stagebegeleider namens de Technische Universiteit Delft geweest. Ook meneer Gross wil ik graag bedanken voor het mogelijk maken van deze stage. 1

4

5 Contents Voorwoord 1 Definities 7 I Eindproduct 8 1 Inleiding 9 2 Eindproduct Productomschrijving Objectives Het uit handen nemen van PHP programmatuur van de javascript programmeur Het uit handen nemen van MySQL programmatuur van de javascript programmeur Het uit handen nemen van het maken van klasses (functies) per tabel in javascript van de javascript programmeur Het minimaliseren van netwerkverkeer Functionaliteit Gebreken Toekomst en aanbevelingen Vooronderzoek Plan van aanpak Userstories Requirements Analysis Architectural Design Test and Implementation plan Procesverslag /07/ /07/ /07/ /07/ /07/ /07/ /07/ /07/ /07/ /08/ /08/ /08/ /08/ /08/

6 IN Bachelorproject - dbquery CONTENTS 4.8 Reflectie Documentatie Hoe dbquery werkt Installatie Configuratie db() Voorbeeld Voorbeeld Voorbeeld Voorbeeld dbobject.getattribute() Voorbeeld Voorbeeld dbobject.setattribute() Voorbeeld dbobject.save() Voorbeeld Voorbeeld dbobject.remove() Voorbeeld Voorbeeld Uitgebreid voorbeeld Testen Unit testing PHP Javascript Integration testing Acceptance testing II Vooronderzoek 34 A Plan van aanpak 35 A.1 Voorwoord A.2 Samenvatting A.3 Introductie A.3.1 Aanleiding A.3.2 Accordering en bijstelling A.3.3 Toelichting op de opbouw van het plan A.4 Projectopdracht A.4.1 Projectomgeving A.4.2 Doelstelling project A.4.3 Opdrachtformulering A.4.4 Op te leveren producten en diensten A.4.5 Eisen en beperkingen A.4.6 Voorwaarden

7 IN Bachelorproject - dbquery CONTENTS A.5 Planning B Userstories 39 B.1 Introductie B.2 Globale beschrijving B.3 Userstories Objecten Eigenschappen Opslaan Gebruiksgemak C Requirements Analysis 42 C.1 Introductie C.2 Overzicht C.2.1 Clientside C.2.2 Serverside C.3 Functional requirements C.3.1 Objecten C.3.2 Semantische links C.3.3 Eigenschappen van objecten C.3.4 Opslaan C.3.5 Installatie C.4 Quality requirements C.4.1 Toegankelijkheid C.4.2 Prestaties / Efficientie C.4.3 Onderhoudbaarheid C.4.4 Betrouwbaarheid en beschikbaarheid C.4.5 Security C.4.6 Precisie en accuraatheid C.5 Design requirements C.5.1 Constraint gebaseerd op het type gebruiker C.6 Process requirements C.6.1 Ontwikkelmethode C.6.2 Kosten en opleveringsdatum C.7 Constraints C.8 Analysis models C.8.1 Use case models C.8.2 Dynamische weergave dataverkeer D Architectural Design 52 D.1 Introductie D.1.1 Doel van het systeem D.2 Voorgestelde software architectuur D.2.1 Ontwerppatroon D.2.2 Ontwerpprincipes D.2.3 Systeemcomponenten D.2.4 Subsysteem decompositie D.2.5 Hardware / Software mapping

8 IN Bachelorproject - dbquery CONTENTS D.2.6 Persistent Data Management D.2.7 Global Resource handling en Access Control voor verschillende actoren 58 D.2.8 Randvoorwaarden E Test and Implementation plan 60 E.1 Introductie E.2 Requirements met MoSCoW E.2.1 Must E.2.2 Should E.2.3 Could E.2.4 Won t E.3 Implementatie en tests E.3.1 Volgorde voor het implementeren van de features E.3.2 Documentatie E.3.3 Unit testen E.4 Risico analyse F Afwegingen 64 F.1 Databasesoort F.2 PHP vs. NodeJS F.2.1 PHP F.2.2 NodeJS F.2.3 PHP vs. NodeJS F.2.4 Conclusie F.3 Standaardisatie berichten F.3.1 Server naar client F.3.2 Client naar server F.4 Chaining F.4.1 Introduction F.4.2 Directe chaining F.4.3 Callbacks F.4.4 Combinatie van beide G Voorbeeldcode 71 G.1 NodeJS G.2 PHP Bibliografie 76 6

9 Definities Apache + Webservice die op serverside draait. Backwards Compatibility + Updates van de software zijn altijd te gebruiken met software die de oudere versie gebruikt. Beta versie + Update van software die nog in de testfase is maar wel openbaar wordt gemaakt. Client + Computer die met behulp van bepaalde software (dbquery.js) via een netwerk gebruikt maakt van de software op de server. Clientside + Software aan de kant van de client. Database + Georganiseerde collectie data op de server. Databasecommunicatie + Communicatie met de database. Databasetabel + Tabel in een database die informatie bevat. dbquery + Naam van de te ontwikkelen software. Documentatie + Document waarin alle code van de software staat uitgelegd. Entry + Regel in een databasetabel waarin gegevens staan. Foreign key + Sleutel in een databasetabel waarin een link ligt naar een andere databasetabel. HTML + HyperText Markup Language. Syntax die gebruikt wordt om webbrowsers websites te laten draaien en renderen. Javascript + Programmeertaal die op clientside gedraaid wordt in webbrowsers. json + Door zowel PHP als Javascript te interpreteren manier van informatie coderen. jquery + Javascript library die browser compatibiliteit gemakkelijker maakt. MySQL + Relational Database Management System die draait op serverside. Dit systeem omvat de database en heeft deze database is toegankelijk met een door MySQL gedefinieerde syntax. MySQL-poort + Netwerkpoort die open staat om verkeer binnen te kunnen krijgen voor MySQL. NodeJS + Software waarmee javascript op een server kan draaien. Open-Source + Manier van software uitgeven waarbij de code volledig openbaar is. PHP + Programmeertaal die op serverside gedraaid wordt en aanroepen kan verwerken vanaf de clientside. Pseudocode + Niet werkende nep code die eenvoudig leesbaar is en een goed beeld geeft van de uiteindelijke code. Release versie + Versie van software waarbij alle updates in de nieuwe versie volledig getest zijn. SCRUM + In korte sprints werkende software leveren. Na iedere iteratie blijft de software werken maar worden er nieuwe functionaliteiten toegevoegd. Server + Machine waarnaar via een netwerkverbinding aanroepen naar gedaan kunnen worden. Serverside + Software aan de kant van de server. Sleutel + Identifier van een entry in een database. SVN (Subversion) + Manier van versiebeheer waarbij alle gecommitte wijzigingen (revisions) ongedaan gemaakt kunnen worden. Tabel + Zie databasetabel. Tabelnaam + Naam van een databasetabel. 7

10 Part I Eindproduct 8

11 Chapter 1 Inleiding In de inleiding zal de gedachte achter het project worden uitgewerkt aan de hand van de huidige situatie, de tools die gebruikt worden om een bevredigend eindresultaat te leveren en een globale beschrijving van het eindproduct zelf. De opdrachtgever Anan6 BV ontwerpt, implementeert en onderhoudt webbased software. Deze software wordt gemaakt in het zelfgemaakte Content Management Systeem Anan6 CMS. Het betreft in veel gevallen intranet systemen van bedrijven. Zo heeft Anan6 BV een Bussiness Process Management System (BPMS) dat door vele bedrijven wordt gebruikt. Hierin kunnen bedrijven al hun administratie verwerken, aan de hand van door de bedrijven zelf vastgelegde protocollen en routeformulieren. Het BPMS zorgt ervoor dat alle taken behorende bij een bepaalde klantafhandeling worden uitgevoerd en het BPMS motiveert de gebruikers van het systeem deze handelingen zo snel en efficiënt mogelijk af te handelen. Deze systemen maken bijzonder veel gebruik van databases. De data van alle klanten van de bedrijven staan in databases en moeten worden gebruikt in de systemen. Om deze data te kunnen gebruiken, moet deze worden opgehaald van de server op een zodanige manier dat de informatie bruikbaar is aan de clientside van de software. Anan6 BV wil de manier van informatie vergaren uit een database richting de clientside van de software vereenvoudigen, om tijd te besparen en de code van de systemen meer uniform te maken. Om dit te realiseren wordt dit bacheloreindproject uitgevoerd. In de loop der jaren zijn de systemen van Anan6 BV gestaag gegroeid. De grote en uitgenormaliseerde databases worden elk met aparte software benaderd. Door een javascript plugin te creeëren die de databaseafhandeling voor zijn rekening neemt, worden alle aparte softwareschillen om databasecommunicatie te realiseren overbodig. Belangrijker nog, toekomstige softwareschillen voor databasecommunicatie hoeven niet geschreven te worden. In dit document wordt de onderzoeksfase van het bacheloreindproject uitgewerkt. Aan de hand van deze onderzoeksfase is software ontwikkeld in de implementatiefase. Beide fases zijn uitgebreid gedocumenteerd en vastgelegd in dit document. Er wordt vooraf gepland en achteraf gereflecteerd. Ook zullen toekomstige features die de plugin zouden kunnen verbeteren uitgewerkt. Dit document zal tevens documentatie van de software bevatten. Ook zal geconcludeerd worden in hoeverre de software bruikbaar is en hoe deze open source software voor andere bedrijven bruikbaar kan zijn. 9

12 IN Bachelorproject - dbquery CHAPTER 1. INLEIDING Huidige situatie Wanneer in de huidige situatie informatie nodig is of aan te passen moet zijn, zijn er verschillende softwarecomponenten nodig: Er moet een javascript object worden gemaakt die overeenkomt met de databasestructuur, waar de vergaarde informatie moet worden opgeslagen. Er is een javascript die een call doet naar de server, die de benodige informatie doorgeeft aan de server. Op de server is een script dat luistert naar de javascript call. Op de server wordt in MySQL informatie uit de database opgehaald of aangepast. Door MySQL geretourneerde informatie wordt door PHP op de server verwerkt en teruggestuurd naar de client. Het javascript bestand verwerkt de informatie die geretourneerd wordt door de server. Een programmeur van de systemen van Anan6 BV moet kennis hebben van zowel javascript, PHP als MySQL. Dit terwijl de programmeur de informatie slechts wil gebruiken in Javascript. Zowel PHP als MySQL zijn hierbij talen die slechts nodig zijn om de informatie te vergaren die hij in javascript wil gebruiken. Het wegnemen van PHP en MySQL uit de handen van de javascript programmeur zou tijd en geld schelen voor Anan6 BV. In hoofdstuk 2 wordt het geimplementeerde eindproduct uitgewerkt. Vervolgens zal in hoofdstuk 5 de documentatie van het eindproduct verwerkt zijn. In de Appendix kunnen de verschillende documenten, geschreven in de onderzoeksfase, gevonden worden. 10

13 Chapter 2 Eindproduct In dit hoofdstuk wordt het eindproduct van de opdracht beschreven. Er zal worden uitgewerkt wat het globale idee is achter het eindproduct. Ook wordt uitgewerkt waarom het product de huidige situatie zou verbeteren. Het nut van het eindproduct wordt hierin besproken aan de hand van de verschillen met de huidige situatie. De objectives van het product worden behandeld. Tevens zal worden uitgelegd waar het eindproduct niet zou werken en waar de huidige situatie de huidige versie van het eindproduct nog overtreft. Hierbij zal realistisch ingegaan worden op de gebreken van de huidige versie van het systeem. Ook zal worden uitgewerkt op welke manier het eindproduct in de toekomst kan worden uitgebreid. 2.1 Productomschrijving Het eindproduct zal databasecommunicatie vanuit javascript op de clientside vereenvoudigen. Hierbij zullen objecten aan de hand van hun databasetabelnaam kunnen worden opgehaald uit de database. Om dit te bereiken zal een javascript programmeur slechts een enkele functie hoeven aan te roepen. Hierbij geeft hij aan welke databaseregels er moeten worden opgehaald. Dit kan aan de hand van een identifier of selectiecriteria. Wanneer de javascript programmeur deze objecten heeft aangemaakt, kan hij ze gebruiken als normale objecten. Hij kan hierbij alle eigenschappen die het object in de database bevat opvragen en aanpassen. Wanneer aanpassingen moeten worden opgeslagen in de database, kan de programmeur dit met een eenvoudige functie aanroep doen. Goed uitgenormaliseerde databases bevatten veel foreign keys. Deze sleutels wijzen naar andere tabellen in de database. Op deze manier kan een tabel klant naar een tabel adres linken. Wanneer drie klanten op hetzelfde adres wonen, bevatten zij alle drie een foreign key naar dezelfde regel in de tabel adres. Hierbij wordt redundante informatie gereduceerd. Wanneer een javascript programmeur aan het klantobject het adres opvraagt, wordt een database object van het type adres teruggestuurd. 2.2 Objectives De main objectives van de te implementeren javascript plugin zijn: 1. Het uit handen nemen van PHP programmatuur van de javascript programmeur. 2. Het uit handen nemen van MySQL programmatuur van de javascript programmeur. 11

14 IN Bachelorproject - dbquery CHAPTER 2. EINDPRODUCT 3. Het uit handen nemen van het maken van klasses (functies) per tabel in javascript van de javascript programmeur. 4. Het minimaliseren van netwerkverkeer. Wanneer deze objectives behaald zijn, kan gesproken worden van een succesvol verlopen project. Ieder van deze objectives zijn een zeer wenselijke situatie. De voordelen van het behalen van de objectives wordt in de komende secties uitgewerkt Het uit handen nemen van PHP programmatuur van de javascript programmeur. In de huidige situatie moet een javascript programmeur wanneer hij objecten uit de database wil halen in PHP een door javascript aanspreekbare webservice schrijven. Deze webservice moet vervolgens objecten per tabel gebruiken. Deze objectklassen moeten ook worden geimplementeerd door de programmeur. Vanuit PHP wordt met MySQL gecommuniceerd met de database. De javascript programmeur zal om al deze functionaliteit te implementeren een goede kennis hebben van PHP. Deze kennis moet worden vergaard. Het leren van PHP kost zeer veel tijd. Javascript en PHP zijn functioneel vrij verschillende programmeertalen. De asynchroniteit van javascript en de sequentialiteit van PHP staan lijnrecht tegenover elkaar en vereisen een volledig andere behandeling van functie afhandelingen. Hierdoor kan het voor een programmeur lastig zijn om zowel Javascript als PHP volledig te beheersen. Wanneer het niet nodig is voor een javascript programmeur om PHP te beheersen, kunnen kosten worden bespaard op opleiding en/of training. Ook zou het tijdens de implementatiefase veel tijd kosten om voor iedere databasetabel een aparte PHP klasse te schrijven met een webservice erbij. Deze tijd moet iedere keer opnieuw worden gebruikt. Het wegnemen van deze verplichting scheelt veel tijd en geld Het uit handen nemen van MySQL programmatuur van de javascript programmeur. Vanuit PHP kan worden gecommuniceerd met de databases. Anan6 gebruikt hiervoor MySQL. Het vergaren van informatie uit de database benodigd het uitvoeren van MySQLqueries naar de database. Deze MySQL queries hebben een syntax die is vastgesteld door MySQL. Iedere tabel heeft een andere structuur en zal anders benaderd moeten worden. Per tabel moet een programmeur zich verdiepen in de tabel en per gewenste actie is een andere MySQL querie nodig. De geretourneerde informatie vanuit MySQL moet worden verwerkt in PHP. Door de volledige databasecommunicatie van PHP naar MySQL te automatiseren, hoeft de programmeur geen verstand te hebben van MySQL. De volledige databasestructuur, datatypes, default values e.d. hoeven niet meer tot de kennis van de programmeur te behoren. De structuur van de tabellen staat vastgesteld in interne databasetabellen binnen MySQL. Automatisch uitlezen van deze tabellen kan deze functionaliteit mogelijk maken. Wanneer deze functionaliteit is geimplementeerd, hoeft een javascript programmeur geen verstand meer te hebben van MySQL. Hiermee kan Anan6 BV kosten besparen in het opleiden van werknemers om MySQL te beheersen. Tevens kan de tijd die wordt gebruikt 12

15 IN Bachelorproject - dbquery CHAPTER 2. EINDPRODUCT om MySQL queries te implementeren nu voor andere doeleinden worden gebruikt en kan Anan6 BV hiermee tijd (en geld) besparen Het uit handen nemen van het maken van klasses (functies) per tabel in javascript van de javascript programmeur. Iedere tabel in een database kan gezien worden als een klasse. Iedere regel in deze tabel kan gezien worden als een object van deze klasse. Om informatie uit de database bruikbaar te maken, is het handig om een schil om de databasetabel te maken. Deze schil wordt geimplementeerd in de vorm van een klasse. Deze klassen moeten per tabel worden geimplementeerd. Dit is veel werk, gezien alle functies voor iedere tabel voor iedere kolom opnieuw geimplementeerd moeten worden. Door het aanmaken van deze klassen te automatiseren, kan veel tijd worden bespaard. Dit is mogelijk door de interne MySQL structuur van de tabellen uit te lezen en aan de hand hiervan de eigenschappen van een klasse dynamisch te vullen Het minimaliseren van netwerkverkeer. Wanneer er met een database gecommuniceerd moet worden vanuit een client, moeten er calls vanuit javascript naar de server plaatsvinden. Deze calls sturen informatie over een netwerk naar de server. De server stuurt op zijn beurt informatie terug over het netwerk naar de client. Om netwerkbelasting te minimaliseren moeten deze calls zo min mogelijk worden uitgevoerd. Er zijn op twee momenten netwerkverkeer noodzakelijk: Bij het uitlezen van objecten uit de database. Bij het opslaan van informatie in de database. Door slechts bij deze twee acties een netwerkcall te doen, wordt het netwerk zo min mogelijk belast. Wanneer een set objecten uit de database wordt gehaald, moeten deze in één call worden teruggestuurd. De aangemaakte objecten kunnen globaal worden bewaard aan de clientside. Zij hoeven niet steeds opnieuw ingelezen te worden. 2.3 Functionaliteit Om gebruiksvriendelijk en eenvoudig te werken, moet dbquery zo min mogelijk functies hebben om zoveel mogelijk functionaliteit uit te voeren. De functies die uitgevoerd moeten kunnen worden zijn: Het ophalen van objecten uit de database. Het ophalen van attributen van objecten uit de database. Het aanpassen van attributen van objecten uit de database. Het opslaan van aanpassingen aan objecten in de database. Het verwijderen van objecten uit de database. Het ophalen van een set objecten uit de database met selectiecriteria. Het chainen [F.4] van functies. 13

16 IN Bachelorproject - dbquery CHAPTER 2. EINDPRODUCT Deze functionaliteiten worden bereikt met de volgende functies: db() Haalt (een) object(en) op uit de database aan de hand van tabelnaam en selectiecriteria. db.getattribute( naam ) Haalt attributen op van objecten. db.setattribute( naam, waarde ) Past attributen van objecten aan. db.save() Slaat aanpassingen op in de database. db.remove() Verwijdert object uit de database. Een uitgebreide documentatie van de functies kan gevonden worden in hoofdstuk Gebreken dbquery kan gebruikt worden voor eenvoudige databasecommunicatie. Hierbij kunnen aanpassingen worden gedaan aan tabellen en er kunnen semantisch gelinkte objecten aangeroepen worden die op hun beurt weer als dbobject kunnen worden benaderd en aangepast. Hierbij is een groot gedeelte van functionaliteit van databases gedekt. Echter, er zijn functionaliteiten die dbquery (nog) niet dekt: Uitgebreide selectiecriteria In de huidige versie van dbquery is het mogelijk om objecten uit de database te halen aan de hand van selectiecriteria. Zo kunnen alle klanten met leeftijd 23 uit de database worden gehaald, of alle winkels met soort supermarkt en zondagopen ja. Echter, in de praktijk is het vaak nodig om ingewikkeldere selectiecriteria mee te geven. Bijvoorbeeld alle klanten van 23 tot 25 jaar. Of alle winkels met beschrijving lijkend op markt. Deze uitgebreidere selectiecriteria zijn in de huidige versie van dbquery niet mogelijk. In de huidige versie is het slechts mogelijk om = selectiecriteria mee te geven, gebundeld door en. n op n gelinkte tabellen In de praktijk zijn tabellen vaak n op n gelinkt. Hierdoor bestaat er een extra tabel met twee foreign keys. Het is in de huidige versie van dbquery niet mogelijk om deze objecten op te halen. De n op n semantische links worden niet ondersteund. Ingewikkelde select sets Vaak worden objecten uit een tabel geselecteerd door ingewikkelde selectiecriteria die meerdere tabellen overspannen. Zo kan het zijn dat alle klanten waarvan het adres (andere tabel) nog geen postcode bevat opgevraagd moeten worden. Dit wordt door de huidige versie van dbquery nog niet ondersteund. Waar meerdere tabel overspannende selectiecriteria in direct MySQL in 1 query uitgevoerd kunnen worden, moet nu geïtereerd worden over alle rijen om te controleren of het adres een postcode bevat. 2.5 Toekomst en aanbevelingen In volgende versies van dbquery kunnen uitbereidingen worden gedaan om de huidige gebreken van dbquery te verminderen. De plannen van Anan6 BV zijn om dbquery uit te brengen en verder door te ontwikkelen. Enkele punten waarop dbquery kan worden doorontwikkeld: 14

17 IN Bachelorproject - dbquery CHAPTER 2. EINDPRODUCT Selectiecriteria zijn nu slechts mogelijk met de = operator, gelinkt door en statements. In de toekomst moeten selectiecriteria in plaats van uit twee delen uit drie delen bestaan, zodat de selectie kan worden uitgebreid. Waar nu { leeftijd, 23 } een selectiecriterium is voor leeftijd=23, moet het in de toekomst mogelijk zijn om { leeftijd, <, 23 } mee te geven, zodat alle personen onder de 23 jaar opgehaald worden. Ook moet het mogelijk zijn om text search te doen. Waar nu { soort, supermarkt } alle objecten met soort supermarkt ophaalt, moet het in de toekomst mogelijk zijn om { soort, like, %markt% } mee te geven, zodat ook een winkel met soort marktkraam wordt geselecteerd. In de huidige versie worden callbacks in callbacks uitgevoerd. In de toekomst kunnen deze callbacks samen worden gevoegd tot één callback die pas uitgevoerd wordt als het diepste niveau is geinitialiseerd. Waar nu bij een driedubbel gelinkte getattribute() drie aparte callbacks worden meegegeven, kan door javascript intern te manipuleren deze callbacks worden samengevoegd tot een enkele. Hiervoor is echter veel vooronderzoek nodig dat buiten dit project valt. 15

18 Chapter 3 Vooronderzoek Het te implementeren product is ontwikkeld na een uitgebreide onderzoeksfase. In deze fase zijn verschillende documenten geschreven en is veelvoudig overleg gepleegd. De documenten zijn in overleg met de opdrachtgever en betrokkenen geschreven door de ontwikkelaar. In de appendix zijn de documenten geschreven in het vooronderzoek te vinden. 3.1 Plan van aanpak Het plan van aanpak bevat de globale gang van het project. De planning wordt uitgewerkt en afspraken tussen opdrachtgever en ontwikkelaar worden uitgewerkt. 3.2 Userstories Om een indruk te krijgen wat het systeem moet kunnen zijn userstories geschreven. Dit zijn op een hoog abstractieniveau geschreven leesbare verhaaltjes waarin duidelijk wordt wat verwacht wordt van het systeem. Aan de hand hiervan is het mogelijk om verder onderzoek te verrichten naar de te implementeren globale functionaliteit. 3.3 Requirements Analysis In de Requirements Analysis zijn de globale requirements van de userstories dieper uitgewerkt. Er wordt hier op een lager abstractieniveau uitgebreid uitgewerkt wat het systeem exact moet kunnen. Hierin worden de toekomstige functionaliteiten uitgewerkt in verschillende categoriën. Ook worden de gevaren uitgewerkt. De Requirements Analysis dient als naslagwerk tijdens de ontwerpfase en implementatiefase. De gemaakte software moet voldoen aan de requirements. 3.4 Architectural Design Het systeem wordt uitgewerkt in componenten en hun subcomponenten. De architectuur van de software wordt uitgewerkt. Hierbij wordt zorgvuldig rekening gehouden met de implementatiefase, maar vooral ook na de implementatiefase. De software moet goed onderhoudbaar en testbaar zijn. Door de componenten en subcomponenten zo zorgvuldig mogelijk 16

19 IN Bachelorproject - dbquery CHAPTER 3. VOORONDERZOEK te ontwerpen kan coupling worden gereduceerd, afhankelijkheden worden geoptimaliseerd en kan ervoor worden gezorgd dat de software ook in de toekomst onderhoudbaar blijft. 3.5 Test and Implementation plan In dit document wordt uitgewerkt wat er precies geimplementeerd gaat worden. Aan de hand van het MoSCoW model wordt aangetoond welke requirements uit de Requirements Analysis essentieel zijn voor het systeem, welke wenselijk zijn en welke zouden kunnen worden geimplementeerd mocht de tijd dat toelaten. Ook wordt uitgewerkt hoe de software getest gaat worden. 17

20 Chapter 4 Procesverslag In het komende hoofdstuk wordt per week van het project kort uitgelegd wat er gedaan is en hoe ik deze weken heb ervaren /07/ /07/2012 In de eerste week van het project is veelvuldig overleg gepleegd met de opdrachtgever. In deze gesprekken is naar voren gekomen wat de huidige situatie voor problemen oplevert. Ook is de visie besproken waarmee dit zou kunnen worden opgelost. Aan de hand van deze gesprekken heb ik userstories geschreven. Deze userstories zijn tot stand gekomen door gezamelijk overleg. Hierdoor was geen draft nodig, de final version is donderdag 5 juli getoond aan de opdrachtgever die het goed vond. Op vrijdag 6 juli ben ik begonnen met de requirements analysis /07/ /07/2012 Het was in deze week veel nodig om onderzoek te doen naar wat er mogelijk is en wat er onmogelijk is om te doen. Hiervan is de realiseerbaarheid van de ideeën onderzocht en besproken. Aan de hand van deze besprekingen en de userstories zijn de requirements tot stand gekomen. Deze zijn uitgewerkt tot een requirements analysis. De draft heb ik op vrijdag (in overleg een dag nadat ik hem in zou leveren) ingeleverd bij de opdrachtgever /07/ /07/2012 In het weekend voorafgaand aan deze week heb ik onderzocht wat een architectural design moest bevatten, zodat ik maandag direct aan de slag kon. Aan de hand van de requirements analysis was het maken van een architectural design een aangename bezigheid die goed uitpakte. Ik heb hier in het weekend al een groot deel van geschreven. In datzelfde weekend had de opdrachtgever de requirements analysis doorgenomen. Na wat kleine aanpassingen heb ik dinsdag 13 juli de final version al kunnen overhandigen, waar de opdrachtgever erg blij mee was. De draft van het architectural design heb ik op de woensdag in de ochtend ingeleverd. Diezelfde middag heb ik met de opdrachtgever de architectural design besproken. Hij was positief verrast en vond de gevonden software architectuur erg goed. Na de bespreking ben ik begonnen met het schrijven van het test and implementation plan. Na 18

21 IN Bachelorproject - dbquery CHAPTER 4. PROCESVERSLAG het schrijven van de requirements analysis en architectural design was dit niet lastig. Alles zat al in mijn hoofd. Op de donderdag heb ik de draft van het test and implementation plan ingeleverd. De opdrachtgever wilde meer weten over QUnit en PHPUnit, na deze onderwerpen te hebben besproken is de test and implementation plan goedgekeurd en kon begonnen worden aan de implementatiefase /07/ /07/2012 Het begin van de implementatiefase heeft voornamelijk bestaan uit het schrijven van de PHP testklassen en PHP klassen die gebruikt worden in dbquery. Hierbij gaat het om dbobject.inc.php en dbattribute.inc.php. De functionaliteit van de functies is geimplementeerd, waarbij steeds slimmere algoritmes elkaars werk opvolgden. Rekening is gehouden met het direct documenteren van de code. De gehele PHP klassen dbobject en dbattribute zijn in de eerste week geimplementeerd. en testcases voor deze klassen zijn na de eerste week al geslaagd /07/ /08/2012 In het weekend voorafgaand aan deze week is de webservice q.php geschreven. Deze webservice maakt gebruik van dbobject.inc.php (en dbattribute.inc.php) en is aanspreekbaar voor de buitenwereld en dus ook door javascript. Gedurende de week is de javascript van het project ontwikkeld. Dit begon met testklassen over de testdatabase. Na het implementeren van het javascriptdeel dat de webservice aanspreekt en dynamisch objecten aanmaakt, werden de verschillende methoden van dbquery geschreven. Hierna was het van belang datums goed af te handelen in javascript, daar javascript en PHP verschillend met datums om gaan. Het implementeren van dit laatste deel van het eidproduct was zeer motiverend. Deze week is vrijwel iedere avond tot zeer laat doorgewerkt omdat het heel bevredigend is steeds dichter bij het gewenste eindresultaat te komen. Vanaf vrijdag was dbquery bruikbaar in de console /08/ /08/2012 Deze week is de code gefinetuned. Documentatie van de code (zowel inline als in dit document) is verfijnd en algoritmen zijn versneld. Er is veel werk besteed aan het verfijnen van het eindverslag en het completeren van de code. Functionaliteit om callbacks uit te voeren is omgezet van timeouts (het stilleggen van de uitvoering van code tot andere code is uitgevoerd) naar sequentiele callbacks. Hier is veel tijd in gaan zitten maar het maakt de code veel schoner en onderhoudbaarder /08/ /08/2012 Omdat dbquery opensource is, moet er een website zijn waar mensen de source-code kunnen downloaden. Zij moeten hier documentatie kunnen vinden van de code en zij moeten db- Query kunnen uitproberen. In deze week is er veel aandacht besteed aan de website. Quentin Buiteman heeft een ontwerp gemaakt en samen met hem heb ik de website afgemaakt. Er is Engelstalige documentatie geschreven en een plaats waar mensen de code kunnen uitproberen (live). Tijdens het maken van de website is geconstateerd dat dbquery niet werkte 19

22 IN Bachelorproject - dbquery CHAPTER 4. PROCESVERSLAG onder Internet Explorer 7. Doordat deze webbrowser een zeer slechte error-console heeft, ben ik veel tijd kwijt geweest aan het oplossen van deze bug. Gedurende het gehele proces is gewerkt aan het verslag. 4.8 Reflectie Tijdens de onderzoeksfase heb ik in samenwerking met Anan6 BV een heel ambitieus software plan geschreven. Tijdens de implementatiefase leek het er soms op dat deze plannen te ambitieus waren, maar doordat het architectural design goed gevolgd kon worden is de software volledig werkend opgeleverd. Vanaf het eerste moment dat een object uit de database kon worden gehaald (en er verder nog niets mee gedaan kon worden), groeide het enthousiasme enorm. Ik ben in de avonduren door gaan werken en heb veel kunnen doen. Het enthousiasme en de tevredenheid van opdrachtgever Larry Poort hielp er ook in mee. Ik heb het gevoel dat ik iets waardevols heb ontwikkeld en ben hier erg trots op. 20

23 Chapter 5 Documentatie In het volgende hoofdstuk wordt de documentatie van de clientside van javascript uitgewerkt. Voor iedere functie worden de parameters en de return values uitgewerkt. Voorafgaand hieraan wordt besproken hoe dbquery te installeren is op een server. Ook zullen er voorbeelden aanwezig zijn van hoe dbquery gebruikt kan worden. 5.1 Hoe dbquery werkt dbquery is een javascript framework die het mogelijk maakt met elke MySQL database te communiceren door slechts gebruik te maken van normale javascript. Het is niet nodig om enige serverside programmeertaal te kennen om toegang te krijgen tot deze databases. Door de methode db() aan te roepen, kan de database worden benaderd. De db() functie retourneert een (collectie van) javascript object(en), met al zijn attributen geinitialiseerd zoals ze gedefinieerd zijn in de database. Het geretourneerde object bevat de methoden getattribute(), setattribute(), save() en remove(), welke het mogelijk maken om regels in de database toe te voegen, aan te passen en te verwijderen. Om een db() object te initialiseren, zijn er drie parameters nodig: Selector De database en tabelnaam die aangesproken moeten worden. Filter Een filterobject dat het mogelijk maakt om een selectie van rijen te maken uit de database. Standaard is dit de identifier. Callback Deze functie wordt uitgevoerd wanneer alle rijen uit de database zijn gehaald en in javascript zijn geinitialiseerd. De parameter van de callback hangt af van de aanroep van de db() functie. 5.2 Installatie Om dbquery te gebruiken zijn er verschillende bestanden nodig: Serverside dbquery.config bevat informatie waarmee dbquery kan worden geconfigureerd (zie 5.3). 21

24 IN Bachelorproject - dbquery CHAPTER 5. DOCUMENTATIE dbobject.inc.php bevat de klasse dbobject, welk gebruikt wordt voor databasecommunicatie. dbattribute.inc.php bevat de klasse dbattribute, welk gebruikt wordt door dbobject om attributen af te handelen. q.php worden aanroepen naar gedaan vanaf de client. beschikbaar zijn voor buitenaf. Dit bestand moet dan ook Clientside jquery.js wordt gebruikt om ajax calls te maken naar de server. dbquery.js handelt alle objecten en handelingen af. De bestanden dbobject.inc.php, dbattribute.inc.php, dbquery.config en q.php moeten op de server worden geplaatst. In de HTML pagina s waar dbquery gebruikt gaat worden moeten jquery.js en dbquery.js worden geinclude in de header met de volgende code: 1 <head > 2 < script type =" text / javascript " src ="/ pad / naar / jquery.js" ></ script > 3 < script type =" text / javascript " src ="/ pad / naar / dbquery.js" ></ script > 4 </head > 5.3 Configuratie In het bestand dbquery.config moet worden aangegeven hoe dbquery met de database kan communiceren. De volgende gegevens zijn aanpasbaar: Verplicht $ HOST_OF_THE_DATABASE Dit is de hostnaam van de database. Dit kan een IP-adres zijn, of een traceerbare URL. Standaardwaarde is localhost. $ USER_OF_THE_DATABASE Dit is de databasegebruiker waarmee dbquery kan inloggen op MySQL. $ PASSWORD_OF_THE_DATABASE Dit is het wachtwoord van de databasegebruiker waarmee dbquery kan inloggen op MySQL. Optioneel $ PATH_TO_DBOBJECT Wanneer dbobject.inc.php, dbattribute.inc.php niet in dezelfde directory zitten als dbquery.config, moet dit veld worden ingevuld. $ DEFAULT_DATABASE Om dbquery zo eenvoudig mogelijk te gebruiken is het handig om een standaard database in te vullen (zie 5.4). 22

25 IN Bachelorproject - dbquery CHAPTER 5. DOCUMENTATIE $ READ_ONLY_MODE Wanneer dbquery gebruikt wordt om slechts de database uit te lezen en geen aanpassingen te doen, moet dit op true worden gezet. Standaardwaarde is false. Objecten aanmaken 5.4 db() De functie db is de hoofdfunctie van dbobject. db wordt gebruikt om objecten uit de database te maken of om een los object aan te maken. Hierbij zijn verschillende parameters mogelijk. Functie db( tabelnaam [, selectie ] [, handler(eventobject) ) Retourneert een array met objecten uit de database die aan de selectiecriteria voldoen, en een dbobject wanneer de selectie uit een integer bestaat. tabelnaam Naam van de tabel waar een object van aangemaakt moet worden, optioneel voorafgegaan door de databasenaam gescheiden met een punt. selectie De selectie heeft twee verschillende mogelijkheden: 1. Integer Een integer die het ID is van de op te vragen rij in de tabel. 2. Array Een array met selectiecriteria. De index is het attribuut, de waarde is de verplichte waarde. handler(eventobject) Callback die wordt uitgevoerd wanneer de objecten uit de database zijn gehaald. Wanneer er slechts een enkel object uit de database moet worden gehaald, kan db als constructor worden gebruikt. Nu is de eventobject het object, in plaats van de array met objecten Voorbeeld 1 In dit eenvoudige voorbeeld wordt een klant uit de database gehaald en gelogd. Omdat het om slechts 1 klant gaat, wordt de constructor (new) gebruikt. 1 new db( klanten,1, function ( klant ) { 2 console. log ( klant ); 3 }); Voorbeeld 2 In dit voorbeeld wordt een klant uit de database gehaald en gelogd. Omdat nu de constructor niet gebruikt wordt, wordt een array geretourneerd. 1 db( klanten,1, function ( klanten ) { 2 console. log ( klanten [0]) ; 3 }); 23

26 IN Bachelorproject - dbquery CHAPTER 5. DOCUMENTATIE Voorbeeld 3 In dit voorbeeld worden alle klanten van 23 uit de database gehaald en wordt gelogd hoeveel dat er zijn. 1 db( klanten, { leeftijd : 23 }, function ( klanten ) { 2 console. log ( klanten. length ); 3 }); Voorbeeld 4 In dit voorbeeld worden actieve klanten van 20 jaar oud uit de database gehaald en wordt hun bijnaam aangepast. 1 db( klanten, { leeftijd : 20, status : actief }, function ( klanten ) { 2 klanten. foreach ( function ( klant, i) { 3 klant. setattribute ( bijnaam, 20 jarige nummer +i). save (); 4 }); 5 }); Objecten gebruiken De volgende functies hebben betrekking tot objecten die in de callback van db kunnen worden gebruikt. 5.5 dbobject.getattribute() De functie getattribute kan gebruikt worden om een attribuut van een object op te vragen. Wanneer dit attribuut een sleutel is naar een andere tabel, wordt dit object opgehaald. Functie.getAttribute( attribute, handler(eventobject) ) Retourneert het attribuut dat wordt opgevraagd. attribute Op te vragen attribuut. handler(eventobject) Een functie die wordt uitgevoerd wanneer het attribuut een sleutel is, waarin eventobject het opgevraagde dbobject is Voorbeeld 5 In dit voorbeeld wordt een klant aangemaakt en wordt zijn naam geoutput. Vervolgens wordt zijn adres opgevraagd, die in een aparte tabel staat. Hiervan wordt de postcode geoutput. 1 new db( klanten,1, function ( klant ) { 2 // normale attribuut opvraag 3 console. log ( klant. getattribute ( naam )); 4 // adres linkt naar een andere tabel 5 klant. getattribute ( adres, function ( adres ) { 6 console. log ( adres. getattribute ( postcode )); 7 }); 8 }); 24

27 IN Bachelorproject - dbquery CHAPTER 5. DOCUMENTATIE Voorbeeld 6 In dit voorbeeld wordt een callback vooraf gedefinieerd, en losgelaten op ieder adres van de klant met leeftijd var remove = function ( adres ) { 2 adres. remove (); 3 } 4 db( klanten,{ leeftijd : 23 }, function ( klanten ) { 5 klanten. foreach ( function ( klant ) { 6 // gebruik vooraf gedefinieerde callback 7 klant. getattribute ( adres, remove ( adres )); 8 }); 9 }); 5.6 dbobject.setattribute() De functie setattribute kan gebruikt worden om een attribuut van een object aan te passen. Functie.setAttribute( attribute, newvalue) Retourneert het dbobject waarop de functie wordt aangeroepen, zodat de functie gechained kan worden. attribute Aan te passen kolomnaam. newvalue Nieuwe waarde van de kolom Voorbeeld 7 In dit voorbeeld wordt klant met identifier 1 uit de database gehaald. Zijn naam, voornaam en opleiding worden aangepast. 1 new db( klanten,1, function ( klant ) { 2 // aanpassingen maken 3 klant. setattribute ( naam, Plak ) 4. setattribute ( voornaam, Rutger ) 5. setattribute ( opleiding, Technische Informatica ); 6 }); 5.7 dbobject.save() De functie save kan gebruikt worden om gemaakte aanpassingen in een object op te slaan. Functie.save( handler(eventobject)) Retourneert het dbobject waarop de functie wordt aangeroepen, zodat de functie gechained kan worden. Doordat bij een save() een call naar de database moet worden gemaakt en soms informatie uit de database moet worden gehaald, is een callback beschikbaar. 25

28 IN Bachelorproject - dbquery CHAPTER 5. DOCUMENTATIE Voorbeeld 8 In dit voorbeeld wordt klant met identifier 1 uit de database gehaald. Zijn naam, voornaam en opleiding worden aangepast. Vervolgens worden deze wijzigingen opgeslagen in de database. 1 new db( klanten,1, function ( klant ) { 2 // aanpassingen maken 3 klant. setattribute ( naam, Plak ) 4. setattribute ( voornaam, Rutger ) 5. setattribute ( opleiding, Technische Informatica ) 6 // opslaan 7. save (); 8 }); Voorbeeld 9 In dit voorbeeld wordt een nieuwe klant aangemaakt. Zijn naam, voornaam en opleiding worden aangepast. Vervolgens worden deze wijzigingen opgeslagen in de database. De identifier van de nieuwe klant is nodig, deze is pas beschikbaar na de databasecall. De identifier wordt gelogd in de callback. 1 new db( klanten,0, function ( klant ) { 2 // aanpassingen maken 3 klant. setattribute ( naam, Plak ) 4. setattribute ( voornaam, Rutger ) 5. setattribute ( opleiding, Technische Informatica ) 6 // opslaan 7. save ( function ( klant ) { 8 console. log ( klant. getattribute ( klant )); 9 }); 10 }); 5.8 dbobject.remove() De functie remove 1 kan gebruikt worden om een object uit de database te halen. Functie.remove(handler(eventObject)) Na het verwijderen van een object uit de database, moeten er soms op een pagina taken worden uitgevoerd. Bij het verwijderen van een entry in een tabel, moet deze entry nadat hij uit de database is verwijderd ook van de pagina worden verwijderd. Hiervoor is een callback beschikbaar. eventobject is hierbij de identifier van het verwijderde object Voorbeeld 10 In dit voorbeeld wordt de klant met identifier 1 uit de database verwijderd. 1 new db( klanten,1, function ( klant ) { 2 // klant met id 1 uit de database halen 3 klant. remove (); 4 }); 1 In de initiele versie van dbquery heette deze functie delete(), maar die functienaam was gereserveerd in Internet Explorer 7 en gaf problemen. 26

29 IN Bachelorproject - dbquery CHAPTER 5. DOCUMENTATIE Voorbeeld 11 In dit voorbeeld wordt een klant verwijderd aan de hand van een verwijder button in een tabel 1 $( # mytable tr td. remove ). bind ( click, function () { 2 // dbobject aanmaken van klanten met het id van de tr 3 new db( klanten,$( this ). parent (). attr ( id ), function ( klant ) { 4 // klant met id van de tr uit de database halen 5 klant. remove ( function ( klantid ) { 6 // tr met klantid verwijderen 7 $( tr# + klantid ). remove (): 8 }); 9 }); 10 }); 5.9 Uitgebreid voorbeeld In het volgende voorbeeld wordt een idee geschetst hoe een combinatie van de functies kan worden gebruikt om eenvoudig een tabel aan te maken van een databasetabel met selectiecriteria, en hoe aan de hand van user-events de database kan worden aangepast. Het scenario is volledig fictief en niet praktijkgericht. customers orders orderitems products De aanwezige foreign keys zijn: orderitems.product products orderitems.order orders orders.customer customers 1 // Alle orderitems uit de database halen met een willekeurig selectiecriterium ( amount = 1, in dit geval ) 2 db( orderitems, { amount : 1}, function ( orderitems ) { 3 var otable = document. createelement ( table ); 4 // voor ieder van de orderitems 5 orderitems. foreach ( function ( orderitem ) { 6 var otr = document. createelement ( tr ); 7 otr. setattribute ( id, orderitem. getattribute ( orderitem )); 8 var otd = document. createelement ( td ); 9 otd. innerhtml = " Orderitem nummer :" + orderitem. getattribute ( orderitem ) 10 otr. appendchild ( otd ); 11 // product ophalen 12 orderitem. getattribute ( product, function ( product ) { 13 var otd = document. createelement ( td ); 14 otd. innerhtml = product. getattribute ( name ) + : + product. getattribute ( description ); 15 otr. appendchild ( otd ); 16 }); 27

30 IN Bachelorproject - dbquery CHAPTER 5. DOCUMENTATIE 17 // order ophalen 18 orderitem. getattribute ( order, function ( order ) { 19 var otd = document. createelement ( td ); 20 otd. innerhtml = aankoop gedaan op + order. getattribute ( date ); 21 otr. appendchild ( otd ); 22 // klant ophalen 23 order. getattribute ( customer, function ( customer ) { 24 var otd = document. createelement ( td ); 25 otd. innerhtml = customer. getattribute ( firstname ); 26 otr. appendchild ( otd ); 27 var otd = document. createelement ( td ); 28 otd. innerhtml = customer. getattribute ( street ); 29 otr. appendchild ( otd ); 30 var otd = document. createelement ( td ); 31 otd. innerhtml = customer. getattribute ( zipcode ); 32 otr. appendchild ( otd ); }); 35 }); 36 // wanneer er op de tr geklikt wordt, moet delorder worden uitgevoerd. 37 otr. setattribute ( onclick, delorder ( this )); 38 otable. appendchild ( otr ); 39 }); 40 document. getelementsbytagname ( body ) [0]. appendchild ( otable ); 41 }); 42 // functie om de order en het orderitem te verwijderen en de klant aan te passen 43 var delorder = function ( otr ) { 44 // opvragen om welke orderitem het gaat 45 var iid = otr. id; 46 db( orderitems, iid, function ( orderitem ) { 47 // order opvragen 48 orderitem. getattribute ( order, function ( order ) { 49 // klant opzoeken 50 order. getattribute ( customer, function ( customer ) { 51 // klant aanpassen 52 customer. setattribute ( name, nieuwe naam ) 53. setattribute ( firstname, nieuwe voornaam ) 54. save (); 55 }); 56 // order verwijderen 57 order. remove (); 58 }); 59 // orderitem verwijderen 60 orderitem. remove (); 61 }); 62 // rij verwijderen uit tabel 63 otr. parentnode. removechild ( otr ); 64 } Dit voorbeeld bestaat uit het halen van orderitems uit de database. Hierbij worden alleen de orderitems waarbij 1 object is besteld uit de database gehaald. Voor ieder orderitem wordt een regel aangemaakt in een tabel. Het bestelde product wordt opgehaald en in de regel gezet. Ook de datum waarop de order is gedaan en de klant worden in dezelfde regel verwerkt. Daarnaast is er nog een verwijderknop, die een functie aanroept waarbij de order verwijderd wordt. 28

31 Chapter 6 Testen Voor het onderhoudbaar maken van software dienen testcases voldoende aanwezig te zijn. Wenselijk is het dat alle functionaliteit van de software getest wordt. Alle functies moeten worden getest, evenals alle branches binnen deze functies. Tevens moet de onderlinge samenhang van de software worden getest. Componenten moeten goed samenwerken. Ten slot is het van belang dat de software voor de eindgebruiker werkt zoals de eindgebruiker verwacht. Voor PHP is gekozen voor PHPUnit als testsoftware. Voor Javascript is gekozen voor QUnit als testsoftware. In het volgende hoofdstuk wordt uitgewerkt hoe de tests geschreven zijn en hoe het testproces verlopen is. 6.1 Unit testing Bij unit testing worden individuele units van de software getest. Hierbij wordt iedere functie van een klasse getest. Er worden handelingen op objecten uitgevoerd en er wordt gecontroleerd of de verwachte output wordt bereikt PHP In PHP zijn dbobject.inc.php en dbattribute.inc.php getest. Hierbij worden alle functionaliteiten van dbobject.inc.php getest, waar dbattribute aan hangt. Voor iedere functie van dbobject.inc.php zijn een of meerdere testcases geschreven, die alle mogelijkheden binnen de functies dekken. Hierbij is een line-coverage score van 100% behaald voor zowel dbobject.inc.php als dbattribute.inc.php. Hiervoor is gebruik gemaakt van PHPUnit coverage: Figure 6.1: Coverage report voor dbobject.inc.php & dbattribute.inc.php 29

32 IN Bachelorproject - dbquery CHAPTER 6. TESTEN Figure 6.2: Coverage report van dbobject.inc.php Figure 6.3: Coverage report van dbattribute.inc.php Figure 6.4: Deel van de code in het coverage report Er volgt nu een van de testcases om een beeld te schetsen over testcases voor de PHP klassen binnen dbquery: 1 /** 2 * function to check if floats can be set 3 * check if the float save function works 4 */ 5 public function testfloat () { 6 $oobject = new dbobject ( dbquerytestdb. products,1); 7 $foldvalue = $oobject - > getattribute ( price ); 8 $oobject -> setattribute ( price,10.50) ; 9 $oobject -> save (); 10 $oobject = new dbobject ( dbquerytestdb. products, $oobject - > getattribute ( product )); 11 $this -> assertequals (10.50, $oobject -> getattribute ( price )); 12 $oobject -> setattribute ( price, $foldvalue ); 13 $oobject -> save (); 14 } Deze testcase is geschreven om te controleren of een float correct wordt opgeslagen in de database. Er wordt een object aangemaakt en zijn prijs wordt gezet. Het object wordt opgeslagen en de float moet goed in de database komen. Om dat te controleren wordt het object weer uit de database gehaald en wordt de waarde van de prijs gecontroleerd. Voor iedere functie zijn zulke testcases geschreven. 30

33 IN Bachelorproject - dbquery CHAPTER 6. TESTEN Javascript Omdat dbquery een javascript plugin betreft, is er slechts één bestand dat getest moet worden. Dit bestand is dbobject.js. Hierin bestaan verschillende functies. De constructor db(), zoals omschreven in de documentatie, kan worden gebruikt om objecten aan te roepen uit de database. Vervolgens kunnen met deze objecten verschillende handelingen worden verricht. Door al deze handelingen in testcases uit te voeren en de output te vergelijken met de verwachtte output, kan de software worden getest. Nu haalt de javascript van dbquery alle data uit de database. Omdat de serverside software onafhankelijk moet worden onderhouden van de javascript software, is het belangrijk dat de testcases van javascript niet falen als de server niet werkt. De componenten moeten onafhankelijk worden getest. Om dit te bereiken wordt de server gemocked aan de hand van MockJax. Er worden berichten teruggestuurd die aan de vooraf gedefinieerde standaarden voldoen. Hierdoor zullen javascript testcases gewoon slagen wanneer de server niets terugstuurt. De onderlinge samenwerking van de server en de client wordt behandeld bij integration testing. Voor alle functionaliteit van de javascript zijn testcases geschreven. Hierbij is een linecoverage van 84% behaald. Deze berekening is gemaakt door JSCoverage: Figure 6.5: Coverage report voor dbquery.js & afhankelijke libraries (niet getest) Figure 6.6: Deel van de code om een beeld te schetsen van een coverage report Er volgt nu een van de testcases om een beeld te schetsen over testcases voor de javascript binnen dbquery: 1 /** 2 * tests if invalid dates are ignored 3 */ 4 new db( orders, 0, function ( order ) { 5 var shopdate = new Date (); 6 order. setattribute ( date, shopdate ); 7 order. setattribute ( date, test ); 8 // Als de datum nog gelijk is aan shopdate, is de tweede setattribute genegeerd 31

34 IN Bachelorproject - dbquery CHAPTER 6. TESTEN Figure 6.7: Visuele output van qunit 9 equal ( order. getattribute ( date ), shopdate, Invalid date is ignored ); 10 start (); 11 }); In deze functie doet db() een aanroep naar de server. Deze wordt gemocked door MockJax: 1 /** NEW ORDER **/ 2 $. mockjax ({ 3 url : q. php, 4 data : { 5 action : get, 6 data : { 7 tablename : orders, 8 identifier : null 9 } 10 }, 11 responsetext : {" status ":" success "," msg ":" The requested item (s) ha(s)(ve) been succesfully loaded from the database."," action ":" get "," result ":{" found ":""," resultset ":[{" sdatabase ":" dbquerytestdb "," stablename ":" orders "," skeyname ":" order ",... // volledige response zoals vooraf gedefinieerd 12 }); 32

Technisch ontwerp. Projectteam 6. Project "Web Essentials" 02 april 2009. Versie 2.1.0

Technisch ontwerp. Projectteam 6. Project Web Essentials 02 april 2009. Versie 2.1.0 Projectteam 6 Faculteit Natuur en Techniek Hogeschool Utrecht Projectleider: Hans Allis, hans.allis@student.hu.nl Technisch ontwerp Project "Web Essentials" 02 april 2009 Versie 2.1.0 Teamleden: Armin

Nadere informatie

icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous

icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous 2006-2007 Inhoudsopgave 1 2 1.1 Programmeertaal PHP5..................... 2 1.2 MySQL database......................... 3 1.3 Adobe Flash...........................

Nadere informatie

Plan van Aanpak. Christophe Deloo, Roy Straver & Machiel Visser. Versie 4 (26-06-2010)

Plan van Aanpak. Christophe Deloo, Roy Straver & Machiel Visser. Versie 4 (26-06-2010) Plan van Aanpak Christophe Deloo, Roy Straver & Machiel Visser Versie 4 (26-06-2010) Inhoudsopgave Voorwoord... 2 1 Inleiding... 3 1.1 Aanleiding... 3 1.2 Accordering en bijstelling... 3 1.3 Toelichting

Nadere informatie

Software Test Plan. Yannick Verschueren

Software Test Plan. Yannick Verschueren Software Test Plan Yannick Verschueren November 2014 Document geschiedenis Versie Datum Auteur/co-auteur Beschrijving 1 November 2014 Yannick Verschueren Eerste versie 1 Inhoudstafel 1 Introductie 3 1.1

Nadere informatie

Sparse columns in SQL server 2008

Sparse columns in SQL server 2008 Sparse columns in SQL server 2008 Object persistentie eenvoudig gemaakt Bert Dingemans, e-mail : info@dla-os.nl www : http:// 1 Content SPARSE COLUMNS IN SQL SERVER 2008... 1 OBJECT PERSISTENTIE EENVOUDIG

Nadere informatie

Chris de Kok 223548 TDI 3. Vak: Software Architectuur Datum: 21-01-2008 Docent: Fons van Kesteren

Chris de Kok 223548 TDI 3. Vak: Software Architectuur Datum: 21-01-2008 Docent: Fons van Kesteren Chris de Kok 223548 TDI 3 Vak: Software Architectuur Datum: 21-01-2008 Docent: Fons van Kesteren Inhoud Inleiding... 3 Black box / White box... 3 XP... 3 SimpleTest... 3 Eclipse plugin... 4 GroupTest...

Nadere informatie

Howto Subversion. 1. Subversion structuur en uitleg

Howto Subversion. 1. Subversion structuur en uitleg 1. Subversion structuur en uitleg Op de Adwise VDS server staan de repositories die gebruikt kunnen worden. Een subversion repository bevat alle projecten gerelateerd aan de betreffende repository. Adwise

Nadere informatie

Opdrachtformulering (pagina 3 van 7)

Opdrachtformulering (pagina 3 van 7) Afstudeerovereenkomst van Tim Wils Bijlage 1 Opdrachtformulering (pagina 3 van 7) Dit project betreft een eigen framework (soort API) waarmee relatief gemakkelijk en in korte tijd eindproducten opgezet

Nadere informatie

Technisch Ontwerp W e b s i t e W O S I

Technisch Ontwerp W e b s i t e W O S I Technisch Ontwerp W e b s i t e W O S I WOSI Ruud Jungbacker en Michael de Vries - Technisch ontwerp Website Document historie Versie(s) Versie Datum Status Omschrijving / wijzigingen 0.1 20 nov 2008 Concept

Nadere informatie

Connect Social Business. Plan van Aanpak voor mijn stage bij ConnectSB

Connect Social Business. Plan van Aanpak voor mijn stage bij ConnectSB Connect Social Business Plan van Aanpak voor mijn stage bij ConnectSB Joey Kaan September 28, 2014 Inhoudsopgave 1 Achtergronden 1 2 Probleemstelling & Doelstelling 2 2.1 Leren Professioneel Functioneren..................

Nadere informatie

Kleine cursus PHP5. Auteur: Raymond Moesker

Kleine cursus PHP5. Auteur: Raymond Moesker Kleine cursus PHP5 Auteur: Raymond Moesker Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven

Nadere informatie

Software Design Document

Software Design Document Software Design Document Mathieu Reymond, Arno Moonens December 2014 Inhoudsopgave 1 Versiegeschiedenis 2 2 Definities 3 3 Introductie 4 3.1 Doel en Scope............................. 4 4 Logica 5 4.1

Nadere informatie

TECHNICAL DESIGN DOCUMENT

TECHNICAL DESIGN DOCUMENT TECHNICAL DESIGN DOCUMENT BACHELORPROJECT IN3405 John Ciocoiu 1358227 Elwin Dokter 1275909 TECHNISCHE UNIVERSITEIT DELFT FACULTEIT EWI WOENSDAG 28 APRIL 2010 VERSIE 1 COMMISSIE: Ing. D.J. van Roest (opdrachtgever)

Nadere informatie

Een website maken met databasetoegang.

Een website maken met databasetoegang. Hoofdstuk 5 Een website maken met databasetoegang. In dit hoofdstuk gaan we het weblog dat je in hoofdstuk 4 hebt gemaakt verder uitbreiden. Een belangrijk onderdeel wordt toegevoegd aan de applicatie,

Nadere informatie

Koppeling met een database

Koppeling met een database PHP en MySQL Koppeling met een database 11.1 Inleiding In PHP is het eenvoudig om een koppeling te maken met een database. Een database kan diverse gegevens bewaren die met PHP aangeroepen en/of bewerkt

Nadere informatie

Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op

Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op 1 Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP.... 8 Joomla installeren op XAMPP... 15 Handige links... 16 2 Disclaimer Bij de samenstelling

Nadere informatie

DataFlex 19.0 SQL Server

DataFlex 19.0 SQL Server Connections to SQL Server 1 Agenda Connecties Aanpassingen in applicaties 2 Connecties Kort overzicht 3 SQL manier Connectie maken met een server (login) Connectie stelt je in staat om tabellen in een

Nadere informatie

Cursus Analyse voor Web Applicaties 1. Webdesign / Web Programmeren Analyse voor web applicaties SDM methode + Basis UML

Cursus Analyse voor Web Applicaties 1. Webdesign / Web Programmeren Analyse voor web applicaties SDM methode + Basis UML Cursus Analyse voor Web Applicaties 1 Organisatie Opleiding Module Onderwerp Syntra AB Webdesign / Web Programmeren Analyse voor web applicaties SDM methode + Basis UML Analyse op basis van SDM en UML

Nadere informatie

Les 15 : updaten van gegevens in de database (deel2).

Les 15 : updaten van gegevens in de database (deel2). Les 15 : updaten van gegevens in de database (deel2). In de volgende reeks lessen zal alle vorige leerstof uitgebreid aan het bod komen. Zie ook de vorige lessen en documenten om informatie op te zoeken

Nadere informatie

Werken op afstand via internet

Werken op afstand via internet HOOFDSTUK 12 Werken op afstand via internet In dit hoofdstuk wordt uitgelegd wat er nodig is om op afstand met de ROS artikel database te kunnen werken. Alle benodigde programma s kunnen worden gedownload

Nadere informatie

Software Test Plan. Yannick Verschueren

Software Test Plan. Yannick Verschueren Software Test Plan Yannick Verschueren Maart 2015 Document geschiedenis Versie Datum Auteur/co-auteur Beschrijving 1 November 2014 Yannick Verschueren Eerste versie 2 December 2014 Yannick Verschueren

Nadere informatie

Les 2 Eenvoudige queries

Les 2 Eenvoudige queries Les 2 Eenvoudige queries XAMP Apache server ( http ) mysql server PHP myadmin IAM SQL oefeningen Database phpmyadmin Import : sql_producten.sql, sql_winkel.sql, sql_festival.sql SAMS SQL in 10 minuten

Nadere informatie

Inhoudsopgave. versie 0.8

Inhoudsopgave. versie 0.8 JOOMLA! INSTALLATIE HANDLEIDING versie 0.8 Inhoudsopgave Stappenplan...3 Inrichten database...4 Configuratiecentrum cpanel...4 Aanmaken van een database gebruiker...5 Aanmaken van een database...6 Gebruiker

Nadere informatie

Project plan. Erwin Hannaart Sander Tegelaar 61849 62407

Project plan. Erwin Hannaart Sander Tegelaar 61849 62407 Project plan Erwin Hannaart Sander Tegelaar 61849 62407 I4C2 I4C1 1 Inhoudsopgave Doel en doelgroep van het project... 3 Beschrijving van het project... 4 Benodigde materialen... 5 Te verwachten resultaten,

Nadere informatie

Technical Note. API Beschrijving Aangetekend Mailen

Technical Note. API Beschrijving Aangetekend Mailen AUTHOR APPROVED Technical Note API Beschrijving Referentie: API beschrijving AM Versie: 0.0.7 Datum: 2015-07-24 Aangetekend Bellen B.V. Computerweg 5 Postbus 8307 3503 RH Utrecht T: +31 346 581 731 support@aangetekendmailen.nl

Nadere informatie

HDN DARTS WEB AUTHENTICATIE

HDN DARTS WEB AUTHENTICATIE HDN DARTS WEB AUTHENTICATIE HDN Helpdesk T: 0182 750 585 F: 0182 750 589 M: helpdesk@hdn.nl Copyright Communications Security Net B.V. Inhoudsopgave 1. INLEIDING OP HET ONTWERP... 3 1.1 HET DOEL VAN DIT

Nadere informatie

Testomgevingen beheer

Testomgevingen beheer Testomgevingen beheer Testen brengt het verwachte resultaat en de huidige toestand bij elkaar. Het geeft aanknopingspunten om de planning te maken, het product te verbeteren en om zorgen bij belanghebbenden

Nadere informatie

INSTALLATIE EXCHANGE CONNECTOR

INSTALLATIE EXCHANGE CONNECTOR HANDLEIDING INSTALLATIE EXCHANGE CONNECTOR INSTALLATIE EXCHANGE CONNECTOR 0 0 HANDLEIDING INSTALLATIE EXCHANGE CONNECTOR INSTALLATIE EXCHANGE CONNECTOR HANDLEIDING datum: 10-08-2018 1 Inleiding... 1 2

Nadere informatie

Connect Social Business. Plan van Aanpak voor mijn stage bij ConnectSB

Connect Social Business. Plan van Aanpak voor mijn stage bij ConnectSB Connect Social Business Plan van Aanpak voor mijn stage bij ConnectSB Joey Kaan September 21, 2014 Inhoudsopgave 1 Achtergronden 4 2 Probleemstelling & Doelstelling 5 2.1 Leren Professioneel Functioneren..................

Nadere informatie

Dynamiek met VO-Script

Dynamiek met VO-Script Dynamiek met VO-Script Door Bert Dingemans DLA Ontwerp & Software bert@dla-architect.nl Inleiding Op de SDGN nieuwsgroep voor Visual Objects ontstond laatst een draad van berichten over de nieuwe libraries

Nadere informatie

Websitecursus deel 3 JavaScript

Websitecursus deel 3 JavaScript Websitecursus deel 3 JavaScript A Eskwadraat WebCie www@a-eskwadraat.nl 12 oktober 2015 Introductie Twee weken geleden HTML Vorige week CSS Deze week JavaScript Javascript JavaScript (ook wel JS) is een

Nadere informatie

Technisch Ontwerp Stylin s

Technisch Ontwerp Stylin s Technisch Ontwerp Stylin s Inhoudsopgave Inhoudsopgave... 1 Introductie... 2 Technieken... 2 Ontwerprichtlijnen... 3 Activity Diagram... 3 Sitemap... 4 Wireframes / Content Area s... 5 Visueel... 6 Database...

Nadere informatie

icafe Een digitaal bestelsysteem voor de horeca Joeri Verdeyen Stefaan De Spiegeleer Naim Ben Tanfous

icafe Een digitaal bestelsysteem voor de horeca Joeri Verdeyen Stefaan De Spiegeleer Naim Ben Tanfous icafe Een digitaal bestelsysteem voor de horeca Joeri Verdeyen Stefaan De Spiegeleer Naim Ben Tanfous 2006-2007 Voorwoord 1 Inhoudsopgave 2 Hoofdstuk 1 Inleiding 3 Hoofdstuk 2 icafe 2.1 Het idee 2.2 Mogelijkheden

Nadere informatie

Technische nota AbiFire5 Rapporten maken via ODBC

Technische nota AbiFire5 Rapporten maken via ODBC Technische nota AbiFire5 Rapporten maken via ODBC Laatste revisie: 29 juli 2009 Inhoudsopgave Inleiding... 2 1 Installatie ODBC driver... 2 2 Systeeminstellingen in AbiFire5... 3 2.1 Aanmaken extern profiel...

Nadere informatie

API...1 Identificatie...1 Opties...2 Acties...3 Webserver...6 Heartbeat...6 Buffer groottes...8

API...1 Identificatie...1 Opties...2 Acties...3 Webserver...6 Heartbeat...6 Buffer groottes...8 API API...1 Identificatie...1 Opties...2 Acties...3 Webserver...6 Heartbeat...6 Buffer groottes...8 Identificatie Alle programma's communiceren met elkaar door gebruik te maken van JSON objecten. Het normale

Nadere informatie

Technisch ontwerp. Projectteam 6. Project "Web Essentials" 11 maart 2009. Versie 1.1.0

Technisch ontwerp. Projectteam 6. Project Web Essentials 11 maart 2009. Versie 1.1.0 Projectteam 6 Faculteit Natuur en Techniek Hogeschool Utrecht Projectleider: Hans Allis, hans.allis@student.hu.nl Technisch ontwerp Project "Web Essentials" 11 maart 2009 Versie 1.1.0 Teamleden: Armin

Nadere informatie

Databases - Inleiding

Databases - Inleiding Databases Databases - Inleiding Een database is een verzameling van een aantal gegevens over een bepaald onderwerp: een ledenbestand van een vereniging, een forum, login gegevens. In een database worden

Nadere informatie

ASRemote WebService. Via deze webservice kunt u:

ASRemote WebService. Via deze webservice kunt u: ASRemote WebService De ASRemote WebService is een SOAP Webservice die softwarematige communicatie met Exact Globe mogelijk maakt vanaf een willekeurige locatie op het internet. Via deze webservice kunt

Nadere informatie

Auteur Arjaan den Ouden Datum 4 december 2013 Status Definitief Versie 1.0

Auteur Arjaan den Ouden Datum 4 december 2013 Status Definitief Versie 1.0 Auteur Arjaan den Ouden Datum 4 december 2013 Status Definitief Versie 1.0 Behoudens uitzondering door de wet gesteld, mag zonder schriftelijke toestemming van de rechthebbende op het auteursrecht van

Nadere informatie

Xampp Web Development omgeving opzetten onder Windows.

Xampp Web Development omgeving opzetten onder Windows. Xampp Web Development omgeving opzetten onder Windows. Inhoudsopgave 1. Lees dit eerst... 2 2. Inleiding... 2 3. Installatie Xampp... 3 1.1 Installatie Xampp Launcher... 7 1.2 Controle geïnstalleerde bestanden...

Nadere informatie

VERENIGINGSWIJZER.NL PROJECTPLAN

VERENIGINGSWIJZER.NL PROJECTPLAN Vrije Universiteit Amsterdam Faculteit der Exacte Wetenschappen Project Multimedia Peter van Ulden Studentnr. 1494759 VERENIGINGSWIJZER.NL PROJECTPLAN INHOUDSOPGAVE 1 Inleiding...3 2 Project omschrijving...4

Nadere informatie

Datum: Gemaakt door: Berend de Groot Voor: ComSi, ROC Friese Poort

Datum: Gemaakt door: Berend de Groot Voor: ComSi, ROC Friese Poort Datum: Gemaakt door: Berend de Groot Voor: ComSi, ROC Friese Poort Contents 1. Introductie... 3 1.1. Hoe werkt het?... 3 2. Eerste Contact als gebruiker... 4 3. Ticket Acties... 5 4. Tickets Pagina...

Nadere informatie

Software Test Plan. PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015

Software Test Plan. PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015 Software Test Plan PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015 Jens Nevens - Sander Lenaerts - Nassim Versbraegen Jo De Neve - Jasper Bevernage Versie 1 Versie

Nadere informatie

Delft-FEWS & Web Services

Delft-FEWS & Web Services Delft-FEWS & Web Services Presentatie Delft-FEWS Gebruikers dag 2018 Marc van Dijk, Rudie Ekkelenkamp, Stef Hummel 5 Juni 2018 Delft-FEWS & (Web) Services 1. Delft-FEWS 2. Roadmap 3. Standaarden Verzamelen

Nadere informatie

INFITT01 - Internettechnologie WEEK 8

INFITT01 - Internettechnologie WEEK 8 INFITT01 - Internettechnologie WEEK 8 Programma Databases (JDBC, JNDI, ORM, JPA) MVC & Spring/Struts EJB Databases Veel web applicaties moeten informatie over langere tijd op kunnen slaan. Een voor de

Nadere informatie

Over PHP. PHP en MySQL. 1.1 Inleiding. In dit hoofdstuk maak je kennis met PHP. Hoe werkt deze

Over PHP. PHP en MySQL. 1.1 Inleiding. In dit hoofdstuk maak je kennis met PHP. Hoe werkt deze Over PHP 1.1 Inleiding In dit hoofdstuk maak je kennis met PHP. Hoe werkt deze programmeertaal? En hoe is het ontstaan? Ook leer je welke editors je kunt gebruiken om PHP-scripts te maken en hoe je eenvoudig

Nadere informatie

Inhoudsopgave... 1 Disclaimer... 3 Voorwoord... 3 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op

Inhoudsopgave... 1 Disclaimer... 3 Voorwoord... 3 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op 1 Inhoudsopgave... 1 Disclaimer... 3 Voorwoord... 3 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op XAMPP... 14 Handige links... 15 2 Disclaimer Bij de

Nadere informatie

Externe pagina s integreren in InSite en OutSite

Externe pagina s integreren in InSite en OutSite Externe pagina s integreren in InSite en OutSite Document-versie: 1.1 Datum: 04-10-2013 2013 AFAS Software Leusden Niets uit deze uitgave mag verveelvoudigd worden en/of openbaar gemaakt worden door middel

Nadere informatie

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise Inhoudsopgave 1. Voorbereiding... 4 2. Web Service Connector tool configuratie... 5 3. TaskCentre taak voor het aanmaken van

Nadere informatie

NHibernate als ORM oplossing

NHibernate als ORM oplossing NHibernate als ORM oplossing Weg met de SQL Queries Wat is ORM? ORM staat in dit geval voor Object Relational Mapping, niet te verwarren met Object Role Modeling. ORM vertaalt een objectmodel naar een

Nadere informatie

PHP en een MySQL database.

PHP en een MySQL database. mysql_php.doc 1/5 PHP en een MySQL database. Om informatie uit een MySQL database op te halen moet je de volgende stappen uitvoeren: 1. een verbinding maken met mysql; 2. een mysql database selecteren;

Nadere informatie

5/5 Red Carpet. 5/5.1 Inleiding

5/5 Red Carpet. 5/5.1 Inleiding Management Services 5/5 Red Carpet 5/5.1 Inleiding Met de overname van Ximian is Novell ook eigenaar geworden van de Red Carpet-technologie. Hoewel het aannemelijk is dat het hier een tijdelijke oplossing

Nadere informatie

Automatische Installatie op IIS server

Automatische Installatie op IIS server Automatische Installatie op IIS server In de map Web staat het installatiebestand : Je kan de install starten door het aanklikken van het msi bestand vanuit Verkenner. Na installatie is steeds een manuele

Nadere informatie

De voordelen van Drupal

De voordelen van Drupal Drupal is een open source Content Management System (CMS). Daarnaast kun je Drupal zien als een framework, dit betekent dat je modules (oftewel mini-applicaties) kunt implementeren in je installatie van

Nadere informatie

Connect Social Business. Plan van Aanpak voor mijn stage bij ConnectSB

Connect Social Business. Plan van Aanpak voor mijn stage bij ConnectSB Connect Social Business Plan van Aanpak voor mijn stage bij ConnectSB Joey Kaan September 29, 2014 Inhoudsopgave 1 Achtergronden 1 2 Probleemstelling & Doelstelling 2 2.1 Leren Professioneel Functioneren..................

Nadere informatie

emaxx Systeem eisen ManagementPortaal voor de ZakenMagazijn database

emaxx Systeem eisen ManagementPortaal voor de ZakenMagazijn database emaxx Systeem eisen ManagementPortaal voor de ZakenMagazijn database Datum: 25-09-2007 Auteur: ing. E.L. Floothuis Versie: 0.1 Status: Concept Kopersteden 22-4 Postbus 157 7500 AD Enschede Tel: 053 48

Nadere informatie

Temperatuur logger synchronisatie

Temperatuur logger synchronisatie Temperatuur logger synchronisatie Juni 10, 2010 1 / 7 Temperatuur logger synchronisatie Introductie Twee of meerdere ontvangers van het Multilogger systeem kunnen met de temperature logger synchronisatie

Nadere informatie

Mijn eerste ADO.NET applicatie

Mijn eerste ADO.NET applicatie Hoofdstuk 2 Mijn eerste ADO.NET applicatie ADO staat voor ActiveX Database Objects. Dit is een verzameling klassen die onderdeel uitmaken van het.net framework, waarmee je verbinding kunt maken met een

Nadere informatie

Voordat er optimaal gebruik gemaakt kan worden gemaakt van Magister 5 via het web, kan deze FAQ mogelijk van pas komen.

Voordat er optimaal gebruik gemaakt kan worden gemaakt van Magister 5 via het web, kan deze FAQ mogelijk van pas komen. Silverlight FAQ t.b.v. Magister 5 Voordat er optimaal gebruik gemaakt kan worden gemaakt van Magister 5 via het web, kan deze FAQ mogelijk van pas komen. Zie de algemene Microsoft Silverlight FAQ op: http://www.microsoft.com/silverlight/faq/

Nadere informatie

Uitgebreid voorstel Masterproef Informatica. Titel van het project : Ontwikkeling van remote controlled Alert & Task Agent

Uitgebreid voorstel Masterproef Informatica. Titel van het project : Ontwikkeling van remote controlled Alert & Task Agent HoGent Uitgebreid voorstel Masterproef Informatica Titel van het project : Ontwikkeling van remote controlled Alert & Task Agent Datum: Naam student: Glenn Jacob Interne promotor: Wim Van den Breen In

Nadere informatie

Object Oriented Programming

Object Oriented Programming Object Oriented Programming voor webapplicaties Door Edwin Vlieg Waarom OOP? Basis uitleg over OOP Design Patterns ActiveRecord Model View Controller Extra informatie Vragen OOP Object Oriented Programming

Nadere informatie

Handleiding Magento - Yuki

Handleiding Magento - Yuki Handleiding Magento - Yuki www.webwinkelfacturen.nl Samenvatting Dit is de handleiding voor de koppeling van Magento naar Yuki. De koppeling zorgt dat voor facturen in Magento automatisch een factuur of

Nadere informatie

Perceptive Process. Release Notes. Version: 3.5.x

Perceptive Process. Release Notes. Version: 3.5.x Perceptive Process Release Notes Version: 3.5.x Written by: Product Knowledge, R&D Date: December 2015 2015 Lexmark International Technology, S.A. All rights reserved. Lexmark is a trademark of Lexmark

Nadere informatie

Met een LightSwitch applicatie een OData service uit de Windows Azure Marketplace consumeren

Met een LightSwitch applicatie een OData service uit de Windows Azure Marketplace consumeren Met een LightSwitch applicatie een OData service uit de Windows Azure Marketplace consumeren Om eens wat ervaring op te doen met de Windows Azure Marketplace heb ik een publieke en gratis databron gekozen

Nadere informatie

XAMPP Web Development omgeving opzetten onder Windows.

XAMPP Web Development omgeving opzetten onder Windows. XAMPP Web Development omgeving opzetten onder Windows. Inhoudsopgave 1. Lees dit eerst... 2 2. Inleiding... 2 1 Xampp downloaden... 2 2 Installatie Xampp 1.7.4 op externe harddisk... 3 3 XAMPP herconfiguren...

Nadere informatie

Technologie en Interactie 3.2: software architectuur

Technologie en Interactie 3.2: software architectuur Technologie en Interactie 3.2: software architectuur Manual IAM-TDI-V2-Technologie en Interactie. Jaar 0809 blok 2 Oktober 2008 Fons van Kesteren 1/8 Inhoud Technologie en Interactie 3.2: software architectuur...

Nadere informatie

PHP-OPDRACHT SITE BOUWEN

PHP-OPDRACHT SITE BOUWEN PHP-OPDRACHT SITE BOUWEN PERIODE 4 LEERJAAR 1 Opleiding: Duur: Applicatieontwikkelaar 1 onderwijsperiode (4-8 weken) Voorkennis: Basiscursus PHP 5.4 Victor Peters (978 90 125 8499 9) Basiscursus XHTML,

Nadere informatie

Technical Specification SOFORT Banking

Technical Specification SOFORT Banking Technical Specification SOFORT Banking (DEB.001) Author(s): Michel Westerink (MW) Version history: V1.0 MW (kopie van targetpay.com) 08/08/13 Table of contents 1. Algemeen... 3 1.1 Opmerking vooraf...

Nadere informatie

Javascript oefenblad 1

Javascript oefenblad 1 Leer de basis van Javascript. Javascript oefenblad 1 Niels van Velzen Javascript oefenblad 1 Pagina 2 Inleiding Javascript is niet altijd even makkelijk. Vooral aan het begin is het even wennen hoe de

Nadere informatie

6. Het maken van een database

6. Het maken van een database 6. Het maken van een database 6.1. Inleiding In hoofdstuk 5 heb je de oefendatabase gemaakt doormiddel van een script. In dit hoofdstuk ga je zelf een database maken en deze vullen met tabellen. Hiervoor

Nadere informatie

DrICTVoip.dll v 2.1 Informatie en handleiding

DrICTVoip.dll v 2.1 Informatie en handleiding DrICTVoip.dll v 2.1 Informatie en handleiding Nieuw in deze versie : Koppeling voor web gebaseerde toepassingen (DrICTVoIPwebClient.exe) (zie hoofdstuk 8) 1. Inleiding Met de DrICTVoIP.DLL maakt u uw software

Nadere informatie

Bottleball Onderzoeksverslag MovingMonsters. Uitgevoerd door Arno Classens a.classens@student.fontys.nl

Bottleball Onderzoeksverslag MovingMonsters. Uitgevoerd door Arno Classens a.classens@student.fontys.nl Bottleball Onderzoeksverslag MovingMonsters Uitgevoerd door Arno Classens a.classens@student.fontys.nl 1 1. Inhoudsopgave Wat? Bladzijde 1. Introductie 3 2. Methodologie 4 3. Resultaten 3.1 Oriëntatie

Nadere informatie

Handleiding Magento - Factuursturen

Handleiding Magento - Factuursturen Handleiding Magento - Factuursturen www.webwinkelfacturen.nl Samenvatting Dit is de handleiding voor de koppeling van Magento naar Factuursturen. De koppeling zorgt dat voor facturen in Magento automatisch

Nadere informatie

Programmeerstructuren met App Inventor

Programmeerstructuren met App Inventor Programmeerstructuren met App Inventor Kevin Krul, Universiteit Utrecht Roncalli, Bergen op Zoom Inhoud: Les 1: Introductie tot App Inventor, when statement en variabelen. Les 2: Introductie if-statement

Nadere informatie

Plan van aanpak Toogle

Plan van aanpak Toogle Plan van aanpak Toogle Gemaakt door, Kevin Donkers Paul v.d. Linden Paul Eijsermans en Geert Tapperwijn 1 Inhoudsopgave 1 Inhoudsopgave...2 2 Inleiding...3 3 Projectopdracht...4 4 Projectactiviteiten...5

Nadere informatie

In dit hoofdstuk maak je kennis met PHP. Hoe werkt deze. programmeertaal? En hoe is het ontstaan? Ook leer je welke editors

In dit hoofdstuk maak je kennis met PHP. Hoe werkt deze. programmeertaal? En hoe is het ontstaan? Ook leer je welke editors 1. Over PHP 1.1 Inleiding In dit hoofdstuk maak je kennis met PHP. Hoe werkt deze programmeertaal? En hoe is het ontstaan? Ook leer je welke editors je kunt gebruiken om PHP-scripts te maken en hoe je

Nadere informatie

KeyLink B.V. KeyLink CTI Client Installation Manual - Dutch

KeyLink B.V. KeyLink CTI Client Installation Manual - Dutch KeyLink B.V. KeyLink CTI Client Installation Manual - Dutch Product(en): Versie: KeyLink CTI software V4.13.1 Document Versie: 1.16 Datum: 8 januari 2013 Auteur: Technical Support Overzicht Dit document

Nadere informatie

Waarom WordPress? Wat is WordPress? Bloggen en website Uniek design is mogelijk Makkelijk zelf te beheren

Waarom WordPress? Wat is WordPress? Bloggen en website Uniek design is mogelijk Makkelijk zelf te beheren Waarom WordPress? Wordpress is een bijzonder gebruiksvriendelijk systeem, zowel voor de gebruiker als de webbouwer. Iedereen kan er redelijk snel mee leren werken. Het zelf beheren van pagina s, nieuws,

Nadere informatie

Software Design Document

Software Design Document Software Design Document PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015 Jens Nevens - Sander Lenaerts - Nassim Versbraegen Jo De Neve - Jasper Bevernage Versie

Nadere informatie

9. MYSQL. Daarin zien we het administratie paneel van mysql.

9. MYSQL. Daarin zien we het administratie paneel van mysql. 9. MYSQL We kunnen ook in dit systeem gebruik maken van de gekende ACCESS databanken. Zolang het maar relationale databanjken zijn kunnen we er gebruik van maken. In PHP echter maakt men meestal gebruik

Nadere informatie

Software Test Document

Software Test Document Software Test Document PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015 Jens Nevens - Sander Lenaerts - Nassim Versbraegen Jo De Neve - Jasper Bevernage Versie

Nadere informatie

Connect Social Business

Connect Social Business Connect Social Business Joey Kaan September 2014 Inhoudsopgave 1 Achtergronden 4 2 Probleemstelling & Doelstelling 5 2.1 Leren Professioneel Functioneren.................. 5 2.2 Facebook API leren door

Nadere informatie

Releasen met een druk op de knop: Met behulp van Continuous Delivery sneller uw doel bereiken

Releasen met een druk op de knop: Met behulp van Continuous Delivery sneller uw doel bereiken Releasen met een druk op de knop: Met behulp van Continuous Delivery sneller uw doel bereiken De business organisatie heeft altijd stijgende verwachtingen van uw IT organisatie. Meer dan ooit is het van

Nadere informatie

Zicht - Content Management Systeem een algemene beschrijving

Zicht - Content Management Systeem een algemene beschrijving Zicht - Content Management Systeem een algemene beschrijving Versie april/2008 Zicht nieuwe media ontwerpers 2008 1 Inleiding Een Content Management Systeem (CMS) is een webapplicatie waarmee je zonder

Nadere informatie

Releasebeschrijving e-former versie 7.0

Releasebeschrijving e-former versie 7.0 Releasebeschrijving e-former versie 7.0 INHOUDSOPGAVE Inleiding... 2 Tussentijds opslaan... 3 Digitale handtekening... 4 Beveiliging... 6 Toegangscontrole bij lokaal gebruik... 6 Verwijderen uploads...

Nadere informatie

Les 9: formulier controle met javascript.

Les 9: formulier controle met javascript. Les 9: formulier controle met javascript. Javascript is erg veel gebruikt bij internet toepassingen. In tegenstelling tot PHP, wat een server side scripting is, is java client side scripting. Dwz, niet

Nadere informatie

ProjectHeatmap. Onderzoeksrapport v0.5 11-03-11 Dennis Wagenaar

ProjectHeatmap. Onderzoeksrapport v0.5 11-03-11 Dennis Wagenaar ProjectHeatmap Onderzoeksrapport v0.5 11-03-11 Dennis Wagenaar 1 Inhoudsopgave Inleiding...3 Gheat...4 Info...4 Voordelen...4 Nadelen...4 Google Fusion Tables...5 Info...5 Voordelen...5 Nadelen...5 OLHeatmap...6

Nadere informatie

1. * Database worden vaak gebruikt in Client-Server architectuur.

1. * Database worden vaak gebruikt in Client-Server architectuur. Naam Studentnummer Klas Herkansing [ ] ja, nee [ ], zoja uit welk jaar? kernbegrippen relationele database Minimaal drie van de vijf vragen goed beantwoorden. 1. * Database worden vaak gebruikt in Client-Server

Nadere informatie

SQL is opgebouwd rond een basisinstructie waaraan één of meerdere componenten worden toegevoegd.

SQL is opgebouwd rond een basisinstructie waaraan één of meerdere componenten worden toegevoegd. BASISINSTRUCTIES SQL SQL : Structured Query Language is een taal gericht op het ondervragen van een relationele database en die aan veel klassieke databasemanagementsystemen kan worden gekoppeld. SQL is

Nadere informatie

Planbord installatie instructies

Planbord installatie instructies Planbord installatie instructies Uit Comprise Wiki Inhoud 1 Basis installatie 1.1 Installeren 1.1.1 Microsoft Data Access Components 1.2 De eerste keer starten 2 Veelgestelde vragen 2.1 "Network resource

Nadere informatie

Versie 0.2. Documentatie Onsweb Club plugin voor NHV verenigingen. Laatste wijziging: 10 mei 2013 Auteurs: Marien Dongstra, Sebastian Huisman

Versie 0.2. Documentatie Onsweb Club plugin voor NHV verenigingen. Laatste wijziging: 10 mei 2013 Auteurs: Marien Dongstra, Sebastian Huisman Documentatie Onsweb Club plugin voor NHV verenigingen Versie 0.2 Laatste wijziging: 10 mei 2013 Auteurs: Marien Dongstra, Sebastian Huisman Alle rechten in dit document zijn voorbehouden. www.onsweb.nl,

Nadere informatie

Test Joomla op je PC 1

Test Joomla op je PC 1 1 Disclaimer Bij de samenstelling van dit ebook is de grootst mogelijke zorg besteed aan de juistheid en correctheid van de informatie die in dit ebook wordt verstrekt. De auteur van dit ebook kan op geen

Nadere informatie

Handleiding installatie Enecsys uitlezen op een Synology NAS

Handleiding installatie Enecsys uitlezen op een Synology NAS Handleiding installatie Enecsys uitlezen op een Synology NAS Disclaimer: Dit document is geschreven als handleiding voor de installatie van een Enecsys logger op een Synology NAS. Alhoewel geprobeerd is

Nadere informatie

Installatie en configuratie documentatie

Installatie en configuratie documentatie Installatie en configuratie documentatie Assistance Web Portal v. 2.58, 2.60 Voor Windows 2003 / 2008 / XP / Vista / Windows 7 Assistance PSO handleiding, uitgegeven door Assistance Software. Alle rechten

Nadere informatie

Verder zijn er de nodige websites waarbij voorbeelden van objectgeoriënteerd PHP (of Objec Oriented PHP, OO PHP) te vinden zijn.

Verder zijn er de nodige websites waarbij voorbeelden van objectgeoriënteerd PHP (of Objec Oriented PHP, OO PHP) te vinden zijn. Objectgeoriënteerd PHP (versie 5) Kennisvereisten: Ervaring met programmeren in PHP met MySQL Je weet wat een class of klasse is Je weet wat een instantie van een klasse (een object) is Je weet wat een

Nadere informatie

LES 1: AAN DE SLAG MET WORDPRESS. Lesoverzicht: Aan de slag Wat is WordPress CMS Front-end Back-end Samenvatting. Tijd: 5 minuten

LES 1: AAN DE SLAG MET WORDPRESS. Lesoverzicht: Aan de slag Wat is WordPress CMS Front-end Back-end Samenvatting. Tijd: 5 minuten LES 1: AAN DE SLAG MET WORDPRESS Lesoverzicht: Aan de slag Wat is WordPress CMS Front-end Back-end Samenvatting Tijd: 5 minuten Doel: Aan het einde van deze les weet je wat WordPress is en kun je benoemen

Nadere informatie