Eenheid 2 / 12

Vereistenanalyse en softwareontwerp

Winst:

  • Mogelijkheid om vage zakelijke verzoeken om te zetten in duidelijke, testbare softwarevereisten en gebruikersverhalen met AI-ondersteuning
  • Vermogen om de voor- en nadelen van systeemontwerp, datamodel en architecturale beslissingen op een gestructureerde manier te vergelijken met AI
  • Mogelijkheid om het voorgestelde ontwerp van de AI kritisch te valideren op basis van vereisten, schaalbaarheid en beperkingen

De meeste softwareprojecten mislukken niet vanwege slechte code, maar vanwege verkeerd begrepen vereisten. Een verzoek van één zin, zoals 'Laat gebruikers rapporten downloaden', laat tientallen onbeantwoorde vragen achter: in welk formaat? Wie heeft de leiding? Hoeveel records? Wat als het langzaam is? Vereistenanalyse (het vertalen van een zakelijk verzoek naar duidelijke, testbare technische behoeften) en softwareontwerp (het construeren van de structuur op papier om aan deze behoeften te voldoen) is de fase waarin de duurste fouten worden voorkomen voordat er code wordt geschreven. In deze unit leren we in deze fase AI als ‘gedachtepartner’ te gebruiken: een partner die onzekerheid demystificeert, opties uitzoekt, maar de uiteindelijke beslissing aan jou overlaat.

AI produceert hier twee grote waarden. Ten eerste worden er vragen gesteld die je overslaat; Het brengt verborgen aannames en randgevallen in een verzoek naar boven. Ten tweede brengt het snel de voor- en nadelen van een ontwerpbeslissing in kaart. Maar dat is het gevaar: AI zal generieke aanbevelingen doen als ‘best practice’ zonder uw context (budget, team, bestaand systeem, wettelijke beperkingen) volledig te kennen. Het is jouw taak om dit advies te filteren tegen je eigen waarheid.

Concepten: Gebruikersverhaal: Een korte zin die een behoefte uitdrukt in de vorm van "... zoals, ik wil kunnen... omdat...". Acceptatiecriteria: Toetsbare voorwaarden waaraan moet worden voldaan voordat een taak als ‘klaar’ wordt beschouwd. Niet-functionele vereiste: vereisten die verband houden met "hoe het zich zal gedragen" in plaats van "wat het zal doen", zoals snelheid, beveiliging en schaalbaarheid.

Van vage vraag naar toetsbare eis

Een goede eis is meetbaar en controleerbaar. Niet ‘laat het systeem snel zijn’, maar ‘laat de zoekresultaten binnen 500 ms terugkomen’. Hier is een stapsgewijze manier om AI te gebruiken om de onzekerheid te beperken:

  1. Geef het verzoek zoals het is en laat de vraag genereren. Vraag de AI niet om de oplossing, maar eerst om ‘alles wat onduidelijk is in dit verzoek als vraag op te sommen’.
  2. Jij geeft de antwoorden. Alleen jij kent de context; Beantwoord de vragen van AI met uw echte zakelijke beperkingen.
  3. Laat het vertalen naar user stories en acceptatiecriteria. Vertaal de verduidelijkte behoefte naar toetsbare items.
  4. Voeg randgevallen en negatieve scenario's toe. "Leeg resultaat", "ongeautoriseerde gebruiker", "te groot bestand" enz.

Vraag om dubbelzinnigheid te extraheren: "We zullen het volgende zakelijke verzoek vertalen naar een softwarevereiste. Stel nog geen oplossing voor. Extraheer eerst ALLE dubbelzinnigheden en verborgen aannames die niet in dit verzoek worden beantwoord als een lijst met vragen. Groepeer de vragen onder de volgende kopjes: bereik, gebruiker/autoriteit, gegevensvolume, prestaties, foutcondities, beveiliging. Verzoek: 'Laat gebruikers de bestelgeschiedenis downloaden als rapport.'"

