Jedinica 2 / 12

Analiza zahtjeva i dizajn softvera

Dobici:

  • Sposobnost transformacije nejasnih poslovnih zahtjeva u jasne, provjerljive softverske zahtjeve i korisničke priče uz podršku AI
  • Sposobnost upoređivanja prednosti i mana dizajna sistema, modela podataka i arhitektonskih odluka na strukturiran način sa AI
  • Sposobnost kritičke provjere predloženog dizajna AI u odnosu na zahtjeve, skalabilnost i ograničenja

Većina softverskih projekata propada ne zbog lošeg koda, već zbog pogrešno shvaćenih zahtjeva. Zahtjev od jedne rečenice poput „Dozvolite korisnicima preuzimanje izvještaja“ ostavlja iza sebe desetine neodgovorenih pitanja: U kom formatu? ko je nadležan? Koliko zapisa? Šta ako je sporo? Analiza zahtjeva (prevođenje poslovnog zahtjeva u jasne tehničke potrebe koje se mogu testirati) i dizajn softvera (izgradnja strukture na papiru kako bi se zadovoljile ove potrebe) je faza u kojoj se sprječavaju najskuplje greške prije pisanja koda. U ovoj cjelini naučit ćemo koristiti umjetnu inteligenciju kao „partnera za razmišljanje“ u ovoj fazi: partnera koji demistifikuje neizvjesnost, razvrstava opcije, ali konačnu odluku ostavlja vama.

AI ovdje proizvodi dvije velike vrijednosti. Prvo, postavlja pitanja koja preskočite; Izvlači na površinu skrivene pretpostavke i rubne slučajeve u zahtjevu. Drugo, brzo prikazuje prednosti i nedostatke dizajnerske odluke. Ali to je opasnost: AI će dati generičke preporuke kao "najbolju praksu" bez potpunog poznavanja vašeg konteksta (budžet, tim, postojeći sistem, zakonska ograničenja). Vaš je posao da filtrirate ovaj savjet prema vlastitoj istini.

Koncepti: Korisnička priča: kratka rečenica koja izražava potrebu u obliku "...kao, želim da mogu... jer...". Kriterijumi prihvatanja: Proverljivi uslovi koji moraju biti ispunjeni da bi se posao smatrao „odrađenim“. Nefunkcionalni zahtjev: Zahtjevi koji se odnose na "kako će se ponašati", a ne "šta će raditi", kao što su brzina, sigurnost, skalabilnost.

Od nejasnog zahtjeva do provjerljivog zahtjeva

Dobar zahtjev je mjerljiv i provjerljiv. Ne "neka sistem bude brz", već "neka se rezultati pretrage vrate u roku od 500 ms". Evo korak-po-korak načina za korištenje AI za sužavanje nesigurnosti:

  1. Dajte zahtjev kakav jeste i generirajte pitanje. Ne pitajte AI za rješenje, već prvo da "navede sve nejasno u ovom zahtjevu kao pitanje".
  2. Vi dajte odgovore. Samo vi znate kontekst; Odgovorite na pitanja umjetne inteligencije sa svojim stvarnim poslovnim ograničenjima.
  3. Neka se to prevede u korisničke priče i kriterije prihvatanja. Prevedite razjašnjenu potrebu u stavke koje se mogu provjeriti.
  4. Dodajte rubne slučajeve i negativne scenarije. "Prazan rezultat", "neovlašteni korisnik", "prevelik fajl" itd.

Prompt za izdvajanje dvosmislenosti: "Prevest ćemo sljedeći poslovni zahtjev u softverski zahtjev. Nemojte još predlagati rješenje. Prvo, izdvojite SVE nejasnoće i skrivene pretpostavke na koje nije odgovoreno u ovom zahtjevu kao listu pitanja. Grupirajte pitanja pod sljedećim naslovima: opseg, korisnik/ovlašćenje, obim podataka, performanse, uvjeti greške, sigurnost. Zahtjev korisnika: narudžba za preuzimanje kao sigurnost."

Korisnička priča + upit za kriterije prihvatanja: "Podijelite sljedeće razjašnjene potrebe na korisničke priče koje su u skladu sa principima INVEST. Napišite 3-5 provjerljivih kriterija prihvatljivosti za svaku priču (u formatu Dato-kada-Onda). Dodajte najmanje 2 negativna scenarija (neovlašteni pristup, prazni podaci). Potreba: [ovdje napišite razjašnjenu potrebu]"

Poređenje dizajnerskih odluka sa AI

Dizajn je stalni kompromis: brzina naspram fleksibilnosti, jednostavnost naspram skalabilnosti? AI stavlja ove kompromise u brzu tabelu. Na primjer, za funkciju "pošalji obavještenje" možete raspravljati o tome hoćete li koristiti sinhroni (pošalji na zahtjev) ili asinhroni (na čekanju, slanje u pozadini) pristup.

Uputa za poređenje dizajna: "Dizajniram funkciju 'pošalji obavještenje e-poštom korisniku'. Uporedite dva pristupa: (A) sinhronu isporuku tokom HTTP zahtjeva, (B) asinhronu isporuku u pozadini stavljajući je u red poruka. Napravite tabelu na sljedećim osama: vrijeme čekanja korisnika, tolerancija grešaka, složenost u infrastrukturi, smanjenje troškova u infrastrukturi. na kraju bi izabrao u kom slučaju ne donosi odluku umjesto mene."

osovina

sinhroni prenos

Asinkrono (red)

Vrijeme čekanja korisnika

Dugo (čekanje na isporuku)

Kratko (odmah se vraća)

Tolerancija grešaka

Nisko (zahtjev eksplodira ako eksplodira slanje)

Visok (moguć ponovni pokušaj)

