Dezvoltarea agilă de programe

Dezvoltarea flexibilă de programe este o familie de metodologii de project management în ingineria software, bazată pe dezvoltarea incrementală și care îmbrățișează și promovează schimbările ce evoluează de-a lungul întregului ciclu de viață al unui proiect. Aceste metodologii se caracterizează prin divizarea problemei în subprobleme mici și planificarea lor pe durate scurte. Se evită planificarea în detaliu pe termen lung, deoarece inerent în dezvoltarea de software apar întârzieri frecvente din cauza schimbărilor și detalierii cerințelor clientului. Scopul principal este ca, la terminarea fiecărui ciclu de dezvoltare (denumit iterație, și a cărui durată este de obicei ordinul câtorva săptămâni) să existe o versiune cât de cât funcțională (deși incompletă) a software-ului dezvoltat (cu număr minim de buguri).

O altă caracteristică importantă este comunicarea frecventă între membrii echipei, care, în multe cazuri, se întâlnesc într-o scurtă ședință zilnică, denumită stand-up sau scrum (pronunțat /scrʌm/) în care fiecare prezintă pe scurt progresul său în ultima zi de lucru și problemele cu care s-a confruntat. Acestora li se alătură și un reprezentant al clientului, care trebuie să fie informat de aspectele dezvoltării, pentru a ști ce modificări este realist să ceară și cât de mult ar putea costa ele. Astfel, toată lumea are cunoștințe despre fiecare aspect al dezvoltării aplicației și poate prelua munca altuia sau ajuta pe altcineva.

Dezvoltarea flexibilă de programe promovează planificarea adaptivă, dezvoltare evolutivă, livrarea rapidă, îmbunătățirea continuă, și încurajează răspunsul rapid și flexibil la schimbări.[1] Este un cadru conceptual care se concentrează pe furnizarea de software funcțional cu un minimum de muncă.[2] [3][4]

Agile Manifesto, manifestul care a enunțat pentru prima dată conceptele care stau la baza dezvoltării agile, a introdus termenul în 2001.[5]

Principiile flexibile modificare

Agile Manifesto se bazează pe douăsprezece principii:[6]

  1. Satisfacția clientului prin livrarea rapidă de software util
  2. Accent pe cerințele de schimbare, chiar și într-o etapă târzie a dezvoltării
  3. Software funcțional este livrat frecvent (săptămâni, mai degrabă decât luni)
  4. Cooperarea strânsă, zilnică, între oamenii de afaceri și dezvoltatori
  5. Proiectele sunt construite în jurul persoanelor motivate, care ar trebui să fie de încredere
  6. Conversația față în față este cea mai bună formă de comunicare (co-locație)
  7. Software funcțional este măsura principală a progresului
  8. Dezvoltarea durabilă, în măsură să mențină un ritm constant
  9. O atenție continuă pentru excelență tehnică și design bun
  10. Simplitatea – arta de a maximiza volumul de muncă în lucru – este esențială
  11. Echipe auto-organizate
  12. Adaptarea periodică a circumstanțelor în schimbare

Prezentarea generală modificare

 
Programarea în doi, o tehnică de dezvoltare flexibilă folosită de Extreme Programming.

Există mai multe metode specifice de dezvoltare flexibilă. Cele mai multe promovează dezvoltarea, munca în echipă, colaborarea, și adaptabilitatea procesului pe tot parcursul ciclului de viață al proiectului.

Iterativ, incremental și evolutiv modificare

Cele mai multe metode agile descompun sarcinile în etape mici, cu planificare minimă și care nu implică în mod direct o planificare pe termen lung. Iterațiile sunt termene scurte care durează de obicei între una și patru săptămâni. Fiecare iterație implică o echipă inter-funcțională de lucru în toate funcțiile: planificare, analiza cerințelor, proiectare, codificare, unitate de testare, și testarea de acceptare. La sfârșitul iterației are loc o demonstrație a produsului în fața beneficiarului. Acest lucru minimizează riscul global și permite proiectului să se adapteze la schimbările rapide.[7] O iterație s-ar putea să nu adauge suficientă funcționalitate pentru a justifica o lansare pe piață, dar scopul este de a avea o lansare disponibilă (cu defecte minime) la sfârșitul fiecărei iterații.[8] Iterații multiple ar putea fi necesare pentru a lansa un produs sau noi caracteristici.[6]

Comunicare eficientă și față-în-față modificare

