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ä.
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ä.
Visualstudio Code:n Git Graph
-laajennuksella saa haarat näkymään suoraan editorissa. Laajennus mahdollistaa haarojen luonnin ja yhdistämisen.
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.
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ä.
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.
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.
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.
Haarat ovat olennainen osa projektinhallintaa. Suunnittelupalaverissa (sprint planning) sovitaan:
- Mitä töitä sprintin aikana tehdään?
- Kuka ne tekee?
- Paljonko kunkin työn tekemiseen tarvitaan aikaa?
- Minkä nimisiä haaroja sprinttiä varten luodaan?
- Miten sprintin aikana syntyvät kooditiedostot nimetään (nimi ja mahdollinen hakemistohierarkia)?
Aamupalaverissa (daily scrum) kerrotaan vähintään:
- Mitkä komponentit ovat valmistuneet.
- Voidaanko ne yhdistää
development
-haaraan ilman katselmointia (review).
Katselmointitilaisuudessa (review) selvitetään:
- Mitkä komponentit ovat yhdistettävissä
development
-haaraan? - Onko
development
-haara siinä vaiheessa, että voidaan alkaa valmistella uuden version julkaisua? - Voidaanko
development
-haara yhdistää tämän sprintin jälkeenmain
-haaraan?
Retrospektiivissä tarkastellaan edellisten kohtien onnistumista ja yritetään oppia mahdollisesti tehdyistä virheistä.