Original article: http://martinfowler.com/articles/designDead.html

Za mnoge koji dolaze nakratko u kontakt s Extreme Programming, čini se da je XP poziva za smrt softverskog dizajna. Ne samo je mnogo dizajna aktivnost ismijavaju kao “Big up front dizajn”, ali takve dizajn tehnike kao UML, fleksibilne okvire, pa čak i obrasci su de-naglasio ili stvarno ignorirao. Zapravo XP uključuje puno dizajn, ali to radi na drugačiji način od utvrđenih programskih procesa. XP je pomlađena pojam evolucijske dizajna s praksama koje omogućuju evolucija postati održiv dizajn strategija. Ona također pruža nove izazove i vještine dizajneri trebaju naučiti kako napraviti jednostavan dizajn, kako koristiti refactoring zadržati dizajn čist i kako se koristi obrasce u evolucijskom stilu.

Ekstreman programiranje (XP) izaziva mnoge zajedničke pretpostavke o razvoju softvera. Od toga je jedan od najkontroverznijih je njegov odbacivanje značajnih napora u up-front dizajn, u korist više evolucijskog pristupa. Svojim kritičarima ovo povratak “kod i popraviti” razvoja – najčešće ismijavaju kao sjeckanje. Svojim obožavateljima često se doživljava kao odbacivanje tehnika dizajna (kao što je UML), načela i uzoraka. Ne brinite o dizajnu, ako slušate kodu dobar dizajn će se pojaviti.

Nađem u središtu ovog argumenta. Velik dio moje karijere je uključen grafički dizajn jezika – Unified Modeling Language (UML) i njegove preteče – a u uzorcima. Doista sam napisao knjige i na UML i uzoraka. Da li moj zagrljaj XP znači da odricati sve ono što sam napisao o tim temama, čišćenje svoj um od svih takvih kontrarevolucija pojmova?

Pa neću očekivati ​​da mogu ostaviti vise na udicu dramske napetosti. Kratak odgovor je ne. Dugo odgovor je ostatak ovog rada.

Planirani i Evolucijska dizajn

Za radu ću opisati dva stilove kako dizajn je učinjeno u razvoju softvera. Možda najčešći je evolucijski dizajn. U biti evolucijski dizajn znači da je dizajn sustava raste kao sustav je implementiran. Dizajn je dio programskih procesa i kao program razvija promjene dizajna.

U svojoj uobičajenoj upotrebi, evolucijski dizajn je katastrofa. Dizajn završi kao agregacija hrpa ad-hoc taktičkih odluka, od kojih svaki čini kod teže mijenjati. Na mnogo načina možete tvrditi to nije dizajn, svakako to obično dovodi do lošeg dizajna. Kao Kent kaže, dizajn je tu da vam omogućiti da mijenjaju softver lako u dugoročno. Kao dizajn pogoršava, tako da vašu sposobnost da promjene učinkovito. Imate stanje softvera entropije, preko puta dizajn dobiva gore i gore. Ne samo da ovaj bi program teže mijenjati, ona također čini greške i lakše za uzgoj i teže pronaći i sigurno ubiti. To je “kod i popraviti” noćnu moru, gdje su bugovi postati eksponencijalno skuplje popraviti kako projekt ide dalje.

Planirana Dizajn je suprotno tome, i sadrži pojam rođena iz drugih grana inženjerstva. Ako želite izgraditi nemilost, možete samo dobiti neki drva zajedno i dobiti grubu oblik. No, ako želite izgraditi neboder, ne možete raditi na taj način – to samo će se srušiti prije nego što čak i dobiti na pola puta gore. Tako ćete započeti sa inženjering crteža, učinjeno u inženjerskom uredu poput onog moja supruga radi na u središtu Bostona. Dok ona radi dizajn ona shvati sve probleme, dijelom matematičke analize, ali uglavnom pomoću građevinskih kodova. Građevinski propisi su propisi o tome kako dizajnirati strukture temelji se na iskustvu što radi (i neke temeljne matematike). Kada dizajn je učinio, a onda joj je inženjerska tvrtka može predati dizajn s drugom tvrtkom koja ga gradi.

Planirani dizajn u softver bi trebao raditi na isti način. Dizajneri misliti izvan velikih pitanja unaprijed. Oni ne trebaju pisati kod, jer oni ne grade softver, oni su ga projektiranje. Tako da oni mogu koristiti za dizajn tehnike poput UML koje dobiva od neke detalje programiranja i omogućuje dizajnerima da rade na više apstraktnoj razini. Nakon što je dizajn je učinjeno oni mogu uručiti posebnu skupinu (ili čak zasebna tvrtka) za izgradnju. Budući da su dizajneri mislili na većem mjerilu, oni mogu izbjeći niz taktičkih odluka koje dovode do softvera entropije. Programeri mogu pratiti smjer dizajna i, pod uvjetom da slijedite dizajn, imaju dobro izgrađen sustav

Sada planira pristup dizajnu je od oko 70, i puno ljudi koji su ga koristili. Bolje je na mnogo načina nego kod i popraviti evolucijski dizajn. Ali to ima neke nedostatke. Prva greška je da je nemoguće razmišljati kroz sve probleme koje morate baviti kada se programiranje. Dakle, to je neizbježno da prilikom programiranja ćete naći stvari koje propituju dizajn. Međutim, ako su dizajneri učinili, preselio na drugi projekt, što se događa? Programeri početi kodiranja oko dizajna i entropije seta u. Čak i ako je dizajner nije otišao, treba vremena da se sredite pitanja dizajn, promijeniti crteže, a zatim mijenjati kod. Tu je obično brže popraviti i vrijeme tlaka. Stoga entropija (opet).

Nadalje tu je često kulturno problema. Dizajneri su dizajneri zbog vještine i iskustvo, ali oni su toliko zauzet radi na nacrtima ne dobiju puno vremena da kod više. Međutim, alata i materijala promjena razvoja softvera se velikom brzinom. Kada više nije broj ne samo da možete propustiti na promjene koje se javljaju s ovim tehnološkim toka, također gube poštovanje onih koji to kod.

Ova napetost između graditelja i dizajnera događa u zgradi previše, ali to je intenzivniji u softver. To je intenzivan jer je ključna razlika. U izgradnji je jasnija podjela u vještinama između onih koji su dizajn i onih koji grade, ali u softver koji je manje slučaj. Svaki programer radi u visokim dizajn sredinama treba biti vrlo vješt. Dovoljno vješti u pitanje dizajnera dizajna, pogotovo kada dizajner je manje znanja o svakodnevnom stvarnosti razvojne platforme.

