- COMP.CS.140
- 10. Työnjako ja tiimityöskentely
- 10.1 Työnjako
Työnjako¶
Osaamistavoitteet
Tämän kierroksen aikana opit käyttämään versionhallintaa tiimityössä sekä integroimaan tiimiläisten työt yhteen versionhallinnan avulla. Kierroksen jälkeen osaat selittää, miten versionhallinta liittyy ohjelmistotyöhön avaintyökaluna. Opit myös käyttämään ohjelman kommentoimista dokumentoinnin välineenä ja selittämään eri työkalujen roolin työn etenemisessä ja kommunikaation välineinä.
Tähän saakka kurssi on keskittynyt ohjelmointikielen tasolla toimiviin ratkaisuihin ohjelman kehittämiseen osissa usean koodarin voimin. Ohjelmointikielen lisäksi tarvitaan työkaluja ja toimintatapoja, jotta projekti pysyy oikeassa suunnassa ja eri ohjelmoijien tekemät palaset integroituvat kokonaiseksi ohjelmistoksi. Keskeisessä roolissa yhteistyön mahdollistamisessa on versionhallinta.
Ohjelmistoprojektityöskentelyssä keskeisessä roolissa on perustyökalujen joukko, joiden roolina on sekä tukea itse koodaamista että tiimityöskentelyä. Ketterien kehitysmenetelmien myötä tarve nopeaan kehityssykliin on korostunut ja tämä puolestaan korostanut tarvetta työkaluille, jotka tukevat ohjelmiston ketterää kehittämistä aina tuotantoonvientiin saakka. Jotta iteratiivisesti etenevä ja ketterä ohjelmistokehitys on mahdollista, on ohjelmiston pysyttävä toimivana kokonaisuutena. Kun ohjelmistoa kehittää tiimi ihmisiä, joiden vastuulla olevat komponentit kutsuvat rajapintojen kautta toistensa palveluita, pitää ohjelmisto kokonaisuutena rakentaa säännöllisesti. Nykyään peruslähtökohtana on, että ohjelmisto pidetään yhtenäisenä koko ohjelmistokehityksen ajan. Tavoitetilanteena on jatkuva integraatio, jossa tiimin jäsenet liittävät kehittämänsä koodin yhteen useita kertoja päivässä.
Jatkuva kehittäminen¶
Jatkuva kehittäminen on varsin vanha keksintö: Grady Booch ehdotti termiä jatkuva integraatio jo vuonna 1991 ja se sisältyy 2000-luvun taitteessa kehitettyyn useita tärkeitä käytäntöjä sisältävään Extreme Programming -kehitysmenetelmään. Versionhallinta on ohjelmistoprojektin työkaluista keskeisimpiä, kun tarvitaan useamman kuin yhden koodarin työpanosta. Etätietovarastossa päähaarassa ylläpidetään ohjelmistoa kokonaisuutena. Aina, kun yksittäinen kehittäjä lähtee kehittämään uutta ominaisuutta, kehittäjän käyttämä projekti haarautuu muusta projektista. Mitä pidempään kehittäjän työ on irrallaan muusta koodista, sitä todennäköisemmin muu kehitys on kulkeutunut tilanteeseen, jossa kehitetty koodi ei enää liity osaksi projektia ongelmitta. Pahimmillaan päädytään ns. integraatiohelvettiin, jossa projektin kokoaminen yhteen vaatii enemmän työtä kuin itse ominaisuuden toteuttaminen. Tältä vältytään, kun kehittäjän koodi liitetään osaksi kokonaisuutta säännöllisesti ja tiheään.
Jatkuva kehittäminen ei ole kurssilla ydinainesta. Siihen perehdytään mm. Software Product and Process Managementilla perusteellisesti. Alusta asti on kuitenkin tärkeää muistaa, että versionhallinnassa toimii useita tiimiläisiä ja oma toiminta vaikuttaa muihin. Lähtökohtana työskentelytapa, jossa
Jokainen tehty toiminnallisuus testataan perusteellisesti paikallisesti ennen etätietovarastoon työntämistä
Etätietovarastossa on koko ohjelmistoprojekti jatkuvasti kokonaisuudeksi integroituna
(Etätietovarastoon lisätty koodi testataan ja integroidaan automaattisesti)
Jokainen koodari kommitoi koodia etätietovaraston päähaaraan sitä mukaa, kun se valmistuu, eli päivittäin
Jos etätietovarastoon lipsahtaa toimimatonta koodia, se korjataan välittömästi
Versionhallinnan rooli on tiiminä ohjelmistoa kehittäessä siis keskeinen: kaikki koodi integroidaan yhteen (ja testataan) versionhallinan kautta.
Hyödyllistä lisälukemista kiinnostuneille¶
James Shoren blogikirjoitus Continuous Integration on a Dollar a Day on vanha, mutta pätevä kuvaus siitä, miten jatkuva integraatio ei vaadi merkittävää määrää työkaluja vaan perustuu pitkälti siihen, että tiimi toimii yhteisten pelisääntöjen mukaan. Martin Fowlerin blogikirjoitus Continuous Integration on kattava perusteiden läpikäynti. Jez Humblen ja David Farleyn kirja Continuous Delivery ja sen luku jatkuvan integraation työkaluputkista antavat erinomaisen perustan aiheeseen.