složenost

nisko

Srednje visok (infrastruktura u redu čekanja)

Troškovi infrastrukture

nisko

Potrebne su dodatne komponente

Gde stane

Mala zapremina, jednostavna primena

Veliki obim, kritična isporuka

Savjet: Ako AI kažete “nemojte donositi odluku umjesto mene, samo mi pokažite opcije i uslove” tjera vas na razmišljanje i smanjuje rizik da slijepo prihvatite prijedlog. Najbolja dizajnerska odluka je ona koju donese osoba koja poznaje vaš kontekst (vi).

Slaba prompt / jaka prompt

SLABO: "Dizajnirati bazu podataka za sistem narudžbi." (Rezultat: koja skala, koji odnosi, koja ograničenja nisu jasni; opća, nerealna shema.) SNAŽNO: "Predložite nacrt modela podataka za malu e-trgovinu. Entiteti: Kupac, Narudžba, Proizvod, Stavka narudžbe. Ograničenja: može biti mnogo proizvoda u narudžbi; cijena proizvoda se može mijenjati tokom vremena, ali trenutna cijena bi trebala biti sačuvana po danu u prošloj narudžbi. ~50; Odnosi i zašto to „Objasnite da ste donijeli odluku. Navedite kako ste riješili problem istorije cijena. Dajte to kao listu entiteta i polja, a ne kod."

Razlika u moćnoj brzini; skalu (500 narudžbi po danu), poslovno pravilo (prošla cijena se mora održati) i željeni izlazni format. Jedna rečenica poput "Prošla cijena se mora održati" potpuno mijenja dizajn; Ako ovo ne navedete, AI će proizvesti netačan, ali uvjerljiv dijagram.

Mini Cases

Slučaj 1 — Skrivena pretpostavka. Tim direktno kodira zahtjev "korisnik može otpremiti sliku profila". Drugi tim je pitao AI o neizvjesnosti: "maksimalna veličina? dozvoljeni formati? neprikladna kontrola sadržaja? izbrisati staru fotografiju?" Proizvodi 8 pitanja poput. Prvi tim sazna za problem u produkciji kada 20 MB fajlova popuni server; Drugi tim to rješava dizajnom.

Slučaj 2 — Netačna pretpostavka o skali. AI predlaže složeni sloj keširanja za funkciju izvještavanja. Kada inženjer istakne da su stvarni podaci samo 30 izvještaja dnevno, AI pojednostavljuje prijedlog. Nenavođenje skale dovodi do troškova nepotrebne složenosti; navođenje štedi 2 sedmice nepotrebnog rada.

Slučaj 3 — Nedostatak kriterijuma prihvatljivosti. "Šta će se dogoditi ako uplata ne uspije?" Budući da pitanje nikada nije postavljeno, sistem narudžbi će i dalje označiti narudžbu kao "potvrđenu" u slučaju neuspješnog plaćanja. Lista negativnih scenarija generisana od strane veštačke inteligencije obuhvata ovaj jaz; Kriterijum prihvatanja od 1 reda sprečava gubitak stvarnog novca.

Uobičajene greške

  • Prosljeđivanje zahtjeva direktno kodu. Kod napisan prije nego što je nejasnoća riješena brzo rješava pogrešan problem.
  • Slijepo prihvatanje općenite „najbolje prakse“ AI. Ako ne navedete svoj kontekst (razmjer, budžet, tim) preporuka vam neće raditi.
  • Preskakanje nefunkcionalnih zahtjeva. Ako brzina, sigurnost i razmjer nisu specificirani, dizajn će biti nepotpun.
  • Samo razmišljam o srećnom scenariju. Negativni scenariji kao što su prazni podaci, neovlašteni korisnik, status greške trebaju biti uključeni u dizajn.
  • Delegiranje odluke na AI. AI generiše opcije; Vi odlučujete koji kompromis odgovara vašem poslovanju.

Ukratko

Analiza i projektovanje zahteva je faza u kojoj se hvataju najjeftinije greške. Ovdje AI generira pitanja koja otkrivaju neizvjesnost, izrađuje korisničke priče i kriterije prihvatanja, te dijagrame dizajnira kompromise. Ali samo vi znate kontekst; Vaš je posao da filtrirate preporuke AI na osnovu vašeg opsega, budžeta, tima i zakonskih ograničenja i donesete konačnu odluku. Disciplina „nemoj odlučivati ​​umjesto mene, pokaži mi opcije“ vodi i do boljeg dizajna i do dubljeg učenja.

Zadatak aplikacije

Odaberite zahtjev za posao od jedne rečenice iz svog konteksta. Prvo, primijenite upit za dvosmislenost na AI i odgovorite na pitanja sa svojim stvarnim ograničenjima. Zatim prevedite razjašnjenu potrebu u najmanje 2 korisničke priče i 3 kriterija prihvatanja za svaku; Uključite barem 1 negativan scenario. Konačno, kreirajte tabelu poređenja za odluku o dizajnu (sinhroni/asinhroni, struktura tabele, itd.) i napišite svoju odluku u 2 rečenice.

kontrolna lista

  • [ ] Uklonio sam nejasnoće kao pitanja prije prosljeđivanja zahtjeva u kod.
  • [ ] Dao sam kontekst (razmjer, ovlaštenje, učinak, zakonska ograničenja) AI.
  • [ ] Razbio sam korisničke priče u kriterije prihvatljivosti za testiranje.
  • [ ] Dodao sam barem jedan negativan/ivični scenario.
  • [ ] Procijenio sam odluku o dizajnu pomoću tabele kompromisa.
  • [ ] Donio sam konačnu odluku na osnovu svog konteksta, nisam to prepustio AI.