Sada su ti problemi mogu biti fiksne. Možda možemo nositi s ljudskom napetosti. Možda možemo dobiti dovoljno vješti dizajneri nositi s većinom problema i imati proces discipliniran dovoljno za promjenu crteže. Postoji još jedan problem: mijenja uvjete. Promjena zahtjevi su broj jedan veliki problem koji uzrokuje glavobolje u softverskim projektima koje srećem.

Jedan od načina da se bave promjenjive zahtjeve je izgraditi fleksibilnost u dizajnu, tako da možete lako promijeniti kao zahtjevi promijeniti. Međutim to zahtijeva uvid u kakvu promjene očekujete. Dizajn može se planirati da se bave područjima volatilnost, ali dok koji će vam pomoći za predviđeni zahtjevi promjene, to neće pomoći (a može povrijediti) za nepredviđene promjene. Dakle, morate razumjeti zahtjeve dovoljno dobro razdvojiti hlapljive područja, a moja primjedba je da je to jako teško.

Sada neki od tih problema zahtjevi su zbog nerazumijevanja zahtjeva dovoljno jasno. Dakle, puno ljudi se usredotočiti na zahtjeve tehničkih procesa kako bi dobili bolje uvjete u nadi da će to spriječiti potrebu za promjenom dizajna kasnije. Ali čak i to smjer je onaj koji se ne može dovesti do izlječenja. Mnogi nepredviđeni zahtjevi promjene događaju zbog promjena u poslovanju. Oni se ne mogu spriječiti, ali oprezni vašim zahtjevima inženjering proces.

Dakle, sve to čini planirani projekt zvuči nemoguće. Dakako, oni su veliki izazovi. Ali nisam sklon tvrditi da je planirani projekt je gori od evolucijskog dizajna kao što je najčešće prakticira u “kodu i popraviti” način. Doista sam radije planirali dizajn u “kodu i popraviti”. No svjestan sam problema planirana izrada i tražim novi smjer.

U omogućen Vježbe XP

XP je kontroverzno iz više razloga, ali jedan od ključnih crvene zastave u XP je da se zalaže za evolucijsku dizajn umjesto planiranog dizajn. Kao što znamo, evolucijski dizajn ne može raditi zbog ad hoc odlukama i dizajn softvera entropije.

U srži razumijevanja ovaj argument je krivulja softver promjena. Krivulja promjene, kaže da je kao projekat, ona postaje eksponencijalno skuplje za napraviti promjene. Krivulja promjene obično se izražava u smislu faza “promjene napravio u analizi za $ 1 bi koštati tisuća popraviti u proizvodnji”. To je ironično što je većina projekata još uvijek rade u ad-hoc proces koji nema jedan faze analize, ali eksponenciranje je još uvijek tamo. Eksponencijalna krivulja promjena znači da je evolucijski dizajn ne može raditi. Također se prenosi zašto planirani dizajn mora biti učinjeno pažljivo, jer sve pogreške u planiranom dizajn suočavaju isti eksponenciranje.

Temeljna pretpostavka podlozi XP je da je moguće spljoštiti krivulju dovoljno da bi evolucijski dizajn posao promjena. Ovaj sravnjenje je i omogućeno XP i iskorištavati XP. To je dio spojke od XP prakse: konkretno ne možete raditi one dijelove XP koje iskorištavaju spljoštena krivulju bez radiš one stvari koje omogućuju ravnanje. To je čest izvor kontroverzi oko XP. Mnogi ljudi kritiziraju eksploataciju bez razumijevanja omogućiti. Često kritike proizlaze iz kritičara vlastitog iskustva gdje nije učinio omogućavaju prakse koji omogućuju iskorištavaju prakse za rad. Kao rezultat toga što su se palile i kad vide XP oni sjetiti vatru.

Postoje mnogi dijelovi uz omogućuju praksi. U jezgri su postupci ispitivanja, i kontinuirano integracije. Bez sigurnosti koju pruža testiranje ostatak XP bi bilo nemoguće. Kontinuirano integracija je potrebno da bi tim u sync, tako da možete napraviti promjenu, a ne biti zabrinuti o povezivanju s drugim ljudima. Zajedno ove prakse mogu imati veliki utjecaj na krivulju promjene. Bio sam podsjetio na to opet ovdje na ThoughtWorks. Uvođenje ispitivanje i kontinuirano integracije imale značajno poboljšanje na razvoj napor. Dovoljno sigurno da se ozbiljno pitanje XP tvrdnju da je potrebno sve prakse da se veliki napredak.

Refactoring ima sličan učinak. Ljudi koji refactor svoj kod u discipliniran način sugerira XP pronašli značajne razlike u njihovoj učinkovitosti u usporedbi radiš blazi, više ad hoc restrukturiranje. To je svakako bio moje iskustvo nekad me Kent učio refactor ispravno. Uostalom, samo takva jaka promjena bi me motiviralo napisati cijelu knjigu o tome.

Jim Highsmith, u svom izvrsnom sažetku XP koristi analogiju skupa vage. U jednom ladica se planira dizajn, druga je refactoring. U tradicionalnim pristupima planirano dizajn dominira, jer pretpostavka je da ne može predomisliti kasnije. Kao troškovi promjene snižava onda možete učiniti više od vašeg dizajna kasnije kao refactoring. Planirani dizajn ne otići u potpunosti, ali je sada stanje dva dizajn pristupa raditi. Za mene ona se osjeća kao da je prije refactoring radim sve moje dizajn jednom rukom.

Ove omogućuju prakse kontinuiranog integracije, testiranje, i refactoring, osigurati novu okolinu koja čini evolucijski dizajn uvjerljivo. No jedna stvar mi još nije shvatio gdje je ravnoteža točka. Siguran sam da je, unatoč vanjskom dojmu, XP nije samo test, broj i refactor. Ima mjesta za dizajniranje prije kodiranja. Neki za to je prije nego što je bilo kodiranje, većina toga događa u iteracija prije kodiranja za određeni zadatak. No, tu je nova ravnoteža između up-front dizajn i refactoring.

Vrijednost jednostavnosti

Dvije najveće okupljanje plače u XP su parole “obaviti najjednostavnije da eventualno moglo raditi” i “ne ide na to Need” (poznat kao YAGNI). Obje su manifestacije XP praksi jednostavnog dizajna.

