Kehityshaarat - Raision-seudun-koulutuskuntayhtyma/Tietokannat GitHub Wiki

Kehitystyön hallinta

Kun työskentelet yksin, usein riittää vain yksi tai kaksi haaraa, joihin luodaan koodia. Toimiva koodi tallennetaan yleensä main-haaraan ja uutta koodia luodaan ja testataan development-haarassa. Kun koodi on testaamalla todettu toimivaksi uusi koodi yhdistetään main-haaraan.

Silloin, kun useampia sovelluskehittäjiä luo sovellusta yhdessä, tehdään usein enemmän haaroja. Jokaiselle sovelluksen osalle (feature) tehdään oma haara development-haarasta. Usein sovelluskehittäjä luo omalle koodilleen ensin paikallisen haaran, joka työn valmistuttua yhdistetään etärepositorion vastaavaan haaraan. Kun haaroja on paljon, tarvitaan työkaluja niiden hallintaan. Graafiset työkalut helpottavat kokonaiskuvan hahmottamista.

Graafiset työkalut

Githubin oma työkalu network löytyy insight-välilehdeltä.

Github network-työkalu

Sourcetree on tehokas ja monipuolinen työkalu haarojen hallintaan. Sen voi ladata osoitteesta https://www.sourcetreeapp.com/. Seuraavassa kuvassa näkyvät haarat ohjelman näyttäminä.

Sourcetreen haaranäkymä

Visualstudio Code:n Git Graph-laajennuksella saa haarat näkymään suoraan editorissa. Laajennus mahdollistaa haarojen luonnin ja yhdistämisen.

haarat vs codesta nähtynä

Hallinnan terminologia

Versionhallinnassa käytetään paljon termejä, jotka saattavat olla vieraita ja hankalasti hahmotettavia myös äidinkielenään englantia puhuville. Seuraavaan taulukkoon on kerätty keskeisiä termejä:

Termi Merkitys
Origin Etärepositorio
Head Viimeisin versioitu päivitys
Stage Lisätään tiedosto versiohallintaan
Commit Luodaan muutoksista uusi versio
Push Lähetetään muutokset (etä)repositorioon
Fetch Tarkistetaan onko (etä)repositoriossa tapahtunut muutoksia
Pull Päivitetään muutokset repositorioon
Branch Haara, joka sisältää kopion aiemmin luodusta koodista
Merge Yhdistetään haara toiseen haaraan muuttamatta versioiden järjestystä
Rebase Yhdistetään haara toiseen haaraan ja muutetaan versioiden keskinäistä järjestystä
Squash Yhdistetään useita versiomuutoksia yhdeksi versiomuutokseksi
Stash Tilapäinen paikallinen haaran "jäädytys"

Hyvä englanninkielinen kuvaus keskeisistä termeistä löytyy Cloud Gurun sivuilta

Strategiat

Versioiden ja erityisesti haarojen hallintaan on olemassa useita vakiintuneita strategioita, joiden eduista ja haitoista käydään lähes samanlaista väittelyä kuin uskonnoista. Me käytämme tuotekehitys-ominaisuus-strategiaa tässä harjoituksessa. Sovelluksen komponentteja luodaan development-haarassa. Jokaiselle komponentille luodaan oma haara feature/komponentin_nimi. Onnistuneiden testien jälkeen komponentin haara yhdistetään development-haaraan. Tarvittaessa muut voivat päivittää oman komponenttihaaransa yhdistämällä development-haaran omaan feature/komponentin_nimi-haaraan. Development-haaran muutoksien yhdistämisestä työnalla olevaan haaraan keskustellaan päivittäisessä Scrum-palaverissa.

Kehitys- ja ominaisuushaarat

Kaaviossa main-haarasta on luotu development-haara. Jotta haara näkyisi, siihen on tehtävä jokin päivitys (commit). Haarassa tehdään 2 komponenttia sovellukseen. Molemmille komponenteille on tehty oma haara (feature1 ja feature2). Kun ensimmäinen komponentti (feature1) valmistui, sen haara yhdistettiin development-haaraan. Yhdistäminen luo oman päivityksen (commit) development-haaraan. Toisen komponentin (feature2) kehitys on ollut tässä vaiheessa vielä kesken. Valmistuneen komponentin koodi on saatu toisen komponentin haaran käyttöön yhdistämällä development-haara feature2-haaraan. Tämä luo uuden päivityksen feature2-haaraan. Kun komponentti on valmistunut, se on yhdistetty development-haaraan. Tämän jälkeen development-haara on yhdistetty main-haaraan kehityssyklin päätteeksi.