Gebruikersverhaal + acceptatiecriteriaprompt: "Verdeel de volgende verduidelijkte behoefte in gebruikersverhalen die voldoen aan de INVEST-principes. Schrijf 3-5 testbare acceptatiecriteria voor elk verhaal (in het gegeven-wanneer-dan-format). Voeg ten minste 2 negatieve scenario's toe (ongeoorloofde toegang, lege gegevens). Behoefte: [schrijf hier de verduidelijkte behoefte]"

Ontwerpbeslissingen vergelijken met AI

Ontwerp is een constante afweging: snelheid versus flexibiliteit, eenvoud versus schaalbaarheid? AI zet deze afwegingen in een snelle spreadsheet. Voor de functie 'Melding verzenden' kunt u bijvoorbeeld discussiëren over de vraag of u een synchrone (verzenden op verzoek) of asynchrone (wachtrij, verzenden op de achtergrond) aanpak wilt gebruiken.

Ontwerpvergelijkingsprompt: "Ik ontwerp een functie voor het verzenden van een e-mailmelding naar de gebruiker. Vergelijk de twee benaderingen: (A) synchrone bezorging tijdens het HTTP-verzoek, (B) asynchrone bezorging op de achtergrond door deze in de berichtenwachtrij te plaatsen. Maak een tabel op de volgende assen: wachttijd van de gebruiker, fouttolerantie, complexiteit, infrastructuurkosten, problemen bij het debuggen. Vat in twee zinnen samen welke ik uiteindelijk zou kiezen, in welk geval. Neem niet de beslissing voor mij."

as

synchrone transmissie

Asynchroon (wachtrij)

Wachttijd van gebruiker

Lang (wachten op verzending)

Kort (retourneert onmiddellijk)

Fouttolerantie

Laag (verzoek explodeert als verzenden explodeert)

Hoog (opnieuw proberen mogelijk)

complexiteit

laag

Middelhoog (wachtrijinfrastructuur)

Infrastructuurkosten

laag

Extra componenten vereist

Waar het past

Laag volume, eenvoudige toepassing

Hoog volume, kritische levering

Tip: Door tegen de AI te zeggen “Neem de beslissing niet voor mij, laat mij alleen de opties en voorwaarden zien” dwingt u om na te denken en verkleint u het risico dat u blindelings een suggestie accepteert. De beste ontwerpbeslissing wordt genomen door de persoon die jouw context (jij) kent.

Zwakke prompt/sterke prompt

ZWAK: "Ontwerp een database voor het bestelsysteem." (Resultaat: welke schaal, welke relaties, welke beperkingen zijn niet duidelijk; een algemeen, onrealistisch schema.) STERK: "Stel een conceptgegevensmodel voor een kleine e-commerce voor. Entiteiten: klant, bestelling, product, bestelitem. Beperkingen: er kunnen veel producten in een bestelling zitten; de productprijs kan in de loop van de tijd veranderen, maar de huidige prijs moet behouden blijven in de vorige bestelling; er worden ongeveer 500 bestellingen per dag verwacht. Relaties en waarom dat "Leg uit dat je de beslissing. Geef aan hoe u het probleem met de prijsgeschiedenis hebt opgelost. Geef het als een lijst met entiteiten en velden, geen code."

Het verschil van een krachtige prompt; schaal (500 bestellingen per dag), bedrijfsregel (prijs uit het verleden moet worden gehandhaafd) en het gewenste uitvoerformaat. Een enkele zin als "Prijs uit het verleden moet behouden blijven" verandert het ontwerp volledig; Als je dit niet specificeert, zal de AI een onnauwkeurig maar plausibel ogend diagram produceren.

Mini-hoesjes