Način YAGNI obično opisuje, ona kaže da ne treba dodavati koda danas, koji će se koristiti samo značajka koja je potrebna sutra. Na prvi pogled to zvuči jednostavno. Pitanje dolazi s takvim stvarima kao okvira, iskoristivih komponenti i fleksibilan dizajn. Takve stvari su komplicirane za izgradnju. Možete platiti dodatnu up-front troškova ih graditi, u očekivanju da ćete dobiti natrag taj trošak kasnije. Ova ideja o izgradnji fleksibilnost up-front se vidi kao ključni dio učinkovitog softverskog dizajna.

Međutim XP savjet je da ne izgrade fleksibilne komponente i okvire za prvi slučaj koji treba da funkcionalnost. Neka te strukture rastu kao što su oni potrebni. Ako želim Money klasu danas da obrađuje dodatak, ali ne i množenje onda graditi samo dodatak u novca klasi. Čak i ako sam siguran da ću morati množenja u sljedećem iteracije, i shvatiti kako to učiniti jednostavno, a mislim da će biti jako brz za napraviti, i dalje ću ga ostaviti do tog sljedećeg iteraciju.

Jedan od razloga za to je ekonomska. Ako moram ništa raditi da se samo koristi za značajku koja je potrebna sutra, to znači da sam izgubio trud značajki koje treba učiniti za ovu iteraciju. Plan za oslobađanje kaže ono što treba biti izrađen na sada radi na drugim stvarima u budućnosti je u suprotnosti s ugovorom programere s kupcem. Postoji rizik da ove iteracije priče ne bi mogli obaviti. Čak i ako ove iteracije priče nisu u opasnosti da je do kupca da odluči što dodatni posao treba učiniti – i to još uvijek ne bi mogli uključiti razmnožavanje.

Ovaj ekonomski destimulira je složen i slučajno da mi ne može dobiti to pravo. No sigurno možemo biti o tome kako je ova funkcija radi, još uvijek možete dobiti u krivu – pogotovo jer nemamo detaljne zahtjeve još. Rad na pogrešnom rješenje rano je još razoran nego radi na pravo rješenje rano. A XPerts općenito vjeruju da smo mi mnogo više vjerojatno da će biti u redu od prava (i slažem se s tim mišljenjem.)

Drugi razlog jednostavnog dizajna je da kompleks dizajn je teže razumjeti od jednostavnog dizajna. Stoga svaka modifikacija sustava je napravio teže dodanu složenosti. To dodaje trošak u razdoblju kada je složeniji dizajn je dodana i kada je to potrebno.

Sada ovaj savjet pogađa puno ljudi što je besmislica, i oni su u pravu misliti da. Pravo uvjetom da li zamisliti uobičajenu razvojnu svijet gdje omogućuju prakse XP nisu na mjestu. Međutim, kada ravnotežu između planiranih i evolucijskim dizajn, mijenja, onda YAGNI postaje dobre prakse (i samo onda).

Dakle da rezimiram. Vi ne želite potrošiti trud dodavanje novih mogućnosti da neće biti potrebno do budućeg iteracije. A čak i ako je cijena je nula, i dalje ne želi ga dodati jer povećava troškove modifikacije, čak i ako to košta ništa za staviti u. Međutim, možete samo razumno ponašati na ovaj način, kada koristite XP ili sličnu tehnika koja smanjuje trošak promjene.

Što na Zemlji je jednostavnost svakom slučaju

Dakle, želimo da naša broj biti kao jednostavan kao moguć. To ne zvuči kao da je previše teško raspravljati jer, na kraju krajeva tko želi biti komplicirano? Ali, naravno, to navodi na pitanje: “Što je jednostavno?”

U XPe Kent daje četiri kriterija za jednostavan sustav. Radi (najvažniji prvi):

  • Pokreće sve testove
  • Ne umnožavanje
  • Otkriva svu namjeru
  • Najmanji broj sati ili metode

Trčanje sve testove je prilično jednostavan kriterij. Ne umnožavanje je prilično jednostavan, iako je puno programeri trebaju smjernice o tome kako to postići. Lukav jedan ima veze s otkriva namjeru. Što to točno znači?

Osnovna vrijednost je ovdje jasnoća koda. XP mjestima visoke vrijednosti na kodu koji se lako čita. U XP “pametan koda” je pojam zlostavljanja. No, neki ljudi namjera otkriva kod je tuđe pameti.

U svom XP 2000 papira, Josh Kerievsky ističe dobar primjer za to. Gleda možda najviše javnom XP kod svih – JUnit. JUnit koristi obrtnici dodati dodatnu funkcionalnost test slučajeva, takve stvari kao konkurentnosti sinkronizaciju i hrpa postavljanje koda. Izdvajanjem ovaj kod u dekorateri to vam uopće kod za biti jasnije nego što bi inače bio.

Ali, morate se zapitati, ako je rezultiralo kod je stvarno jednostavan. Za mene je to, ali onda sam upoznat s dekorater uzorak. No, za mnoge koji nisu to baš komplicirano. Slično JUnit koristi plug metode koje sam primijetio većina ljudi u početku naći ništa, ali jasan. Tako bismo mogli zaključiti da JUnit dizajn je jednostavnije za iskusne dizajnere, ali kompliciraniji za manje iskusne ljude?

Mislim da je fokus na uklanjanju dupliciranje, kako s XP-a “, jednom i samo jednom” i pragmatički programere SUHIM (Nemojte sami ne Repeat) je jedan od onih očitih i čudesno moćnih komada dobar savjet. Samo slijedi da jedino može vas dug put. Ali to nije sve, i jednostavnost je i dalje komplicirana stvar za pronaći.

Nedavno sam bio uključen u događaj nešto što može biti dobro pretjerano dizajniran. On je dobio refactored a neki fleksibilnosti uklonjen. No, kao jedan od developera je rekao “da je lakše refactor nad-dizajn nego što je to refactor ne dizajn.” To je najbolje da se malo jednostavnije nego što je potrebno da bude, ali to nije katastrofa da se malo složeniji.

Najbolji savjet sam čuo na sve ovo došla iz strica Boba (Robert Martin). Njegov je savjet bio da ne dobijete previše objesio o tome što najjednostavniji dizajn je. Uostalom možete, treba, i da će ga refactor kasnije. Na kraju spremnost da refactor je puno važnije od znajući što najjednostavnije je odmah.

Da li refactoring Narušiti YAGNI?

Ova tema je došao gore na popisu XP mailing zadnje vrijeme, a to vrijedi ističući kako gledamo ulogu dizajna u XP.