Indiferent de disciplinele de dezvoltare necesare, fiecare echipă agilă va conține un reprezentant al clientului. Această persoană este numită de către părțile interesate să acționeze în numele lor și face un angajament personal de a fi disponibilă pentru dezvoltatori pentru a răspunde la întrebări în timpul iterației. La sfârșitul fiecărei iterații, părțile interesate analizează progresele și re-evaluează prioritatile, pentru a optimiza rentabilitatea investiției și asigurarea alinierii cu nevoile clientului și obiectivele companiei.[9]

În dezvoltarea flexibilă de software, un radiator de informații este un afișaj fizic vizibil (în mod normal mare) situat vizibil într-un birou. Acesta prezintă un rezumat actualizat al stării proiectului software sau a altui produs aflat în lucru.[10][11] Numele a fost inventat de către Alistair Cockburn, și este descris în cartea sa din 2002, Agile Software Development. Alternativ, poate fi utilizat un indicator luminos de construcții  pentru a informa o echipă despre starea actuală a proiectului lor.

Buclă de feedback și ciclu de adaptare foarte scurte modificare

O caracteristică comună în dezvoltarea flexibilă sunt întâlnirile zilnice privind evoluția. Într-o scurtă ședință, membrii echipei raportează între ei ce au făcut în ziua precedentă, ce intenționează să facă în ziua respectivă, și ce obstacole întâmpină.[12]

Focalizare pe calitate modificare

Instrumente și tehnici specifice, cum ar fi integrarea continuă, unitate de testare automatizată, programare pereche, dezvoltare condusă prin teste, modele de design, design în funcție de domeniu, reingineria codului, și alte tehnici, sunt adesea folosite pentru a îmbunătăți calitatea și a spori agilitatea proiectului.[13][14]

Note modificare

  1. ^ „Dezvoltarea web agilă”. SetThings.com. . Accesat în . 
  2. ^ Collier, Ken W. (). Agile Analytics: A Value-Driven Approach to Business Intelligence and Data Warehousing. Pearson Education. pp. 121 ff. ISBN 9780321669544. What is a self-organizing team? 
  3. ^ Beck, Kent M.; Beedle, Mike; Bennekum, Arie van; Cockburn, Alistair; Cunningham, Ward; Fowler, Martin; Grenning, James; Highsmith, Jim; Hunt, Andy; Jeffries, Ron; Kern, Jon; Marick, Brian; Martin, R. C.; Mellor, Steve J.; Schwaber, Ken; Sutherland, Jeff; Thomas, Dave. „Manifesto for Agile Software Development”. 
  4. ^ „What is Agile Software Development?”. Agile Alliance. . Accesat în . 
  5. ^ Kent Beck; James Grenning; Robert C. Martin; Mike Beedle; Jim Highsmith; Steve Mellor; Arie van Bennekum; Andrew Hunt; Ken Schwaber; Alistair Cockburn; Ron Jeffries; Jeff Sutherland; Ward Cunningham; Jon Kern; Dave Thomas; Martin Fowler; Brian Marick (). „Manifesto for Agile Software Development”. Agile Alliance. Accesat în . 
  6. ^ a b Kent Beck; James Grenning; Robert C. Martin; Mike Beedle; Jim Highsmith; Steve Mellor; Arie van Bennekum; Andrew Hunt; Ken Schwaber; Alistair Cockburn; Ron Jeffries; Jeff Sutherland; Ward Cunningham; Jon Kern; Dave Thomas; Martin Fowler; Brian Marick (). „Principles behind the Agile Manifesto”. Agile Alliance. Arhivat din original la . Accesat în . 
  7. ^ Moran, A. (). Agile Risk Management. Springer Verlag. ISBN 978-3319050072. 
  8. ^ Beck, Kent (). „Embracing Change with Extreme Programming”. Computer. 32 (10): 70–77. doi:10.1109/2.796139. 
  9. ^ Sfetcu, Nicolae (). Proiectarea, dezvoltarea și întreținerea siturilor web. MultiMedia Publishing. ISBN 978-606-033-075-2. 
  10. ^ Cockburn, Alistair (). „Information radiator”. 
  11. ^ Ambler, Scott (). Agile Modeling: Effective Practices for EXtreme Programming and the Unified Process. John Wiley & Sons. pp. 12, 164, 363. ISBN 978-0-471-20282-0. 
  12. ^ Vasiliauskas, Vidas (). „Developing agile project task and team management practices”. Eylean. Arhivat din original la . Accesat în . 
  13. ^ Jeffries, Ron; Anderson, Ann; Hendrickson, Chet (). Extreme Programming installed. Addison-Weslsy. pp. 72–147. ISBN 978-0201-70842-4. 
  14. ^ Lisa Crispin; Janet Gregory (). Agile Testing: A Practical Guide for Testers and Agile Teams. Addison-Wesley.