Geval 1 – Verborgen veronderstelling. Een team codeert rechtstreeks het verzoek 'Gebruiker kan profielfoto uploaden'. Een ander team vroeg de AI over onzekerheid: "maximale grootte? toegestane formaten? ongepaste inhoudscontrole? oude foto verwijderen?" Het levert 8 vragen op zoals. Het eerste team ontdekt het probleem tijdens de productie wanneer 20 MB bestanden de server vullen; Het tweede team lost het op in ontwerp.

Geval 2 — Onjuiste schaalaanname. AI stelt een complexe cachinglaag voor voor een rapportagefunctie. Wanneer de engineer erop wijst dat de echte data slechts 30 rapporten per dag zijn, vereenvoudigt de AI de suggestie. Het niet specificeren van de schaal brengt de kosten van onnodige complexiteit met zich mee; specificeren scheelt 2 weken onnodig werk.

Geval 3 — Kloof in acceptatiecriteria. "Wat gebeurt er als de betaling mislukt?" Omdat de vraag nooit is gesteld, zal een bestelsysteem de bestelling nog steeds als "bevestigd" markeren in geval van een mislukte betaling. De lijst met negatieve scenario’s die door AI worden gegenereerd, vangt deze kloof op; Acceptatiecriteria op één regel voorkomen verlies van echt geld.

Veel voorkomende fouten

  • Het verzoek rechtstreeks doorgeven aan de code. Code die geschreven is voordat de dubbelzinnigheid is opgelost, lost snel het verkeerde probleem op.
  • Blindelings de algemene ‘best practice’ van AI overnemen. Als u uw context (schaal, budget, team) niet specificeert, zal de aanbeveling niet voor u werken.
  • Niet-functionele vereisten overslaan. Als snelheid, veiligheid en schaal niet worden gespecificeerd, is het ontwerp incompleet.
  • Ik denk alleen maar aan het gelukkige scenario. Negatieve scenario's zoals lege gegevens, ongeautoriseerde gebruiker en foutstatus moeten in het ontwerp worden opgenomen.
  • De beslissing delegeren aan AI. AI genereert opties; U bepaalt welke afweging bij uw bedrijf past.

Samengevat

Analyse en ontwerp van vereisten is de fase waarin de goedkoopste fouten worden ontdekt. Hier genereert AI vragen die onzekerheid aan het licht brengen, stelt gebruikersverhalen en acceptatiecriteria op en brengt ontwerpafwegingen in kaart. Maar alleen jij kent de context; Het is jouw taak om de aanbevelingen van de AI te filteren op basis van je schaal, budget, team en juridische beperkingen en de uiteindelijke beslissing te nemen. De discipline 'Neem niet de beslissing voor mij, laat mij de opties zien' leidt tot zowel beter ontwerp als dieper leren.

Applicatie taak

Kies een taakverzoek van één zin uit uw context. Pas eerst de ambiguïteitsprompt toe op de AI en beantwoord de vragen met uw echte beperkingen. Vertaal vervolgens de helder gemaakte behoefte naar minimaal 2 user stories en 3 acceptatiecriteria voor elk; Voeg minimaal één negatief scenario toe. Maak ten slotte een vergelijkingstabel voor een ontwerpbeslissing (synchroon/asynchroon, tabelstructuur, enz.) en schrijf uw eigen beslissing in 2 zinnen.

controlelijst

  • [ ] Ik heb de dubbelzinnigheden als vragen verwijderd voordat ik het verzoek in de code doorgaf.
  • [ ] Ik gaf de AI de context (schaal, autoriteit, prestaties, juridische beperkingen).
  • [ ] Ik heb de gebruikersverhalen opgedeeld in toetsbare acceptatiecriteria.
  • [ ] Ik heb ten minste één neerwaarts/randscenario toegevoegd.
  • [ ] Ik heb de ontwerpbeslissing geëvalueerd met de afwegingstabel.
  • [ ] Ik heb de uiteindelijke beslissing genomen op basis van mijn context, ik heb het niet aan de AI overgelaten.