Uglavnom pitanje počinje točke da refactoring treba vremena, ali ne dodati funkciju. Budući da točka YAGNI je da ste trebali dizajn za ne postoji za budućnost, je li to kršenje?

Točka YAGNI je da ne dodate složenost koja nije potrebna za tekuće priče. To je dio praksi jednostavnog dizajna. Refactoring je potrebno da bi se dizajn kao jednostavan kao što možete, tako da bi trebao refactor kad god shvatite da može učiniti što jednostavnije.

Jednostavan dizajn i iskorištava XP prakse, a također omogućuje praksa. Samo ako imate testiranje, kontinuirani integracija, i refactoring možete vježbati jednostavan dizajn učinkovito. No, istodobno održavajući dizajn jednostavan je bitno za održavanje krivulje promjene stana. Svaki nepotreban složenosti čini sustav teže promijeniti u svim smjerovima osim onog što predvidjeti sa složenim fleksibilnost ste stavili u. No ljudi nisu dobri u predviđanja, tako da je najbolje da se zalagati za jednostavnost. No ljudi neće dobiti najjednostavnije prvi put, tako da ćete morati refactor kako doći bliže cilju.

Obrasci i XP

JUnit primjer mene neizbježno vodi u odgoju uzoraka. Odnos između uzoraka i XP je zanimljiva, a to je zajednički pitanje. Jošua Kerievsky tvrdi da uzorci su pod-naglasio je u XP i on čini argument elokventno, pa ne želim ponoviti da. Ali to vrijedi imajući na umu da je za mnoge ljude obrasci izgledaju u sukobu na XP.

Suština ovog argumenta je da uzorci često pretjerano koriste. Svijet je pun legendarni programer, svježe off njegova prvog čitanja GOF koji uključuje šesnaest obrasce u 32 linija koda. Sjećam se jedne večeri, potaknut vrlo lijepo jedinstvenog viskija, trčanje kroz s Kent papir da se zove “Ne dizajn obrazaca: 23 jeftine trikove” Bili smo razmišljati o takvim stvarima kao što je korištenje, ako izjava nego strategija. Vic je imao točku, obrasci često prekomjerno, ali to ne bi ih loša ideja. Pitanje je kako ih koristiti.

Jedna teorija to je da su snage jednostavnog dizajna će vas dovesti u uzorcima. Mnogi refactorings to izričito, ali i bez njih slijedeći pravila jednostavnog dizajna ćete se s uzorcima, čak i ako ih ne znaš već. To može biti istina, ali to je stvarno najbolji način to radiš? Sigurno je bolje ako znate otprilike kamo idete i imate knjigu koja vam može pomoći kroz probleme, umjesto da se sve to izmislili sami. Ja sigurno još posegnuti za GOF, kad god se osjećam uzorak dolazi na. Za mene učinkovit dizajn tvrdi da moramo znati cijena uzorak isplati plaćati – to je njegova vlastita vještina. Isto tako, kao što je Jošua sugerira, moramo biti više upoznati o tome kako olakšati u uzorak postupno. U tom smislu XP tretira način koristiti obrasce različito na način neki ljudi ih koriste, ali sigurno ne ukloni njihovu vrijednost.

No, čitajući neke od mailing liste ću dobiti jasan osjećaj da se mnogi ljudi vide XP kao obeshrabrujući uzoraka, unatoč ironija da većina zagovornika XP bili vođe pokreta obrazaca previše. Je li to zato što su vidjeli izvan obrazaca, ili zato obrasce tako da su ugrađeni u svom razmišljanju da više ne shvatite? Ne znam odgovore za druge, ali za mene uzorci su još uvijek vitalne važnosti. XP može biti proces razvoja, ali obrasci su okosnica dizajn znanja, spoznaja da je vrijedna bez obzira na proces može biti. Različiti postupci mogu koristiti obrasce na različite načine. XP naglašava kako ne koristite obrazac dok je to potrebno i razvija svoj put u uzorak putem jednostavnog provedbu. No, uzorci su i dalje ključni dio znanja kako bi stekli.

Moj savjet XPers pomoću obrazaca će biti

  • Ulagati vrijeme u učenje o obrascima
  • Usredotočite se kada primijeniti uzorak (ne prerano)
  • Usredotočite se na tome kako provesti uzorak u svom najjednostavnijem obliku, a zatim dodajte složenost kasnije.
  • Ako stavite uzorak u, a kasnije shvatili da se ne vuče svoju težinu – nemojte se bojati da ga ponovo.

Mislim XP treba naglasiti učenje o obrascima više. Nisam siguran kako bih odgovarao da je u praksi XP-a, ali siguran sam da je Kent može smisliti način.

Uzgoj arhitektura

Što to znači za softver arhitekture? Za mene pojam arhitektura prenosi pojam temeljnih elemenata sustava, dijelove koje je teško promijeniti.Temelj na kojem treba graditi ostatak.

Koja je uloga arhitekture igrati kada koristite evolucijski dizajn? Opet XPS kritičari tvrde da je XP zanemaruje arhitekturu, da je XP-a ruta je otići do kodirati brzo i vjerujte da refactoring koji će riješiti sve probleme dizajna. Zanimljivo da su u pravu, a to može biti i slabost. Svakako najagresivniji XPers – Kent Beck, Ron Jeffries, a Bob Martin – stavljajući sve više i više energije u izbjegavanju bilo unaprijed arhitektonski dizajn. Nemojte staviti u bazu podataka, sve dok ne znam da ćete ga trebate. Rad s datotekama prvi i refactor baze podataka u vrijeme kasnije iteracije.

Moj kolega Neal Ford je zaronio dublje u tehnikama za evolucijski dizajn u petnaest članka serije za IBM developerWorks. On je također zaronio u video s radionice o agilnim inženjering praksi za O’Reilly.

Ja sam poznat po tome što je kukavički XPer, i kao takav moram da se ne slažu. Mislim da je uloga širokog polazište arhitekture. Takve stvari kao navodeći rano kako sloj primjene, kako ćete komunicirati sa bazom podataka (ako je potrebna jedna), što je pristup koristiti za rukovanje web poslužitelja.

