Hoewel kwaliteit niet gedefinieerd en meetbaar is, zijn er aspecten die invloed hebben op de kwaliteit van software. Op hoofdlijnen kun je de aspecten die de kwaliteit van software beïnvloeden in 2 categorieën indelen: productkwaliteit en geschiktheid voor gebruik.
Dit 2e artikel richt zich op productkwaliteit. Het speelveld van een Software Architect. Vanuit de ISO 25010 is productkwaliteit ingedeeld 8 categorieën en 31 kwaliteitseigenschappen. Deze zijn onder aan het artikel benoemd.
Het eerst/enige aspect waarop kwaliteit van software meestal beoordeeld wordt
Als je naar software kijkt vanuit het oogpunt van kwaliteit is het eerste waar je aan denkt, doet het wat het moet doen? De functionaliteit! En eerlijk gezegd blijft het daar meestal bij. Functionele aspecten kan iedereen op kwaliteit beoordelen. Als je alleen naar de functionaliteit kijkt, is dan de software ook goed?
Het doet wat het moet doen en nu?
De software doet wat het moet doen. Maar wat maakte het ene stuk software nu beter als andere? Als je dit aan verschillende mensen/gebruikers van software vraagt, krijg je een aantal antwoorden wat ze ook belangrijk vinden en meenemen in de kwalitatieve beoordeling. Het is snel, het ziet er goed uit, het is makkelijk te gebruiken, het is toegankelijk voor mensen met een handicap. Een aantal non-functionele eisen die direct gerelateerd zijn aan de functionaliteit. En dan natuurlijk de opmerking dat het veilig moet zijn. Een non-functional die ze zelf bijna nooit kunnen kwalificeren.
Wat vaak vergeten wordt!
De vorige genoemde aspecten waren voor de hand liggend. Maar maakt dat software nu echt goed? Voor de meeste mensen ja. Voor mij als software architect is dat pas het begin, het minimum. Maar is de software ook onderhoudbaar. Kan ik delen uitwisselen voor iets anders. Kan ik het hergebruiken. Is de software goed test baar. Is de software ten alle tijden beschikbaar. Worden fouten afgevangen. Kan ik de software makkelijk en goed koppelen met andere systemen. Kan ik de software makkelijk aanpassen en uitbreiden, en kan ik dat ook voorspelbaar doen.
Het speelveld
Als je alle kwaliteit aspecten bekijkt kun je ze in 2 groepen onderverdelen. Namelijk functionals en non-functionals. En met name de non-functionals is het speelveld van de software architect.
ISO 25010: Productkwaliteit
Functionele geschiktheid (Functional suitability)
De mate waarin een softwareproduct of computersysteem functies levert die voldoen aan de uitgesproken en veronderstelde behoeften, bij gebruik onder gespecificeerde condities.
Functionele compleetheid (Functional completeness): De mate waarin de set van functionaliteiten alle gespecificeerde taken en gebruikersdoelen ondersteunen.
Functionele correctheid (Functional correctness): De mate waarin een softwareproduct of computersysteem de juiste resultaten met de benodigde nauwkeurigheid beschikbaar stelt.
Functionele toepasselijkheid (Functional appropriateness): De mate waarin de functies bijdragen aan het behalen van specifieke taken en doelen.
Prestatie-efficiëntie (Performance efficiency)
De prestaties in verhouding tot de hoeveelheid middelen gebruikt onder genoemde condities.
Snelheid (Time-behaviour): De mate waarin antwoord- en verwerkingstijden en doorvoersnelheid van een product of systeem, tijdens de uitvoer van zijn functies, voldoet aan de wensen.
Middelenbeslag (Resource utilization): De mate waarin de hoeveelheid en type middelen die gebruikt worden door een product of systeem, tijdens de uitvoer van zijn functies, voldoet aan de wensen.
Capaciteit (Capacity): De mate waarin de maximale limieten van een product- of systeemparameter voldoet aan de wensen.
Uitwisselbaarheid (Compatibility)
De mate waarin een product, systeem of component informatie uit kan wisselen met andere producten, systemen of componenten, en/of het de gewenste functies kan uitvoeren terwijl het dezelfde hard- of software-omgeving deelt.
Beïnvloedbaarheid (Co-existence):De mate waarin een product zijn gewenste functies efficiënt kan uitvoeren terwijl het een gemeenschappelijke omgeving en middelen deelt met andere producten, zonder nadelige invloed op enig ander product.
Koppelbaarheid (Interoperability): De mate waarin twee of meer systemen, producten of componenten informatie kunnen uitwisselen en de uitgewisselde informatie kunnen gebruiken.
Bruikbaarheid (Usability)
De mate waarin een product of systeem gebruikt kan worden door gespecificeerde gebruikers om effectief, efficiënt en naar tevredenheid gespecificeerde doelen te bereiken in een gespecificeerde gebruikscontext.
Herkenbaarheid van geschiktheid (Appropriateness recognisability): De mate waarin gebruikers kunnen herkennen of een product of systeem geschikt is voor hun behoeften.
Leerbaarheid (Learnability): De mate waarin een product of systeem gebruikt kan worden door gespecificeerde gebruikers om gespecificeerde leerdoelen te bereiken met betrekking tot het gebruik van het product of systeem met effectiviteit, efficiëntie, vrijheid van risico en voldoening, in een gespecificeerde gebruikscontext.
Bedienbaarheid (Operability): De mate waarin een product of systeem attributen heeft die het makkelijk maken om het te bedienen en beheersen.
Voorkomen gebruikersfouten (User error protection): De mate waarin het systeem gebruikers beschermt tegen het maken van fouten.
Volmaaktheid gebruikersinteractie (User interface aesthetics): De mate waarin een gebruikersinterface het de gebruiker mogelijk maakt om een plezierige en voldoening gevende interactie te hebben.
Toegankelijkheid (Accessibility): De mate waarin een product of systeem gebruikt kan worden door mensen met de meest uiteenlopende eigenschappen en mogelijkheden om een gespecificeerd doel te bereiken in een gespecificeerde gebruikscontext.
Betrouwbaarheid (Reliability)
De mate waarin een systeem, product of component gespecificeerde functies uitvoert onder gespecificeerde condities gedurende een gespecificeerde hoeveelheid tijd.
Volwassenheid (Maturity): De mate waarin een systeem, product of component aan betrouwbaarheidsbehoeften voldoet onder normale werkomstandigheden.
Beschikbaarheid (Availability): De mate waarin een systeem, product of component operationeel en toegankelijk is wanneer men het wil gebruiken.
Foutbestendigheid (Fault tolerance): De mate waarin een systeem, product of component werkt zoals bedoeld ondanks de aanwezigheid van hard- of softwarefouten.
Herstelbaarheid (Recoverability): De mate waarin het product of systeem, in geval van een onderbreking of bij een fout, de direct betrokken gegevens kan herstellen en het systeem in de gewenste staat kan terug brengen.
Beveiligbaarheid (Security)
De mate waarin een product of systeem informatie en gegevens beschermt zodat personen, andere producten of systemen de juiste mate van gegevenstoegang hebben passend bij hun soort en niveau van autorisatie.
Vertrouwelijkheid (Confidentiality): De mate waarin een product of systeem ervoor zorgt dat gegevens alleen toegankelijk zijn voor diegenen die geautoriseerd zijn.
Integriteit (Integrity): De mate waarin een systeem, product of component ongeautoriseerde toegang tot of aanpassing van computerprogramma’s of gegevens verhindert.
Onweerlegbaarheid (Non-repudiation): De mate waarin kan worden bewezen dat acties of gebeurtenissen plaats hebben gevonden, zodat later deze acties of gebeurtenissen niet ontkend kunnen worden.
Verantwoording (Accountability): De mate waarin acties van een entiteit getraceerd kunnen worden naar die specifieke entiteit.
Authenticiteit (Authenticity): De mate waarin bewezen kan worden dat de identiteit van een onderwerp of bron is zoals wordt beweerd. De mate waarin een bewering over de oorsprong of de auteur van de informatie verifieerbaar is, bijvoorbeeld aan handschrift.
Onderhoudbaarheid (Maintainability)
De mate waarin een product of systeem effectief en efficiënt gewijzigd kan worden door de aangewezen beheerders.
Modulariteit (Modularity): De mate waarin een systeem of computerprogramma opgebouwd is in losstaande componenten zodat wijzigingen van een component minimale impact heeft op andere componenten.
Herbruikbaarheid (Reusability): De mate waarin een bestaand onderdeel gebruikt kan worden in meer dan één systeem of bij het bouwen van een nieuw onderdeel.
Analyseerbaarheid (Analysability): De mate waarin het mogelijk is om effectief en efficiënt de impact, van een geplande verandering van één of meer onderdelen, op een product of systeem te beoordelen, om afwijkingen en/of foutoorzaken van een product vast te stellen of om onderdelen te identificeren die gewijzigd moeten worden.
Wijzigbaarheid (Modifiability): De mate waarin een product of systeem effectief en efficiënt gewijzigd kan worden zonder fouten of kwaliteitsvermindering tot gevolg.
Testbaarheid (Testability): De mate waarin effectief en efficiënt testcriteria vastgesteld kunnen worden voor een systeem, product of component en waarin tests uitgevoerd kunnen worden om vast te stellen of aan die criteria is voldaan.
Overdraagbaarheid (Portability)
De mate waarin een systeem, product of component effectief en efficiënt overgezet kan worden van één hardware, software of andere operationele of gebruiksomgeving naar een andere.
Aanpasbaarheid (Adaptability): De mate waarin een product of systeem effectief en efficiënt aangepast kan worden voor andere of zich ontwikkelende hardware, software of andere operationele of gebruiksomgevingen.
Installeerbaarheid (Installability): De mate waarin het product of het systeem effectief en efficiënt geïnstalleerd of verwijderd kan worden in een gespecificeerde omgeving.
Vervangbaarheid (Replaceability): De mate waarin een product een ander specifiek softwareproduct, met hetzelfde doel in dezelfde omgeving, kan vervangen.
Bron:ISO/IEC 25010:2011(en), Systems and software engineering — Systems and software Quality Requirements and Evaluation (SQuaRE) — System and software quality models
#softwaredevelopment #softwarearchitect #lowcode #outsystems