Feature-haaroissa on järkevää luoda työstettävälle ominaisuudelle tai toiminnolle oma python-moduli tai tarvittaessa useampia moduleita. Jos monta henkilöä tekee muutoksia yhteen samaan ohjelmatiedostoon, tuloksena on kaaos tai vähintäänkin vaikeasti ratkaistavia yhdistämisristiriitoja (merge conflict). Kun modulit on saatu valmiiksi / testauskuntoon, ne lisätään pääohjelmaan.

Kun development-haarasta luodaan feature1-haara, siihen lisätään uutta koodia varten moduli feature1.py, johon uusi koodi kirjoitetaan. Se tuodaan testausta varten pääohjelmaan import-komennolla. Kuvissa tiedostojen "elinkaari" on merkitty keltaisella taustavärillä.

Ominaisuushaaran moduli

Kun feature1-haara yhdistetään development-haaraan, feature1.py-moduli näkyy siellä ja sen valmistumisesta kerrotaan esim. daily scrum -palaverissa tai viimeistään review-tilaisuudessa, jotta muut kehitystiimin jäsenet voivat päivittää oman haaransa development-haarasta.

Vastaavasti haaraa feature2 luotaessa tehdään moduli feature2.py ja lisätään se pääohjelmaan main.py import-komennolla.

Toisen kehityshaaran modulit

Kun feature1-haara on yhdistetty development-haaraan, päivitetty development-haara yhdistetään feature2-haaraan. Tämän jälkeen feature1.py on osa feature2-haaraa.

Molemmat modulit ominaisuushaarassa

Kun feature2-haara on saatu valmiiksi, se yhdistetään development-haaraan. Ennen yhdistämistä feature2-haarassa voidaan tarvittaessa muokata myös feature1-py-modulia ilman ristiriidan syntymistä. Yhdistämisristiriitojen välttämiseksi feature1-haara kannattaa tuhota development-haaraan yhdistämisen jälkeen, jotta kukaan ei enää työskentelisi tässä haarassa. feature1.py-modulia ei myöskään pitäisi muokata suoraan development-haarassa, jos siihen tehdään muutoksia myös feature2-haarassa.

Esimerkissä ideana on välttää kaikille yhteisten komponenttien tarpeetonta päivittämistä. Pääohjelmaan main.py ei tehdä muita muutoksia, kuin sellaisia, jotka liittyvät kehitystyön alla olevien modulien käyttöönottoon. Tässä kohtaa kommentointi on erittäin tärkeää. Uuden ominaisuuden aiheuttamien muutosten on erotuttava selkeästi pääohjelmasta myös ilman versiohallinnan työkaluja.

# Tämä on sovelluksen pääohjelma main.py

# Kirjastojen ja modulien käyttöönotot
import settings1 # Tietokannan asetukset
import feature1 # Haaran Feature1 uusi tai muokattu ohjelmakoodi
import feature2 # Haaran Feature2 uusi tai muokattu ohjelmakoodi

# Käynnistetään feature1:n toiminto
feature1.funktio_x("Heikki", 42)

Projektinhallinta

Asioiden muistamista ja ajanhallintaa helpottamaan voi käyttää Github:n projektivälilehden työkaluja. Seuraavassa kuvassa on esimerkki sprintti-kohtaisesta suunnitelmasta.

Projektinhallinta

Haarat ovat olennainen osa projektinhallintaa. Suunnittelupalaverissa (sprint planning) sovitaan:

  1. Mitä töitä sprintin aikana tehdään?
  2. Kuka ne tekee?
  3. Paljonko kunkin työn tekemiseen tarvitaan aikaa?
  4. Minkä nimisiä haaroja sprinttiä varten luodaan?
  5. Miten sprintin aikana syntyvät kooditiedostot nimetään (nimi ja mahdollinen hakemistohierarkia)?

Aamupalaverissa (daily scrum) kerrotaan vähintään:

  1. Mitkä komponentit ovat valmistuneet.
  2. Voidaanko ne yhdistää development-haaraan ilman katselmointia (review).

Katselmointitilaisuudessa (review) selvitetään:

  1. Mitkä komponentit ovat yhdistettävissä development-haaraan?
  2. Onko development-haara siinä vaiheessa, että voidaan alkaa valmistella uuden version julkaisua?
  3. Voidaanko development-haara yhdistää tämän sprintin jälkeen main-haaraan?

Retrospektiivissä tarkastellaan edellisten kohtien onnistumista ja yritetään oppia mahdollisesti tehdyistä virheistä.