U biti mislim da su mnogi od tih područja su obrasci koje smo naučili tijekom godina. Kao što je vaše znanje o obrascima raste, te bi trebao imati razumnu prvi se na tome kako ih koristiti. No ključna razlika je u tome što su ti rani arhitektonski odluke ne očekuje da će biti postavljen u kamenu, odnosno tima zna da oni mogu pogriješiti u svojim ranim odluka i treba imati hrabrosti da ih popraviti. Drugi su rekli priču o jednom projektu koji, u neposrednoj blizini implementacije, odlučio da ne treba EJB više i ukloniti iz svog sustava. To je bio značajan refactoring, to je učinjeno kasno, ali omogućujući prakse napravio to ne samo moguće, ali isplati.

Kako bi to radili obrnuto. Ako ste odlučili ne koristiti EJB, to će biti teže ga dodati kasnije? Ukoliko tako nikada početi s EJB dok ste pokušali stvari bez i našao ga nedostaje? To je pitanje koje uključuje mnoge čimbenike. Dakako, radi bez složene komponente povećava jednostavnost i čini stvari idu brže. No ponekad je lakše istrgnuti nešto, nego što je to staviti u.

Dakle, moj savjet je da se početi procjenu što vjerojatno arhitektura. Ako vidite veliku količinu podataka s više korisnika, ići naprijed i koristiti bazu podataka od dana 1. Ako vidite složenu poslovnu logiku, staviti u modelu domene. No iz poštovanja prema bogovima YAGNI, kada su u nedoumici griješiti na strani jednostavnosti. Također budite spremni pojednostaviti arhitekturu čim vidite da je dio arhitekture nije dodao ništa.

UML i XP

Od svih pitanja koja sam se o mojoj povezanosti s XP jedan od najvećih vrti oko moje povezanosti s UML. Nisu dva nespojiva?

Postoji nekoliko točaka nespojivosti. Dakako XP de-naglašava dijagrame u velikoj mjeri. Iako je službeni stav je na tragu “ih koristiti ako su korisni”, postoji snažna podtekst “pravi XPers ne radim dijagrama”. To je pojačan činjenicom da su ljudi poput Kent nisu uopće ugodno s dijagramima, zapravo nikad nisam vidio Kent dobrovoljno nacrtati dijagram softvera na bilo koji fiksni notaciji

Mislim da problem dolazi iz dva odvojena uzroka. Jedan od njih je činjenica da neki ljudi smatraju softver dijagrame pomoći a neki ljudi ne. Opasnost je u tome što oni koji ne misle da su oni koji ne bi trebali činiti i obratno. Umjesto toga, samo treba prihvatiti da će se neki ljudi koriste dijagrami a neki neće.

Drugi problem je u tome što softver dijagrame imaju tendenciju da se povezuje s teškoj procesu. Takvi procesi provode puno vremena za crtanje dijagrama koji ne pomažu, a zapravo može uzrokovati štetu. Dakle, mislim da bi ljudi trebali biti obaviješteni kako koristiti dijagrame dobro i izbjeći zamke, a ne “samo ako se (Wimp)” poruke koje obično dolazi iz XPerts.

Dakle ovdje je moj savjet za dijagrame dobro.

Prvo imajte na umu ono što crtanje dijagrama za. Primarna vrijednost komunikaciju. Učinkovita komunikacija znači odabiru važne stvari i zanemarujući manje važno. Ova selektivnost je ključ za korištenje UML dobro. Nemojte izvlačiti svaku klasu – samo važne one. Za svaku klasu, ne pokazuju svaki atribut i rad – samo važne one. Nemojte crtati dijagrame slijed za sve slučajeve korištenja i scenarija – samo … da dobijete sliku. Čest problem sa zajedničkim korištenje dijagrama je da ljudi pokušavaju da ih konačan. Kod je najbolji izvor sveobuhvatne informacije, kao kod je najlakše držati u sync sa kodom. Za dijagramima sveobuhvatnosti je neprijatelj razumljivosti.

Zajedničko korištenje dijagrama je istražiti dizajn prije nego što počnete kodiranja. Često ste dobili dojam da je takva aktivnost je nezakonit u XP, ali to nije istina. Mnogi ljudi kažu da kad imate ljepljivu zadatak je vrijedan uzimajući zajedno imati brz dizajn sjednicu na prvom mjestu. Međutim, kada radite takve sjednice:

  • držati ih kratko
  • ne pokušati riješiti sve detalje (samo važne one)
  • liječenje nastalu dizajn kao skica, ne kao konačni dizajn

Posljednja točka je vrijedan širi. Kada učiniti neke up-front dizajn, vi ćete neminovno da neki aspekti dizajna su u krivu, a vi samo otkriti ovo kad kodiranja. To nije problem s tim da onda promijeniti dizajn. Problem dolazi kad ljudi misle dizajn je učinjeno, a onda ne uzeti znanje su stekli kroz kodiranje i pokrenite ga natrag u dizajnu.

Promjena dizajn ne mora nužno značiti promjenu dijagrama. To je savršeno razumno izvući dijagrame koji će vam pomoći razumjeti dizajn, a zatim baciti dijagrame daleko. Ih Crtanje pomogao, a to je dovoljno da ih isplati. Oni ne moraju postati stalni artefakti. Najbolji UML dijagrami nisu artefakti.

Puno XPers koristiti CRC kartice. To nije u sukobu s UML. Koristim mješavinu CRC i UML svih vremena, koristeći ovisno tehnika je vrlo korisno za posao u ruke.

Još korištenje UML dijagrama je u tijeku dokumentaciju. U svom uobičajenom obrascu to je model koji žive na slučaj alat. Ideja je da se održavanju te dokumentacije pomaže ljudima raditi na sustavu. U praksi to često ne pomaže uopće.

  • to traje predugo zadržati dijagrame do danas, tako da oni ispadaju iz sync sa kodom
  • oni su skriveni u slučaju alat ili debeli veziva, tako da nitko ne gleda njih

Dakle, savjet za trajne dokumentacije traje od tih uočenih problema:

  • Koristite samo dijagrame koje možete zadržati do datuma bez primjetnog boli
  • Stavite dijagrama gdje svatko može lako vidjeti. Volim ih postavljati na zid. Potaknite ljude da uredili zid kopiju s olovkom za jednostavne promjene.
  • Obratite pozornost da li ljudi ih koristi, ako ih ne bacaju.

Posljednji aspekt pomoću UML je za dokumentaciju u primopredaje situaciji, kao što je kada je jedna skupina preda drugome. Ovdje XP stvar je da proizvodi dokumentacije korisnički priča kao i svaki drugi, a time i njegova poslovna vrijednost određuje kupca. Opet UML je korisno ovdje, pod uvjetom da su dijagrami su selektivni pomoći komunikaciju. Zapamtite da je kod spremište detaljnije informacije, dijagrami djeluju sažeti i istaknuti važna pitanja.

