> [!warning] Deze informatie is mogelijk niet actueel
> Dit zijn oude aantekeningen die wellicht nog wel interessant kan zijn maar ik heb hier dus al heel lang niet meer naar gekeken
> Software testen is gedurende het hele ontwikkelproces, en eigenlijk ook al daarvoor belangrijk. Het testen van software, het waarborgen van kwaliteit en voldoende vertrouwen creëren in het product is een team effort en eigenlijk een bedrijfs effort
![[Image.tiff]]
Het maakt niet uit welk ontwikkelproces je ook volgt. Testen is altijd onderdeel van het proces.
# Software Ontwikkelingstraject - Het V-Model
![[Pasted image 20250410085317.png]]
Het V-model is een model dat wordt gebruikt om de verschillende fasen van het softwareontwikkeltraject en de bijbehorende activiteiten te visualiseren. Het V-model toont hoe de specificatie- en ontwerpfasen van de softwareontwikkeling samenhangen met de testfasen.
Volgens het V-model zijn er de volgende testsoorten:
![[Pasted image 20250410085329.png]]
1. **Unit testen**: Dit zijn kleine, zelfstandige tests die worden uitgevoerd om te bepalen of individuele units of onderdelen van de software correct werken. Word over het algemeen uitgevoerd en gemaakt door Developers en kun je zien als onderdeel van geautomatiseerd testen.
![[Pasted image 20250410085357.png]]
2. **Integratietesten**: Dit zijn tests die worden uitgevoerd om te bepalen of de verschillende units of onderdelen van de software correct samenwerken. Werken de brokjes code ook goed samen? Praat het ene product goed met het andere product.
![[Pasted image 20250410085411.png]]
3. **Systeemtesten**: Dit zijn tests die worden uitgevoerd om te bepalen of de gehele softwarecorrect functioneert en aan de eisen voldoet. Dit word vaak uitgevoerd door te tester die beoordeeld of het opgeleverde voldoet aan de gestelde specificaties maar ook op zoek regressie (gaat er ergens anders iets stuk door deze change)
4. **Acceptatietesten**: Dit zijn tests die worden uitgevoerd om te bepalen of de software aan de eisen van de klant voldoet en geschikt is voor gebruik. Dit word uitgevoerd door de acceptanten, eventueel wel onder begeleiding van software testers
Het V-model geeft aan dat de specifieke testen moeten worden uitgevoerd naarmate de softwareontwikkeling vordert, en dat elke testsoort gericht is op het verifiëren van specifieke aspecten van de software.
# Agile Testen
![[Pasted image 20250410085421.png]]
Het V-Model past erg goed bij waterval ontwikkel stijl. De stappen in de V doorloop je ook in die volgorde en ontwikkelen en testen word gezien als 2 losse dingen.
Zo test je je requierments pas echt tijdens de acceptatietesten en dat gebeurd pas als de software zo goed als klaar is…
Agile werken is een manier om softwareontwikkeling te benaderen waarbij de nadruk ligt op snelle iteraties, flexibiliteit en samenwerking. Hierbij staan de behoeften en wensen van de gebruiker centraal. In tegenstelling tot het V-model, is agile werken niet gebaseerd op een vooraf vastgesteld plan, maar op continue aanpassing en verbetering op basis van feedback.
Die continue feedback is gedurende het hele proces van belang en gebeurd op meerdere manieren. Door de snelle iteraties en gewenste snelle feedback word ook Test Automatisering belangrijker.
# Wanneer beginnen met testen?
## Shift Left
Hoe eerder je begint met ‘testen’ hoe eerder je fouten vind en hoe goedkoper het is om het op te lossen.
![[Shift Left.jpeg]]
In dit diagram zie je dat traditioneel gezien het ‘grote’ testwerk komt nadat er iets is opgeleverd.
In geval van shift left is het doel om zo vroeg mogelijk in het proces je kwaliteit al te beoordelen.
Als tester kun je specificaties beoordelen; Zijn er gaten/onduidelijkheden? Wat is de impact op het product? Wat voor risico’s brengt het met zich mee. Testers kunnen hier al beginnen met hun testgevallen (met behulp van Testgevallen uitwerken, testtechnieken en test dekking uitwerken om inzicht te krijgen waar onduidelijkheden zijn.
Ook de developer kan mee helpen door de testen tijdens het ontwikkelen. Denk hierbij aan het schrijven van Unittesten en te werken op een test driven manier.
## Shift Right
Agile werken betekend regelmatig feedback ophalen. Dus niet alleen wanneer we aan het bouwen zijn of gebruikers laten testen maar ook wanneer het product al in productie staat door het product te monitoren.
![[Pasted image 20250410085650.png]]
# Testsoorten en technieken
## Functioneel testen
- **Functional testing:** Checking functions by emulating business scenarios, based on functional requirements. Black-box testing is a common way to verify functions.
- **Acceptance testing:** Verifying whether the whole system works as intended.
- **Integration testing:** Ensuring that software components or functions operate together.
- **Unit testing:** Validating that each software unit performs as expected. A unit is the smallest testable component of an application.
- **Regressietesten**: Dit zijn tests die worden uitgevoerd om te bepalen of wijzigingen in de software geen negatieve impact hebben op de bestaande functionaliteit.
- **Smoke testen:** Smoke testen is een soort softwaretest waarbij een kleine, geselecteerde set van testgevallen wordt uitgevoerd om te bepalen of de software op een hoog niveau functioneert. Deze tests zijn gericht op het verifiëren van de belangrijkste functies van de software en kunnen worden uitgevoerd na een belangrijke wijziging of na een integratie van nieuwe code.
- **Ketentesten / End2End test:** Test waarin een hele keten van systemen van de eerste input tot de laatste output wordt beschouwd. Over het algemeen test je alleen de scope van het te testen product en niet voor alle randsoftware. In dit geval test je wel de hele keten. Meestal is een test coordinator / manager hier mee bezig. Moeilijke test ivm vele variabelen, testdata, afhankelijkheden en mensen op 1 lijn krijgen.
- **BlackBox Testing** Procedure om testgevallen, functioneel dan wel niet-functioneel, af te leiden of te selecteren gebaseerd op een analyse van de specificatie van een component of systeem, zonder referentie naar de interne structuur.
- **WhiteBox Testing** Een procedure om testgevallen af te leiden en/of te selecteren op basis van een analyse van de interne structuur van een component of systeem.
- **Exploratief testen** Een testaanpak waarbij de testers dynamisch testen ontwerpen en uitvoeren op basis van hun kennis, onderzoek van de testeenheid en de resultaten van eerdere testen.
- **(un)Happy Flow**
## ' Ouderwetse' Termen
- Functionele Acceptatie Test (FAT)
- Gebruikers Acceptatie Test (GAT)
- Productie Acceptatie Test (PAT)
# Non Functional
- **Non-Functional Testing** is defined as a type of Software testing to check non-functional aspects (performance, usability, reliability, etc) of a software application. It is designed to test the readiness of a system as per nonfunctional parameters which are never addressed by functional testing.
- **Performance testing:** Testing how the software performs under different workloads. Load testing, for example, is used to evaluate performance under real-life load conditions.
- **Usability testing:** Validating how well a customer can use a system or web application to complete a task.
- **Stress- en belastingstesten**: Dit zijn tests die worden uitgevoerd om te bepalen hoe de software presteert onder extreme omstandigheden, zoals hoge belasting of stress.
# Overige:
- **Product Risico Analyse** (PRA). Op basis van het bepaalde risico kun je bepalen hoeveel tijd je gaat besteden aan het testen.
- **Business Value**: Naast risico kan je ook de 'business value' meenemen als leidraad hoeveel je gaat testen.
- **Use Cases**
- **Testcases:** Groep van testgevallen. Bijvoorbeeld: Testcases voor het inlogproces
- **Testgevallen:** Verschillende situaties om een testcase te testen. Bij voorbeeld: Log in met verkeerde username, log in zonder wachtwoord, log in met correcte credentials.
- **Bug**: In software testing, a bug is a deviation of the customer requirement, in simple language we can say deviation between the expected result and the actual result in an application or in a module that is found by the [testing team](https://qacraft.com/qacraft-team/) during the testing period. > Iets gaat niet stuk maar is ook nog volgens verwachting
- **Defect**: If the functionality of an application is not working as per the customer requirement is known as a defect, It is found during the development phase while unit testing. Like By giving wrong input may lead to a defect or Any error in code may lead to a defect. > Iets gaat echt stuk
- **Error**: An error in software testing refers to a slip-up, misunderstanding, or mistake made by a software engineer > Iets gaat echt stuk, van toepassing tijdens ontwikkeling
- **Failure**: Once the software is completed and delivered to the customer and if the customer found any issue in the software then it is the condition of failure of the software. > Wanneer de gebruiker het in productie vind.
- **QA** vs **software tester**
# De rol van Testers
![[Pasted image 20250410085752.png]]
Als software tester ben je altijd op zoek naar problemen.
# Eigenschappen van een tester
Er zijn verschillende eigenschappen die een goede software tester zou moeten hebben:
1. **Analytisch denkvermogen****:** Een goede software tester moet in staat zijn om problemen te identificeren en op te lossen door middel van logisch denken en het verzamelen en analyseren van informatie.
2. **Aandacht voor detail**: Software testers moeten nauwkeurig en gedetailleerd werken om ervoor te zorgen dat ze alle mogelijke problemen en fouten in de software identificeren.
3. Communicatieve vaardigheden: Software testers moeten in staat zijn om duidelijk te communiceren met andere leden van het ontwikkelteam en de resultaten van hun tests te documenteren.
4. **Flexibiliteit**: Software testers moeten flexibel zijn en in staat om snel te schakelen tussen verschillende projecten en taken.
5. **Leergierigheid**: Een goede software tester is altijd bereid om nieuwe vaardigheden en kennis op te doen om beter te kunnen functioneren in hun werk.
6. **Nieuwsgierig**: Software testers gaan graag op onderzoek uit en proberen graag de grenzen van de software op te zoeken of hun vaardigheden te ontwikkelen
7. **Probleemoplossend vermogen**: Software testers moeten in staat zijn om creatief te denken en problemen op te lossen als ze zich voordoen tijdens het testen van de software.
8. **Technische vaardigheden**: Software testers moeten vertrouwd zijn met verschillende soorten software en hebben vaak kennis van programmeren of scripting.
9. **Zelfstandigheid**: Software testers moeten in staat zijn om zelfstandig te werken en te functioneren in een teamomgeving.
# Dagelijkse werkzaamheden
Je draait mee in een development team. Volgens scrum ben je ook een developer.
Wanneer de developer iets oplevert gaat de software tester aan de slag om het te testen.
Voordat het opgeleverd is heeft de tester de tickets goed gelezen en bedacht hoe hij dit gaat testen.
Daarbij houd je rekening met het risico van de oplevering, de business value, hoeveel tijd je hebt en hoe complex het is.
De tester heeft bedacht wat voor techniek gebruikt gaat worden en heeft zo nodig ook al een testspecificatie uitgewerkt met testgevallen.
Wanneer je issues vind moet je kunnen overleggen met de developer en goed toelichten wat voor fout je gevonden hebt. Ook hierin moet je weloverwogen afwegen wat belangrijke bevindingen zijn en wat niet. Goede samenwerkingen met developers is erg belangrijk.
Hiervoor overleg je ook met de PO, stakeholders en je team. Communicatieve vaardigheden zijn dan ook heel belangrijk.
Je bent als software tester vaak de brenger van slecht nieuws. Het is belangrijk hier op de juiste manier mee om te gaan en ook successen te vieren.