Ohjelmistokehityksen mallit ja menetelmät kuvaavat, miten kehitystyö järjestetään ja miten sen vaiheet etenevät. Tässä oppaassa käsitellyt määrittely, suunnittelu, toteutus ja testaus voidaan käydä läpi peräkkäin tai niitä voidaan toistaa pienemmissä kehitysjaksoissa. Sopiva lähestymistapa riippuu esimerkiksi vaatimusten selkeydestä, niiden muuttumisesta ja palautteen tarpeesta.
Vesiputousmalli on perinteinen, peräkkäinen prosessimalli, jossa projekti etenee vaihe vaiheelta: esitutkimus → määrittely → suunnittelu → toteutus → testaus → käyttöönotto → ylläpito. Vaiheet suunnitellaan eteneviksi järjestyksessä. Vesiputousmalli sopii erityisesti projekteihin, joissa vaatimukset tunnetaan hyvin etukäteen, ne pysyvät vakaina ja toteutustapa on tuttu.
Vesiputousmallin edut:
Vesiputousmallin haitat:
Iteratiivinen vesiputousmalli: Vesiputousmallia voidaan soveltaa myös siten, että vaiheisiin palataan ja niitä toistetaan. Esimerkiksi testauksessa havaittu ongelma voi edellyttää suunnittelun tai toteutuksen tarkentamista, ja muuttunut vaatimus voi johtaa määrittelyn päivittämiseen. Kehityksen perusrakenne säilyy kuitenkin vaiheittaisena ja vesiputousmallin kaltaisena.
Ketterät menetelmät ovat iteratiivisia ja inkrementaalisia lähestymistapoja, jotka korostavat joustavuutta, asiakasyhteistyötä ja nopeaa reagointia muutoksiin. Ketterät menetelmät perustuvat Agile Manifestoon (2001), joka määrittelee neljä perusarvoa:
Ketteriä menetelmiä kehitettiin vastaukseksi perinteisten, tarkasti etukäteen suunniteltujen ohjelmistoprojektien ongelmiin. Pitkissä projekteissa asiakkaiden tarpeet, liiketoimintaympäristö ja käytettävä teknologia ehtivät usein muuttua ennen kuin ohjelmisto valmistui. Jos valmis tuote esiteltiin asiakkaalle vasta projektin lopussa, väärin ymmärretyt vaatimukset ja muut virheet saattoivat tulla esiin hyvin myöhään, jolloin niiden korjaaminen oli kallista ja hidasta.
Ketterissä menetelmissä ohjelmistoa toteutetaan pienissä osissa ja siitä pyydetään palautetta säännöllisesti. Näin tärkeimmät ominaisuudet voidaan toimittaa aikaisemmin, muutoksiin voidaan reagoida hallitusti ja ongelmat havaitaan nopeammin. Menetelmät on otettu laajasti käyttöön erityisesti siksi, että ne parantavat asiakkaan ja kehitystiimin yhteistyötä, tekevät työn etenemisen näkyväksi ja pienentävät riskiä rakentaa pitkään vääränlaista tuotetta.
Ketteryyttä ei pidä ymmärtää niin, ettei ohjelmistoa tarvitse määritellä, suunnitella tai dokumentoida. Näitä asioita tehdään edelleen, mutta sopivassa laajuudessa ja usein vaiheittain projektin edetessä. Esimerkiksi vaatimuksia voidaan kuvata käyttäjätarinoina ja hyväksymiskriteereinä, arkkitehtuuria suunnitella ennen toteutusta ja sen aikana sekä olennaiset ratkaisut, rajapinnat ja käyttöohjeet dokumentoida.
Agile Manifeston ilmaus "ennen" ei tarkoita, että jälkimmäinen asia olisi arvoton. Prosesseilla, työkaluilla, dokumentaatiolla, sopimuksilla ja suunnitelmilla on paikkansa, mutta niiden tulee tukea toimivan ja asiakkaalle hyödyllisen ohjelmiston tuottamista. Ketteryys ei myöskään tarkoita suunnittelemattomuutta, jatkuvaa tavoitteiden vaihtamista tai sitä, että laatuvaatimuksista ja sovituista vastuista voitaisiin luopua.
Seuraavaksi esitellään kolme yleisesti käytettyä ketterää lähestymistapaa: Scrum, Kanban ja Extreme Programming (XP).
Scrumissa kehitystyö jaetaan lyhyisiin, ennalta sovitun mittaisiin jaksoihin eli sprintteihin. Kussakin sprintissä toteutetaan sovittu kokonaisuus, jonka tulosta arvioidaan jakson lopussa. Scrum sopii erityisesti tuotekehitysprojekteihin, joissa vaatimukset tarkentuvat työn aikana ja tuotetta kehitetään säännöllisen asiakaspalautteen perusteella.
Kanbanissa työ etenee jatkuvana virtana ilman sprinttejä. Tehtävien eteneminen tehdään näkyväksi Kanban-taululla, ja keskeneräisen työn määrää rajoitetaan, jotta tehtävät valmistuvat tasaisesti. Kanban sopii erityisesti ylläpito- ja jatkokehitystyöhön, jossa uusia tehtäviä saapuu jatkuvasti ja niiden kiireellisyys vaihtelee.
XP painottaa ohjelmiston laatua ja nopeaa palautetta kehitystyön aikana. Sen ytimessä ovat tekniset työtavat, kuten jatkuva testaaminen, pariohjelmointi ja koodin säännöllinen parantaminen. XP sopii erityisesti ohjelmistoprojekteihin, joissa vaatimukset muuttuvat usein ja koodin laatu sekä kattava automaattinen testaus ovat keskeisiä muutosten hallinnassa.