Na metafora

Dobro sam kao što bi i to reći javno – ja još uvijek nisam dobio dokučiti ove metafore stvar. Vidio sam to raditi, i rade dobro na C3 projektu, ali to ne znači da imam bilo kakvu ideju kako to učiniti, a kamoli kako objasniti kako to učiniti.

XP praksa metafora je izgrađen na odjelu Cunninghams pristupa sustava imena. Stvar je u tome što se s poznatom skupu imena koja djeluje kao vokabular razgovarati o domeni. Ovaj sustav naziva igra u način imenujete klase i metode u sustavu

Ja sam izgradio sustav imena izgradnjom konceptualni model domene. Ja sam to učinio sa stručnjacima domena pomoću UML ili njegove prethodnike. Našao sam da morate biti oprezni to. Trebate nastaviti s minimalnom jednostavan skup zapisa, i imate kako bi zaštitio protiv dopuštajući bilo tehničkih problema puzanje u model. Ali ako to sam otkrio da to mogu upotrijebiti za izgradnju vokabular domene koje stručnjaci domena može razumjeti i koristiti za komunikaciju s programerima. Model ne odgovara klase dizajna savršeno, ali to je dovoljno da zajednički rječnika za cijelu domenu.

Sada ne vidim ni jedan razlog zašto se to vokabulara ne može biti metaforički jedan, kao što je C3 metafora koji se pretvorio plaće u tvornicu proizvodne linije. Ali ja ne vidim zašto temeljeći svoj sustav imenima na vokabularu domene je takva loša ideja bilo. Niti sam sklon napustiti tehniku ​​koja dobro radi za mene u dobivanju sustav imena.

Često ljudi kritiziraju XP na temelju koje je potrebno učiniti barem neki nacrt dizajn sustava. XPers često odgovoriti odgovor “to je metafora”. Ali ja i dalje ne mislim da sam vidio metafora objasnio na uvjerljiv način. To je stvarni jaz u XP, a jedan da XPers potrebno izdvojiti.

Da li želiš biti arhitekta kad odrasteš?

Za veći dio prošlog desetljeća, pojam “softver arhitekt” je postao popularan. To je pojam koji je teško osobno za mene to koristiti. Moja supruga je građevinski inženjer. Odnos između inženjera i arhitekata je … zanimljivo. Moja omiljena je “arhitekti su dobri za tri B-a: svjetiljke, grmovi, ptice”. Ideja je da arhitekti dolaze sa svim tim lijepim crtežima, ali to su inženjeri koji su kako bi se osiguralo da su oni zapravo mogu ustati. Kao rezultat toga sam izbjegavao pojam softver arhitekt, nakon svega, ako moja supruga ne može me tretirati s poštovanjem profesionalnom koja je šansa da ja stojim s kim?

U softveru, pojam arhitekt znači mnogo stvari. (U softvera svaki izraz koji znači mnogo stvari.) Općenito, no to prenosi određene poigravanja, kao u “Ja nisam samo puka programer – Ja sam arhitekt”. To može prevesti: “Ja sam arhitekt sada – ja sam previše važno napraviti bilo programiranje”. Pitanje onda postaje jedna od li se odvojio od mondene programiranja trud je nešto što bi trebalo učiniti kada želite ostvariti tehničke vodstvo.

Ovo pitanje generira ogromnu količinu emocija. Vidio sam ljudi vrlo ljut na misao da oni nemaju ulogu više što su arhitekti. “Nema mjesta u XP za iskusne arhitekte” često krik čujem.

Koliko u ulozi samog dizajna, ja ne mislim da je slučaj da XP ne cijenim iskustvo ili dobar dizajn vještine. Doista mnogi od zagovornika XP – Kent Beck, Bob Martin, i naravno Ward Cunningham – su oni od kojih sam naučio mnogo o tome što je dizajn o tome. No to ne znači da je njihova uloga mijenja od onoga što puno ljudi vidi kao ulogu tehničkog vodstva.

Kao primjer ću navesti jednu od naših tehničkih lidera u ThoughtWorks: Dave Rice. Dave je kroz nekoliko životnih ciklusa, te je preuzeo neslužbeni plašt tehničke vode na pedesetak osoba projekt. Njegova uloga vođe znači trošiti puno vremena sa svim programera. On će raditi s programer, kada im je potrebna pomoć, on gleda okolo da vidi tko treba pomoć. Značajan je znak gdje sjedi. Kao dugoročno ThoughtWorker, mogao prilično dobro imati ured je volio. On je dijelio jedan za neko vrijeme s Čara, oslobađanje menadžer. Međutim, u posljednjih nekoliko mjeseci on je iselio u otvorene uvala gdje programeri rade (pomoću otvorene “ratne sobe” stil koji XP pogoduje.) To je važno za njega jer je to način na koji on vidi što se događa, a dostupan je posuditi ruku gdje god je to potrebno.

Oni koji znaju XP će shvatiti da sam opisujući eksplicitan XP ulogu trenera. Doista jedan od nekoliko igara s riječima da je XP čini se da je zove vodeću tehničku lik “trener”. Značenje je jasno: u XP tehničkom vodstvu je prikazano uče programera i pomažući im donositi odluke. To je onaj koji zahtijeva dobre sposobnosti ljudi, kao i dobre tehničke vještine. Jack Bolles na XP 2000 komentirao da je malo prostora za sada jedine gospodara. Suradnja i poučavanje ključni su za uspjeh.

Na konferencijsku večeru, Dave i ja razgovarali s vokalne protivnik XP. Kao što smo razgovarali što smo učinili, sličnosti u našem pristupu prilično su označene. Mi smo svi voljeli adaptivni, iterativni razvoj. Ispitivanje je važno. Tako smo bili zbunjeni na žestini njegovog protivljenja. Onda je došao njegov iskaz, po uzoru na “zadnje što želim je moj programeri refactoring i monkeying okolo s dizajnom”. Sada je sve jasno. Konceptualni jaz dodatno je objašnjen Dave kaže mi nakon toga “ako ne vjerujete njegove programera zašto ih zaposliti?”. U XP najvažnije iskusni programer može učiniti je proći na što više znanja što on može na više junior developera. Umjesto arhitekta koji čini sve važne odluke, imate trenera koji uči programerima da donositi važne odluke. Kao Ward Cunningham je istaknuo, tako da pojačava svoje vještine, i dodaje više projekt nego bilo usamljeni junak može.

