Systeemontwerp
Bij het maken van goede systemen komt veel kijken:
- Gebruikersgemak en klanttevredenheid
- Doen waarvoor het is ontworpen
- Onderhoudbaarheid
- Stabiliteit en betrouwbaarheid
- Samenwerken en taakverdeling
- Platformkeuzes
- Programmeren
- Valideren en testen
- Hergebruik
Programmeren
Programmeren is heel belangrijk bij het maken van software.
Goede software maken en programmeren vereist vakmanschap. Om een van te voren vaststelde uitkomst te bereiken is vakmanschap nodig.
Vergelijk programmeren eens met componeren. Iedere muzikant kan wat pingelen en toevallig op leuke melodietjes stuiten en dat moet je vooral ook doen. Maar van tevoren bedenken wat voor muziek je gaat maken en dat doelbewust in elkaar zetten vereist vakmanschap.
Goede software maken vereist een investering, of je nou MAX/MSP gebruikt, C++, Java(script), Scheme, Python of PHP, om iets goeds te maken moet je weten wat je doet. Anders maak je misschien wel iets dat werkt maar zonder aan te kunnen tonen dat het robuust is of zonder dat het echt is wat de bedoeling was.
En je moet weten wat je wilt. Anders kun je wel mooie dingen maken maar je kunt niet toevallig een sequencer maken, de besturing van een verkeersvliegtuig of een netwerk-installatie.
Het geeft voldoening als je iets moois maakt. Het geeft nog meer voldoening als je moeite moet doen om iets moois te maken dat niet zomaar iedereen in elkaar kan frutselen.
Modulair werken
Een systeem opbouwen uit onderdelen
In plaats van een systeem te zien als één monolithisch geheel kun je het ook opdelen in een aantal onderdelen die elk hun eigen rol binnen het systeem vervullen. Die onderdelen moeten op een of andere manier met elkaar kunnen communiceren, bijvoorbeeld door functies aan te roepen of berichten te sturen.Voordelen van modulair werken
- Zoeken van fouten in een geisoleerde module is veel eenvoudiger dan wanneer alles met elkaar samenhangt
- Ontwerpfouten komen eerder aan het licht en zijn makkelijker te herstellen
- Hergebruik van eerder gemaakte (of door anderen gemaakte) modules
- De werking van het systeem is eenvoudiger te begrijpen en aan anderen uit te leggen
- Verschillende onderdelen kunnen door verschillende (teams van) mensen gemaakt worden
- Verschillende onderdelen kunnen door verschillende (teams van) mensen getest worden
- Verschillende onderdelen kunnen onafhankelijk in de tijd gerealiseerd en later samengevoegd worden
Black boxes
Bij het modulair werken hoef je misschien niet alle modules vanuit niets te maken of kun je gebruik maken van functies die door anderen gemaakt zijn. Dat kan bijvoorbeeld in de vorm van een library of kant-en-klare programma's of scripts.
Wanneer je onderdelen hergebruikt of 'ingekochte' spullen gebruikt hoef je de interne werking daarvan vaak niet helemaal (opnieuw) te doorgronden maar kun je volstaan met begrijpen hoe je het moet gebruiken of aansluiten. Dat behandel je ze dus als black box: je mag er wel in kijken (of soms ook niet) maar het hoeft niet. Dit impliceert dat je als ontwikkelaar van een module goed moet documenteren hoe deze gebruikt dient te worden.
Unit-test
Elke module kan in veel gevallen onafhankelijk van de andere en van de rest van het systeem getest worden. Hiervoor maak je meestal een test-omgeving en eventueel een test-procedure. Dat kan zowel met software als met hardware. Het testen van een module (a.k.a. unit) in isolement noemen we een unit-test.
Systeemintegratie
Bij het opbouwen van een syteem uit losse onderdelen komt er een moment dat je onderdelen gaat samenvoegen. Dat geldt voor software, hardware en alle andere materialen die je gebruikt. De onderdelen die je los van elkaar ontwikkeld hebt ga je 'integreren', ofwel: samenvoegen tot een groter geheel.
Integratietest
Bij het samenvoegen van modules hoort ook weer dat je nagaat of ze goed samenwerken. Ook hiervoor kun je een testomgeving en procedure maken. Deze test noemen we integratietest.