Van functionele analyse tot release (end-to-end)
Dit project maakt deel uit van een 12-weekse stageopdracht en onderzoekt hoe ArtificiΓ«le Intelligentie (AI) concreet ingezet kan worden om het volledige Software Development Life Cycle (SDLC) te ondersteunen.
Het doel is het ontwikkelen van een werkende end-to-end AI-gebaseerde oplossing die developers ondersteunt bij:
- Functionele analyse
- Technische analyse
- Codegeneratie
- Code-review
- Testautomatisatie
- DevOps & dependency management
De focus ligt op praktische toepasbaarheid, traceerbaarheid en kwaliteit, binnen een realistische enterprise-context.
Deze opdracht sluit aan bij de standaard stack binnen de organisatie:
- Backend: Java 21, Spring Boot 4, Maven
- Frontend: React 19 (TypeScript), Vite
- API: REST, JSON
- Testing: JUnit 5, Spring Boot Test, Jest, React Testing Library, flow-based testing
- CI/CD: GitHub Actions, SonarQube Cloud, Jira, Jenkins
- Version control: GitHub, Dependabot
- AI tooling: Google Gemini API, LangGraph-stijl agenten, prompt-engineering, schema-validatie
- Containerisatie: Docker, Docker Compose, GHCR
AI-SDLC/ β parent repository (bevat alle CI-logica en AI-tooling)
βββ .github/
β βββ workflows/ β alle GitHub Actions workflows
β β βββ ci.yml β centrale CI: AI-flow, build, test, Sonar, Docker, deploy
β β βββ sonarcloud.yml β herbruikbare SonarCloud analyse workflow
β β βββ ai-code-fixes.yml β AI-gedreven foutherstel bij CI-falen
β β βββ feature-validation.yml β PR-validatie via /validate-feature-xxx commentaar
β β βββ dependabot-automation.yml β Gemini AI review + auto-merge van Dependabot PRs
β β βββ dependabot-jira.yml β automatisch Jira-tickets aanmaken/sluiten voor Dependabot PRs
β βββ scripts/
β β βββ ai-fix-utils.sh β shell library: Sonar-issues ophalen, AI-fixes toepassen, coverage boosten
β β βββ sonar-pr-comment.sh β plaatst gedetailleerd Sonar-rapport als PR-commentaar
β β βββ sonar-rule-details.sh β haalt regelomschrijving op uit SonarCloud API
β βββ ai-fix-config.env β configuratie voor de AI-fix workflow (labels, drempelwaarden, β¦)
β βββ dependabot.yml β Dependabot configuratie (ecosystemen, schema's, groeperingen)
βββ ai/
β βββ flow.sh β hoofd-orchestrator: voert alle SDLC-stappen sequentieel uit
β βββ sync-from-fa.sh β wrapper die de Gemini-agent aanroept
β βββ generate-tests.sh β genereert backend- en frontendtests uit TA + flow JSON
β βββ fa-to-ta.sh β aparte wrapper voor de FAβTA stap
β βββ agent/
β β βββ sync-from-fa.mjs β Gemini-agent: FA β TA JSON + flow JSON + test context
β βββ testgen/
β β βββ generate-backend-tests.mjs β Java TestRestTemplate integratietests genereren
β β βββ generate-frontend-tests.mjs β React Testing Library tests genereren
β β βββ generate-flow-json.mjs β flow testscenario's genereren vanuit FA
β β βββ utils.mjs β gedeelde hulpfuncties voor alle testgeneratoren
β βββ validator/
β β βββ validate.mjs β AJV JSON-schema validatie van TA en flow JSON
β βββ prompts/ β systeemprompts voor alle Gemini-aanroepen
β βββ schemas/
β β βββ ta.schema.json β JSON-schema voor de Technische Analyse
β β βββ flowtests.schema.json β JSON-schema voor flow testscenario's
β βββ rules/ β per-feature business-rules voor validatie
βββ backend/ β Spring Boot applicatie
βββ frontend/ β React/TypeScript applicatie
βββ docs/
β βββ functional-analysis/ β FA markdown-bestanden per feature
β βββ technical-analysis/ β AI-gegenereerde TA markdown + JSON per feature
β βββ test-scenarios/ β AI-gegenereerde flow testscenario's per feature
β βββ test-context/ β AI-gegenereerde testcontext per feature
β βββ child-repo-templates/ β kant-en-klare caller-workflows voor child repos
βββ docker-compose.yml
βββ sonar-project.properties
βββ Documentation.md β volledige feature- en transferdocumentatie
Deze repository fungeert tegelijk als parent repository in een parent-child patroon: alle workflow-logica, AI-scripts en tooling leven hier centraal. Child-repositories (bv. AI-SDLC-Child) bevatten enkel applicatiecode en vijf dunne caller-workflows die delegeren naar deze parent.
Doel:
Een stabiele basis creΓ«ren om AI-ondersteuning te demonstreren binnen een gecontroleerde omgeving.
Opgeleverd:
- Projectstructuur met backend (Spring Boot) en frontend (React/TypeScript)
- Vastgelegde conventies en standaarden
- Eerste AI-instructiesets (prompts en workflows)
- GitHub Actions basisopzet
Doel:
AI inzetten om analysewerk te versnellen en te structureren.
Wat het doet:
Een developer schrijft een Functionele Analyse als markdown-bestand in docs/functional-analysis/<feature-id>.md. Zodra dit bestand bestaat, verwerkt de Gemini-agent (ai/agent/sync-from-fa.mjs) het volledig automatisch:
- De FA wordt gelezen en omgezet naar een gestructureerde Technische Analyse (
docs/technical-analysis/<feature-id>.ta.json). - Tegelijk worden flow testscenario's gegenereerd (
docs/test-scenarios/<feature-id>.flow.json) die beschrijven welke stappen een gebruiker doorloopt en welke responses worden verwacht. - Een testcontext (
docs/test-context/<feature-id>.md) wordt aangemaakt met aanvullende achtergrond voor de testgeneratoren. - Alle JSON-output wordt gevalideerd tegen stricte JSON-schema's (
ai/schemas/) via AJV.
De agent gebruikt temperatuur 0 voor deterministische, consistente output en past bestaande documenten incrementeel bij zonder bestaande requirements te verwijderen.
Traceerbaarheid: FA.md β ta.json + flow.json + context.md β tests
Doel:
AI inzetten om van analyse naar werkende code te gaan.
Wat het doet:
Vanuit de gegenereerde TA en flow testscenario's genereert de pipeline automatisch:
- Backend integratietests (
backend/src/test/java/β¦/<Feature>GeneratedIT.java) β volwaardige Spring BootTestRestTemplate-tests die de REST-endpoints van de feature valideren. De tests respecteren de bestaande controller/service/repository-architectuur en de naming conventions van het project. - Frontend component-tests (
frontend/src/ui/__generated__/<Feature>.test.tsx) β React Testing Library-tests die de UI-componenten van de feature testen op basis van de TA en flow-scenario's.
De gegenereerde code is geen tijdelijke scaffold maar directe, uitvoerbare testcode die onmiddellijk door mvn test en npm test wordt opgepikt.
Doel:
Automatisch kwaliteitscontrole toevoegen via AI.
Wat het doet:
De testautomatisatie werkt op twee niveaus:
Generatie (bij elke CI-run):
ai/generate-tests.shgenereert backend- en frontendtests vanuit de actuele TA en flow JSON.- Tests worden gegenereerd op basis van de requirements (REQ), business rules (BR), acceptance criteria (AC) en API-contracts uit de TA.
Coverage-bewaking (AI Code Fixes workflow):
- Na elke SonarCloud-scan controleert de pipeline of de code coverage boven 80 % ligt.
- Als de coverage te laag is, of als de SonarCloud Quality Gate faalt op nieuwe code, vraagt de pipeline Gemini om extra tests te genereren voor de niet-gedekte code.
- De pipeline herhaalt de SonarCloud-scan na het toevoegen van de extra tests.
Flow-based testing:
De flow.json-bestanden beschrijven gebruikersstromen als een reeks stappen met HTTP-methode, endpoint, request-body en verwachte response. Deze worden gebruikt als basis voor zowel de backend integratietests als de frontend component-tests.
Doel:
AI integreren in het build- en deliveryproces.
Wat het doet:
SonarQube AI Fix Flow:
Na elke push of PR voert de CI-pipeline een volledige SonarCloud-analyse uit. Als de Quality Gate faalt of als er open HIGH/MEDIUM-issues zijn, triggert de ai-code-fixes.yml workflow automatisch:
- Foutlogs en broncode worden naar Gemini gestuurd.
- Gemini analyseert de issues en genereert concrete code-fixes.
- De fixes worden toegepast op
backend/src/enfrontend/src/. - Er wordt automatisch een Pull Request geopend met een gedetailleerde beschrijving per issue (inclusief de SonarQube-regelomschrijving, wat er fout was en hoe het is opgelost).
- Gemini doet een self-review van het gegenereerde PR.
Dependabot + AI + Jira:
- Dependabot detecteert dagelijks verouderde afhankelijkheden (Maven, npm, GitHub Actions) en opent automatisch PRs.
- Bij elke Dependabot-PR maakt de
dependabot-jira.ymlworkflow automatisch een Jira Task aan met de PR-titel, body en link. Wanneer de PR wordt gemerged of gesloten, wordt het Jira-ticket automatisch gesloten. - De
dependabot-automation.ymlworkflow laat Gemini een risico-analyse uitvoeren op de dependency-update. Het resultaat is een gestructureerde review met risicoclassificatie (LOW/MEDIUM/HIGH), een inschatting van breaking changes en een aanbeveling:APPROVEofHOLD. semver-patch-updates met groene CI en eenAPPROVE-beslissing worden automatisch gemerged.MINOR- enMAJOR-updates krijgen altijd eenHOLDen vereisen handmatige review.
Docker & deployment:
Bij elke push naar main na een geslaagde Quality Gate bouwt en publiceert de CI-pipeline automatisch Docker-images naar GHCR (GitHub Container Registry) β getagd met :latest en :<git-sha> β en deployt via docker compose up -d.
Doel:
Een volledig geautomatiseerde SDLC-flow aantonen.
Wat het doet:
De volledige pipeline is een keten van gespecialiseerde AI-agents die elk een afgebakende SDLC-stap uitvoeren:
| Stap | Agent / Tool | Output |
|---|---|---|
| FA inlezen | sync-from-fa.mjs (Gemini) |
TA JSON, flow JSON, testcontext |
| Schema-validatie | validate.mjs (AJV) |
Validatierapport |
| Testgeneratie | generate-backend-tests.mjs / generate-frontend-tests.mjs (Gemini) |
Java IT-tests, TSX tests |
| Build & test | Maven + Jest | Testresultaten, coverage |
| Kwaliteitsanalyse | SonarCloud + sonar-pr-comment.sh (Gemini) |
PR-commentaar met uitleg |
| AI-foutherstel | ai-fix-utils.sh (Gemini) |
Code-fixes, fix-PR |
| PR-validatie | feature-validation.yml (Gemini) |
PASS/PARTIAL/FAIL rapport |
| Dependency review | dependabot-automation.yml (Gemini) |
APPROVE/HOLD beslissing |
| Jira-koppeling | dependabot-jira.yml (Jira REST API) |
Jira Task aanmaak/sluiting |
| Docker & deploy | Docker, GHCR, Compose | Draaiende containers |
De enige twee handmatige stappen in de volledige flow zijn: (1) een FA schrijven en pushen, en (2) een gegenereerde fix-PR reviewen en mergen. Alles daartussenin is volledig geautomatiseerd.
De kern van het systeem. Een Functionele Analyse-bestand triggert een Gemini-agent die de volledige documentatieketen opbouwt en testcode genereert. De agent gebruikt structurele JSON-schema's om te garanderen dat de output consistent en machineleesbaar is. Bestaande documenten worden incrementeel bijgewerkt zonder bestaande requirements te verwijderen.
De traceerbaarheid loopt van FA.md β ta.json β flow.json β context.md β GeneratedIT.java β *.test.tsx.
Een drielaagse kwaliteitsloop die volledig zonder menselijke interventie draait:
- CI-laag: bouwt, test en scant met SonarCloud. Blokkeert bij
HIGH/MEDIUM-issues of een gefaalde Quality Gate. - AI Fix-laag: analyseert de foutlogs en broncode met Gemini, past fixes toe, opent een PR met per-issue uitleg.
- Coverage-laag: als de coverage onder 80 % valt of nieuwe code ongedekt is, genereert Gemini extra tests en herscant SonarCloud.
Op elk moment kan een developer een PR-commentaar plaatsen om te controleren of de geΓ―mplementeerde code overeenkomt met de originele analyses. De feature-validation.yml workflow leest automatisch de FA en TA op uit docs/functional-analysis/ en docs/technical-analysis/, verzamelt de code-context van de gewijzigde bestanden in de PR, en stuurt alles naar Gemini.
Twee modi:
- Standaard (
/validate-feature-011) β stuurt de volledige bestandsinhoud van enkel de gewijzigde PR-bestanden naar Gemini. Meest geschikt voor gerichte validatie van een specifieke implementatie. - Full (
/validate-feature-011 --full) β includeert ook de eerste 150 regels van alle Java- en TypeScript-bronbestanden in de repo. Geschikt voor een globaal overzicht van de implementatiestatus.
Wat het rapport controleert:
| Sectie | Bron | Wat wordt gecontroleerd |
|---|---|---|
| Requirements (REQ-xxx) | FA | GeΓ―mplementeerd / ontbrekend / gedeeltelijk |
| Business Rules (BR-xxx) | FA | Afgedwongen / ontbrekend / gedeeltelijk |
| Acceptance Criteria (AC-xxx) | FA | Gedekt / niet gedekt / gedeeltelijk |
| Non-Functional Requirements (NFR-xxx) | FA | Aanwezig / ontbrekend / gedeeltelijk |
| API Contracts | TA | Paden, methodes, request/response, statuscodes |
| Domain Model & Database | TA | Entiteiten, velden, relaties, constraints |
| Backend Design | TA | Controller/service/repository-structuur |
| Frontend Design | TA | Componenten en routes |
| Eindverdict | FA + TA + code | PASS / PARTIAL / FAIL |
De workflow reageert met een π-reactie op het commentaar en plaatst het volledige rapport als nieuw PR-commentaar binnen 1β2 minuten. De validatie blokkeert nooit een merge β het rapport is puur informatief.
Koppelt het dependency-update-proces aan Jira en AI-review. Dependabot detecteert dagelijks verouderde afhankelijkheden (Maven, npm, GitHub Actions) en opent automatisch PRs.
dependabot-jira.yml zorgt voor de Jira-koppeling:
- Bij het openen van een Dependabot-PR wordt automatisch een Jira Task aangemaakt via de Jira REST API (v3, ADF-formaat) met de PR-titel, body en een directe link naar de PR.
- De Jira issue-key wordt als commentaar op de PR geplaatst (
π« Jira task created: [ABC-123]). - Wanneer de PR wordt gemerged of gesloten, zoekt de workflow het Jira-commentaar op, haalt de beschikbare transities op en sluit het ticket automatisch via de
ClosedofDonetransitie. - De aanmaak is idempotent: als er al een Jira-commentaar bestaat voor de PR, wordt de aanmaak overgeslagen.
dependabot-automation.yml verzorgt de AI-review en auto-merge:
- Gemini ontvangt de PR-titel, body en een diff-samenvatting en genereert een gestructureerde Markdown-review met risicoclassificatie (
LOW/MEDIUM/HIGH), een inschatting van breaking changes, verificatiestappen en een aanbeveling. - Bij
APPROVEwordt de PR automatisch goedgekeurd. Bijsemver-patch+ groene CI +APPROVEwordt de PR automatisch gemerged. MINOR- enMAJOR-updates krijgen altijdHOLDen vereisen handmatige review.- Fallback zonder Gemini:
semver-patchβAPPROVE, alles anders βHOLD.
De Docker-integratie is volledig onderdeel van de centrale CI-workflow (ci.yml) en wordt enkel uitgevoerd bij een directe push naar main β niet bij PRs β en enkel als de SonarCloud Quality Gate is geslaagd.
Wat er gebeurt bij elke succesvolle push naar main:
- Backend packaging β
mvn package -DskipTestsbouwt een uitvoerbaar JAR-bestand. - Frontend build β
npm run buildcompileert de React-applicatie naar statische bestanden. - Docker login β inloggen op GitHub Container Registry (GHCR) via het automatische
GITHUB_TOKEN. - Backend image bouwen en pushen β op basis van
backend/Dockerfile(Eclipse Temurin 21 JRE Alpine, poort 9090). Getagd als:latestΓ©n:<git-sha>. - Frontend image bouwen en pushen β op basis van
frontend/Dockerfile(nginx-alpine, poort 80). Getagd als:latestΓ©n:<git-sha>. - Deployment β
docker compose pull && docker compose up -dhaalt de nieuwe images op en herstart de containers.
Tagging-strategie:
Elke image krijgt twee tags: :latest voor de meest recente versie en :<git-sha> voor een exacte, reproduceerbare versie die gebruikt kan worden voor rollbacks. De docker-compose.yml krijgt tijdens de deployment de volledige ghcr.io/<owner>/<image>:<git-sha>-referentie als omgevingsvariabele mee zodat altijd de exacte nieuwe versie wordt uitgerold.
Dit patroon lost het onderhoudsprobleem van gedupliceerde CI-logica op. Alle workflow-intelligentie (AI-scripts, prompts, schema's, shell-utilities, testgeneratoren) leeft uitsluitend in deze parent repository. Een child-repository bevat enkel applicatiecode en vijf dunne caller-workflows.
Hoe de koppeling werkt:
Elke caller-workflow in een child repo delegeert volledig via GitHub's workflow_call mechanisme:
# In child repo: .github/workflows/ci.yml (volledig bestand, ~15 regels)
jobs:
ci:
uses: OwenNolis/AI-SDLC/.github/workflows/ci.yml@main
secrets: inherit
with:
FEATURE_ID: ${{ vars.FEATURE_ID }}
SONAR_PROJECT_KEY: ${{ vars.SONAR_PROJECT_KEY }}
# ...De vijf caller-workflows in een child repo zijn: ci.yml, ai-code-fixes.yml, sonarcloud.yml, dependabot-jira.yml en dependabot-automation.yml.
Hoe AI-scripts de child repo bereiken:
De parent CI-workflow doet een tweede sparse-checkout van zichzelf tijdens de uitvoering in de child-context:
Checkout AI-SDLC tools β .sdlc-tools/
- .github/scripts/ β shell utilities
- .github/ai-fix-config.env
- ai/ β flow.sh, testgeneratoren, prompts, schema's
De scripts komen tijdelijk in .sdlc-tools/ terecht in de werkruimte van de child. Ze worden nooit opgeslagen in de child repo. Bij elke run wordt de nieuwste versie uit de parent opgehaald β een update in de parent is onmiddellijk van kracht in alle child repos zonder dat er iets in de child hoeft te worden aangepast.
Wat nooit in een child repo staat: alle workflow-logica, AI-scripts, prompts, schema's, testgeneratoren, de validator en de child-repo-templates zelf.
- Volledige organisatorische implementatie van AI binnen het bedrijf
- Change management of HR-impact
- Juridische of compliance-uitwerking op bedrijfsniveau
Naast de technische implementatie wordt een enablementplan (Β± 1 A4) opgeleverd met:
- Aanbevelingen voor AI-adoptie
- Mogelijke risico's
- Governance en kwaliteitsbewaking
- Tooling-keuzes en randvoorwaarden
Dit document dient als adviesdocument voor toekomstige adoptie.
- Java 21+
- Node.js 22+
- Maven
- Git
- (Optioneel) Docker
cd backend
mvn clean spring-boot:run
# http://localhost:9090cd frontend
npm install
npm run dev
# http://localhost:5173node ai/testgen/generate-backend-tests.mjs feature-001-support-ticketnode ai/testgen/generate-frontend-tests.mjs feature-001-support-ticketcd backend
mvn testcd frontend
npm test./ai/flow.sh feature-001-support-ticketBACKEND_MATRIX=1 ./ai/flow.sh feature-001-support-ticketDit project maakt gebruik van een hybride CI/CD-aanpak waarbij GitHub Actions en AI-ondersteuning gecombineerd worden om het volledige SDLC-proces te automatiseren.
push / PR β ci.yml
ββ AI-SDLC flow (FA β TA β tests β build β mvn test β npm test)
ββ SonarCloud analyse + Quality Gate
ββ PR-commentaar met Sonar-rapport (op PRs)
ββ Docker build & push β GHCR (alleen main push)
ββ Docker Compose deploy (alleen main push)
CI gefaald β ai-code-fixes.yml
ββ Foutdetectie (compilatie, tests, Sonar-issues)
ββ Gemini genereert fixes
ββ Coverage boost indien nodig
ββ Herhaalde SonarCloud-scan
ββ Fix-PR aanmaken
Dependabot PR β dependabot-automation.yml + dependabot-jira.yml
ββ Gemini AI review (APPROVE / HOLD)
ββ Auto-merge bij PATCH + CI groen + APPROVE
ββ Jira Task aanmaken
ββ Jira Task sluiten na merge
PR-commentaar /validate-feature-xxx β feature-validation.yml
ββ FA + TA + code β Gemini β PASS/PARTIAL/FAIL rapport
- Werkende end-to-end AI-flow
- Volledige traceerbaarheid: requirement β analyse β code β tests
- Herbruikbare instructiesets
- Praktische demo's
- Onderbouwd enablementplan
Zie Documentation.md voor een volledige Engelstalige feature-documentatie, inclusief transfergids en compleet secrets/variables overzicht.
- Stageopdracht β AI in de SDLC
- Student: Owen Nolis
- Opleiding: Toegepaste Informatica / AP Hogeschool
- Periode: 02/02/26 - 29/05/26