Preokretljivost

Na XP 2002 Enrico Zaninotto dao fascinantan razgovor koji su raspravljali o kravata-ins između agilnih metoda i lean proizvodnjom. Njegovo je mišljenje da je jedan od ključnih aspekata oba pristupa je da su rješavati složenost smanjujući trajne u procesu.

U tom pogledu jedan od glavnih izvora kompleksnosti Nepovrativost odluka. Ako možete jednostavno promijeniti svoje odluke, to znači da je manje važno ih dobiti pravu – što čini vaš život mnogo jednostavniji. Posljedica za evolucijske dizajn je da dizajneri moraju razmišljati o tome kako oni mogu izbjeći trajne u svojim odlukama. Umjesto da pokušavate dobiti pravu odluku danas, tražiti način kako bi bilo odgoditi odluku do poslije (kad ćete imati više informacija) ili donijeti odluku na takav način da ćete biti u mogućnosti da ga preokrenuti kasnije bez previše poteškoća.

Ova odluka za potporu reverzibilnost je jedan od razloga da agilne metode staviti puno naglaskom na sustave kontrole izvornog koda, i stavljajući sve u takvom sustavu. Dok se to ne jamči reverzibilnost, osobito za čeznuo-živjeli odluka, to ne daju temelj koji daje povjerenje tima, čak i ako se rijetko koristi.

Projektiranje za reverzibilnosti podrazumijeva proces koji čini pogreške prikazuju se brzo. Jedna od vrijednosti iterativnog razvoja je da se brzo iteracija omogućiti korisnicima da vide sustava kao što raste, a ako je pogreška u uvjetima može biti uočena i fiksne prije nego što je trošak učvršćivanje postaje previsoki. Taj isti brzo uočavanje je također važno za dizajn. To znači da morate postaviti stvari tako da potencijalni problematična područja brzo su testirani da se vidi što problemi stižu. To također znači da je vrijedno radili pokuse vidjeti kako je teško buduće promjene može biti, čak i ako ne zapravo čine stvarnu promjenu sada – učinkovito radi aut daleko prototip na grani sustava. Nekoliko momčadi su izvještavanje isprobavati buduće promjene rano prototipa modu vidjeti kako je teško bi bilo

Hoće li za dizajn

Dok sam koncentrirana puno tehničkih prakse u ovom članku, jedna stvar koja je previše lako otići van je ljudski aspekt.

Kako bi se raditi, evolucijski dizajn treba sila koja pokreće da konvergiraju. Ta sila može doći samo od ljudi – netko na tim mora imati odlučnost kako bi se osiguralo da je kvaliteta dizajna ostaje visoka.

To će ne mora doći od svih (iako je to lijepo ako to ne), obično samo jedna ili dvije osobe na tim preuzeti odgovornost vođenja dizajn cjelinu. To je jedan od zadataka koji su obično spada pod pojam ‘arhitekta’.

Ova odgovornost podrazumijeva vođenje stalan nadzor baze koda, u potrazi za vidjeti ako se bilo područja uzimajući u neredu, a zatim se brzo djelovanje da se riješi problem prije nego izmakne kontroli. Čuvar dizajn ne mora biti onaj tko ga popravlja – ali oni ne moraju osigurati da se dobiva fiksne netko.

Nedostatak volje za dizajn čini se da je glavni razlog zašto je evolucijski dizajn može uspjeti. Čak i ako su ljudi upoznati sa stvari koje sam govorio o tome u ovom članku, bez koje će dizajnirati neće se održati.

Stvari koje je teško refactor u

Možemo koristiti refactoring baviti svim dizajnerske odluke, ili postoje neka pitanja koja su toliko sveprisutni da ih je teško dodati kasnije? U ovom trenutku, XP pravovjernost je da je sve lako dodati, kada ih trebate, tako YAGNI uvijek vrijedi. Pitam se, ako postoje iznimke. Dobar primjer nečega što je sporno dodati kasnije je internacionalizacija. Je li to nešto što je takva bol dodati kasnije da bi trebali početi s njom odmah?

Ja lako mogu zamisliti da postoje neke stvari koje bi spadaju u ovu kategoriju. No stvarnost je da još uvijek imamo vrlo malo podataka. Ako imate nešto dodati, kao što su internacionalizacija, kasnije ste vrlo svjesni napora koje je potrebno učiniti. Ti si manje svjestan napor da bi zapravo uzeti, tjedan dana nakon tjedan dana, da ga i održavati ga prije nego što je zapravo potrebno. Također ste manje svjesni činjenice da ste svibanj dobro imati je dobio to krivo, i time je potrebno učiniti neke refactoring svejedno.

Dio opravdanosti YAGNI je da su mnogi od tih potencijalnih potreba završiti ne bude potrebno, ili barem ne na način na koji biste očekivali. Do njih se ne radi, da ćete uštedjeti dosta truda. Iako će se napor potreban za refactor jednostavno rješenje u ono što vam zaista treba, to refactoring je vjerojatno da će biti manje posla od izgradnje sve upitne značajke.

Drugi problem je imati na umu je to da li vi stvarno znate kako to učiniti. Ako ste učinili internacionalizacije nekoliko puta, tada ćete znati obrasce koje je potrebno zaposliti. Kao takav si više vjerojatno da će dobiti to pravo. Dodavanje predviÿanja strukture je vjerojatno bolje, ako ste u tom položaju, nego ako ste novi problem. Dakle, moj savjet bi bio da ako ne znate kako to učiniti, da ste u poziciji suditi troškove radi sada radi kasnije. Međutim, ako ne sam to učinio prije, a ne samo se ne mogu procijeniti troškove dovoljno dobro, ti si također manje vjerojatno da će to učiniti dobro. U tom slučaju treba dodati naknadno. Ako ne dodati tada, a smatraju ga bolno, vjerojatno ćete se bolje nego što bi bio da ga rano dodao je. Vaš tim je iskusniji, znate domene bolje, i da razumijete zahtjeve bolje. Često se u ovom položaju se osvrnem na koliko je lako bi bilo s 20/20 neopreznost. To može biti mnogo teže ga dodati prije nego što mislite.

Kad smo počeli naše putovanje u evolucijskom dizajna na ThoughtWorks smo trčali ravno u pitanje da li je moguće dizajnirati podataka u evolucijski način. Zahvaljujući naporima Pramod Sadalage, otkrili smo da je to jasno moglo biti, a to znanje nas je stajao u dobro mjesto od tada. Za više informacija možete pročitati u članku u kojem smo uveli ove tehnike u svijetu na mom mjestu.

