Agiilsed metoodikad

**Agiilne meetod** (inglise keeles *The Agile Method*) on erilähenemine projektijuhtimisele, mida kasutatakse tarkvara arendamisel. See meetod aitab tiimidel reageerida ettearvamatustele, mida tarkvara implementeerimine kaasa toob. Selle käigus kasutatakse järkjärgulisi iteratiivseid tööjärjestusi, mida üldiselt nimetatakse sprintideks .

## Ajalugu
Tarkvaraarendus algas 1950. aastatel keeruliste arvutusmasinate leiutamisega. Seejärel kulus kümneid aastaid arvutis töötava tarkvara arendamiseks. 1990. aastatel, mil arvutid hakkasid massiliselt turule sisenema ja ettevõtted neid kasutama, kulus IT-asjatundjate sõnul kolm aastat selleks, et vajadusi rahuldav rakendus valmiks. Loomulikult oli niisugune ajakulu vastuvõetamatu.

1990. aastate jooksul väljendusid iteratiivse arenduse ideed ning tarkvara arendajad mõistsid, et **Waterfalli** (kaskaad?) meetodid on paljude projektide jaoks liiga jäigad. 1990. aastate alguses lõid Ken Schwaber ja Jeff Sutherland Scrumi metoodika ja kodeerisid selle 1995. aastal konverentsil esitamiseks. Tulemused avaldati paberil "SCRUM-i tarkvaraarenduse protsess" .

## Agiilsed metoodikad
Enim kasutatud agiilsed metoodikad on järgmised :
* **Agile Scrum Methodology**

Scrum on kergekaaluline agiilne projektijuhtimise raamistik, mida saab kasutada igat liiki iteratiivsete ja inkrementaalsete projektide haldamiseks. Scrumis töötav nn toote omanik on tihedas koostöös oma meeskonnaga, et tuvastada ja määrata süsteemi funktsionaalsusele olulisuse tasemed, luues toote *backlog*'i. Toote *backlog* koosneb sellest, mida tuleb teha, et edukalt toimivat tarkvarasüsteemi luua. Kogu arendustegevus on jaotatud *sprint*'ideks, mille kestus võib olla sõltuvalt vajadusest 1–2 nädalat.
* **Lean and Kanban Software Development**
**Lean**-arendus kõrvaldab raiskamine (inglise keeles *Waste*), paludes kasutajatel valida süsteemi jaoks tõeliselt väärtuslikud funktsioonid, seada need funktsioonid esikohale ja seejärel töötada väikeste osade kaupa nende edastamiseks. See metoodika tugineb kiirele ja usaldusväärsele tagasisidele programmeerijate ja klientide vahel, rõhutades arendustöövoogude kiirust ja tõhusust.

**Kanban** on visuaalne töövoo juhtimise meetod, mis on Lean meeskondade hulgas populaarne. Tegelikult 83% Leani kasutavatest meeskondadest kasutab Kanbani, et visualiseerida ja aktiivselt hallata toodete loomist rõhuasetusega pidevale uuenduste tarnimisele. Nagu Scrum, on ka Kanban protsess, mille eesmärk on aidata meeskondadel tõhusamalt koos töötada.
* **Extreme Programming (XP)**
Extreme Programming (XP), mida algselt kirjeldas Kent Beck, on kujunenud üheks kõige populaarsemaks agiilseks metoodikaks. XP on distsiplineeritud lähenemine kvaliteetse tarkvara kiirele ja pidevale tarnimisele. Selle eesmärk on parandada tarkvara kvaliteeti ja reageerimisvõimet klientide muutuvatele vajadustele. See soodustab klientide ulatuslikku kaasamist, kiiret tagasisidet, pidevat testimist, pidevat planeerimist ja tihedat meeskonnatööd.
* **Crystal**

Crystali metoodika on üks kõige kergekaalulisemaid, kohandatavamaid lähenemisviise tarkvara arendamisele.
Crystal koosneb tegelikult agiilsete meetodite perekonnast, sealhulgas *Crystal Clear*, *Crystal Yellow*, *Crystal Orange* ja teised. Iga üks omab unikaalseid tunnusjooni, mida juhivad mitmed tegurid nagu meeskonna suurus, süsteemi kriitilisus ja projekti olulised eesmärgid. Crystali perekond annab mõista, et iga projekti puhul võib vaja minna veidi kohandatud poliitikate, tavade ja protsesside kogumit, et vastata toote ainulaadsetele omadustele.
* **Dynamic Systems Development Method (DSDM)**
DSDM põhineb kaheksal põhiprintsiibil, mis juhivad meeskonda ja loovad mõtteviisi, mis võimaldaksid ette nähtud aja ja eelarvega uuendusi tarnida. Need põhimõtted keerlevad peamiselt ettevõtte vajaduste ja väärtuste, aktiivse kasutajate kaasamise, sagedase tarnimise, integreeritud testimise ja sidusrühmade koostöö ümber.

**8 põhiprintsiipi:**
* Keskendu ettevõtte vajadustele (*Focus on the business need*)
* Tarni õigel ajal (*Deliver on time*)
* Koostöö ('Collaborate')
* Ära kunagi anna kvaliteedis järele (*Never compromise quality*)
* Ehita järk-järgult (*Build incrementally from firm foundations*)
* Tööta iteratiivselt (*Develop iteratively*)
* Suhtle pidevalt ja selgelt (*Communicate continuously and clearly*)
* Näita, et sul on asjade üle kontroll (*Demonstrate control*)

* **Feature Driven Development (FDD)**
Feature Driven Development on mudelitel põhinev lühiajaline iteratsiooniprotsess, mis oli üles ehitatud tarkvaratehnika parimate tavade, nagu domeeni objektide modelleerimine, funktsioonide arendamine ja koodide omandiline kuuluvus järgi. 

## Viited