To također kravate u pitanje o uređenju priče. U planiranje XP, Kent i ja otvoreno pokazuje naše neslaganje. Kent je u korist ostavljajući poslovna vrijednost biti jedini čimbenik u vožnji naručivanje priče. Nakon početne nesuglasice Ron Jeffries danas slaže s tim. Ja sam još uvijek nesigurni. Vjerujem da je ravnoteža između poslovne vrijednosti i tehničkih rizika. To bi me odvesti pružiti barem neke internacionalizaciju rano ublažiti taj rizik. Međutim, ovo je samo vrijedi ako je potrebno internacionalizacija za prvo izdanje. Uzimajući u izdanju što je brže moguće je od vitalne važnosti. Sve dodatne složenost je vrijedno radi nakon tog prvog objavljivanja, ako to nije potrebno za prvo izdanje. Snaga isporučen, trčanje kod je ogroman. Ona je usredotočena pozornost kupaca, raste vjerodostojnost, te je masivni izvor učenja. Učinite sve što možete kako bi taj datum bliži. Čak i ako je više napora kako bi dodali nešto nakon prvog objavljivanja, bolje je pustiti prije.

Sa svakom novom tehnikom da je prirodno da su njezini zagovornici sigurni njezinih rubnih uvjeta. Većina XPers su rekli da je evolucijski dizajn je nemoguće za određeni problem, samo da otkrijete da je to doista moguće. To Osvajanje “nemogućih” situacija dovodi do povjerenjem da sve takve situacije mogu biti prevladana. Naravno da ne može napraviti takvu generalizaciju, ali do XP zajednica hits granice i ne uspije, mi nikada ne može biti siguran gdje ti granice lagati, i to je u redu pokušati gurnuti izvan potencijalne granica da i drugi mogu vidjeti.

(Nedavnom članku Jim Shore govori o nekim situacijama, uključujući i internacionalizacije, gdje potencijalni granice ispostavilo da ne bude prepreka nakon svega.)

Je dizajn događa?

Jedna od poteškoća evolucijske dizajna je da je vrlo teško reći je li projekt zapravo događa. Opasnost od ispreplitanja dizajn programiranje je da programiranje može dogoditi bez dizajna – to je situacija u kojoj Evolucijska Dizajn odstupa i ne.

Ako ste u razvojnom timu, onda ste osjetiti da li dizajn se događa kvalitetom baze koda. Ako je baza broj postaje složeniji i teško raditi, nema dovoljno dizajn uzimajući učinili. Ali nažalost to je subjektivno gledište. Nemamo pouzdane podatke koji nam mogu dati objektivan pogled na kvalitetu dizajna.

Ako ovaj nedostatak vidljivosti teško za tehničke osobe, to je daleko više alarmantno za ne-tehničke članova tima. Ako ste menadžer ili kupca kako možeš reći ako je softver je dobro osmišljen? Važno je da vas zbog loše osmišljen program će biti skuplji za izmjenu u budućnosti. Nema jednostavnog odgovora na ovo, ali evo nekoliko savjeta.

  • Slušajte tehničkim ljudi. Ako se žale na poteškoće promjene, onda se takve pritužbe ozbiljno i dati im vremena za popraviti stvari.
  • Držite oko na tome koliko kod se baca. Projekt koji se zdravo refactoring će se stalno brisanje loše kod. Ako ništa ne uzimajući izbrisani onda je gotovo sigurno znak da nema dovoljno refactoring događa – što će dovesti do degradacije dizajn. No kao i svaki metrički to može biti zlostavljani, mišljenje dobrih tehničkih ljudi adut bilo metriku, unatoč svojoj subjektivnosti.

Tako je dizajn mrtav?

Ne bilo koji način, ali priroda dizajna promijenila. XP dizajn izgleda za sljedeće vještine

  • Stalna želja da zadrži kod kao jasan i jednostavan kao moguć
  • Refactoring vještine tako da možete pouzdano napraviti poboljšanja kad god vidim potrebu.
  • Dobro poznavanje obrazaca: ne samo rješenja, ali i cijeni kada ih koristiti i kako da se razvije u njima.
  • Projektiranje s okom na buduće promjene, znajući da se odluke koje će sada morati mijenjati u budućnosti.
  • Znajući kako komunicirati dizajn za ljude koji trebaju shvatiti, pomoću koda, dijagrami i iznad svega: razgovor.

To je zastrašujući izbor vještina, ali onda se dobar dizajner je uvijek bio tvrd. XP zapravo ne bi ga bilo lakše, barem ne za mene. Ali mislim da XP ne daju nam novi način razmišljanja o učinkovitom dizajnu, jer je napravio evolucijski dizajn uvjerljivo strategiju opet. I ja sam veliki obožavatelj evolucije – inače tko zna što bi moglo biti?

Zahvale

Tijekom posljednjih nekoliko godina sam podigao i ukrao mnoge dobre ideje od mnogih dobrih ljudi. Većina od njih su izgubljeni u tami mog sjećanja. Ali ja sjećam štipanje dobre ideje od Joshua Kerievsky. Sjećam se mnoge korisne komentare Fred George i Ron Jeffries. Ja također ne mogu zaboraviti koliko dobre ideje stalno dolaze iz Ward i Kenta.

Uvijek sam zahvalan za sve one koji postavljaju pitanja i spot pri upisu. Ja sam bio slab o održavanju popisa tih potvrditi, ali oni ne uključuju Craig Jones, Nigel Thorne, Sven Gorts, Hilary Nelsona, Terry tvrdava.

Daljnje Čitanje

Za više članaka koji govore o mom pristupu softverskog dizajna, pogledajte moje web vodič stranicu softverskog dizajna. Ona sadrži članke koji dodiruju o važnim aspektima evolucijski dizajn, kao što su evolucijski dizajn baze podataka i ugovora servis sučelja.

Za više detalja o evolucijskim tehnikama, pogledajte Neal Fordovoj developerWorks serije i Video radionica.

Značajne Izmjene

Svibnja 2004: Dodano poglavlja o “volji za dizajn ‘,’ reverzibilnost ‘i’ Je dizajn Happening

Veljače 2001: Članak ažurirana s dijelovima o rastu arhitekturu, ulogu arhitekta, i gdje su stvari koje je teško dodati u refactoring.

Srpanj 2000: Izvorni članak dostavljen XP 2000. godine i objavljena na martinfowler.com