Tämä ohje toteuttaa Scrum-oppaan toimintamallin GitHub Projectsissa: Product Backlogiin kirjoitetaan User Storyt, Sprint Planningissa valitaan Sprintin tavoite ja Storyt, ja kehittäjät pilkkovat valitut Storyt taskeiksi. Sprintin aikana taskien etenemistä seurataan tehtävätaululla. Esimerkkinä käytetään oppaan oppilasrekisteriä.
Suositeltu rakenne: yksi GitHub Project koko tuotteelle, yksi issue jokaista User Storya varten, Sprint-niminen Iteration-kenttä Sprinttien ajoittamiseen ja Storyjen alle luotavat sub-issuet taskeille. Backlog, Sprintin Storyt ja Task Board ovat saman projektin eri näkymiä.
Ohje käyttää nykyistä GitHub Projectsia ja käyttöliittymän englanninkielisiä nimiä. Kenttien nimet ja suodattimet kannattaa kirjoittaa täsmälleen tässä esitetyssä muodossa. Valikkojen sijainti voi muuttua GitHubin päivityksissä.
| Scrumissa | Tässä GitHub-toteutuksessa |
|---|---|
| Product Goal | Projektin README-kuvaukseen kirjattu tuotteen yhteinen tavoite. |
| Product Backlog | Projektin avoimet User Story -issuet tärkeysjärjestyksessä. Sprinttiin valitut Storyt kuuluvat edelleen tuotteen Backlogiin. |
| User Story | Repositoryn issue, jolla on label user-story, kuvaus käyttäjän tarpeesta ja hyväksymiskriteerit. |
| Sprint | Sprint-nimisen Iteration-kentän aikajakso, esimerkiksi Sprint 1. |
| Sprint Goal | Erillinen Sprintin suunnittelumuistio repositoryssa, linkitettynä projektin READMEhen. |
| Sprint Backlog | Sprint Goal, kyseiseen Sprintiin valitut Storyt ja niiden taskien muodostama toteutussuunnitelma. |
| Taski | Storyn sub-issue, jolla on label task, oma vastuuhenkilö ja työn tila. |
| Task Board | Board-näkymä, jossa Sprintin taskit ovat Status-sarakkeissa ja ryhmiteltyinä Storyn mukaan. |
| Definition of Done | Tuotteen yhteiset valmistumisen ehdot repositoryn dokumentissa, johon projektin README viittaa. |
| Increment | Toimiva, integroitu ja Definition of Donen täyttävä tuote. Done-kortit kuvaavat työtä, mutta toimivuus osoitetaan itse tuotteella. |
User Storyn ja taskin välinen suhde rakennetaan sub-issueilla.
Sprinttiin kuuluminen ilmoitetaan erikseen kummankin Sprint-kentässä.
Näin Sprintissä voi olla useita Storyja, joista jokaisella on omat taskinsa.
GitHub Projects on muokattava työkalu, joten seuraavat kentät ja käytännöt ovat tämän oppaan valintoja. Scrum ei edellytä tiettyä työkalua, User Story -muotoa tai Story Pointien käyttöä.
oppilasrekisteri.Oppilasrekisteri – Scrum ja valitse Create project.Kirjoita projektin READMEhen esimerkiksi seuraavat tiedot:
## Product Goal
Oppilaitoksella on ajantasainen ja luotettava oppilasrekisteri,
jossa opiskelijat voivat hoitaa keskeiset opiskeluun liittyvät asiat
ja henkilökunta ylläpitää opiskelija- ja suoritustietoja.
## Yhteiset käytännöt
- Product Owner: [nimi]
- Scrum Master: [nimi]
- Kehittäjät: [nimet]
- Sprintin pituus: 2 viikkoa
- Definition of Done: [linkki repositoryn docs/definition-of-done.md-tiedostoon]
- Sprint 1:n tavoite ja muistiot: [linkki docs/sprints/sprint-1.md-tiedostoon]
Tiimi voi kirjata Definition of Doneen esimerkiksi koodikatselmoinnin, läpäisevät testit, käyttöoikeuksien tarkistuksen, toimivan kokonaisuuden ja tarvittavan dokumentaation päivityksen. Storykohtaiset hyväksymiskriteerit kirjoitetaan lisäksi kunkin Storyn kuvaukseen.
Anna tiimille projektin muokkausoikeudet sekä tarvittavat oikeudet repositoryyn. Projektin käyttöoikeus ja repositoryn käyttöoikeus ovat erillisiä: tarkista molemmat. Sub-issueiden liittämiseen tarvitaan repositoryssa vähintään Triage-oikeus; tavalliseen koodin kehittämiseen tiimillä on yleensä Write-oikeus.
Avaa projektin Table-näkymä. Taulukon oikean reunan +-painikkeesta voit lisätä kentän: valitse Add field, klikkaa Create project field, valitse kenttätyyppi ja tallenna. Lisää kentät
| Kenttä | Tyyppi | Käyttötapa tässä oppaassa |
|---|---|---|
Status | Olemassa oleva Single select | Työn tila. Muokkaa arvot alla olevan taulukon mukaisiksi. |
Sprint | Iteration | Storyn ja taskin Sprint. Luodaan seuraavassa vaiheessa. |
Backlog order | Number | Storyjen tarkka järjestys: 10, 20, 30… Pienin ensin. Väliin voi lisätä esimerkiksi luvun 15. |
Story points | Number | Storyn suhteellinen koko, esimerkiksi 3, 5 tai 8. Jätä taskien kenttä tyhjäksi. |
Assignees | GitHubin valmis kenttä | Taskin tekijä tai tekijät. Kehittäjät sopivat työnjaosta. |
Labels | GitHubin valmis kenttä | user-story erottaa Storyt ja task taskit. |
Parent issue | GitHubin valmis kenttä | Näyttää taskin Storyn. Ota näkyviin + → Hidden fields → Parent issue. |
Sub-issue progress | GitHubin valmis kenttä | Näyttää suljettujen sub-issueiden edistymisen. Ota näkyviin Hidden fields -listasta. |
Avaa Settings → Status, nimeä tarvittaessa valmiit vaihtoehdot uudelleen ja lisää puuttuvat.
Pidä nimet samoina kaikissa näkymissä. Halutessasi aseta Todo oletusarvoksi uusille kohteille.
| Arvo | Sovittu merkitys |
|---|---|
Todo | Työtä ei ole aloitettu. Käytetään myös uusille Backlogin Storyille. |
In progress | Työtä tehdään. Story on tässä tilassa, kun sen toteutus on alkanut. |
Ready for test | Toteutus odottaa katselmointia tai testausta. |
Needs info | Työ odottaa lisätietoa tai esteen poistumista. Kirjaa este issueen. |
Done | Työ on tarkastettu ja täyttää valmistumisen ehdot. |
Tässä ohjeessa Storyt ja taskit erotellaan repositoryn labeleilla. Tämä toimintatapa ei edellytä organisaatiokohtaisten Issue type -asetusten määrittämistä.
user-story ja task.Opiskelijan tietojen ylläpito.user-story ja lisää issue Projects-kohdassa projektiin Oppilasrekisteri – Scrum.
Luo issue Create- tai Submit new issue -painikkeella.Status = Todo ja Backlog order = 10.
Kehittäjät arvioivat Storyn koon, esimerkiksi Story points = 5. Jätä Sprint tyhjäksi.## User Story
Ylläpitäjänä haluan lisätä ja päivittää opiskelijan tietoja,
jotta voin pitää oppilasrekisterin ajan tasalla.
## Hyväksymiskriteerit
- [ ] Ylläpitäjä voi lisätä opiskelijan sovituilla pakollisilla tiedoilla.
- [ ] Ylläpitäjä voi muokata olemassa olevan opiskelijan tietoja.
- [ ] Virheellisiä tietoja ei tallenneta, ja käyttäjä saa selkeän virheilmoituksen.
- [ ] Muu kuin ylläpitäjä ei voi lisätä tai muuttaa opiskelijatietoja.
- [ ] Tallennetut muutokset näkyvät opiskelijan tiedoissa.
## Tarkennukset
Tallennettavat tiedot ja tarkistussäännöt: [linkki tai kuvaus]
Käyttöliittymäluonnos: [linkki]
## Valmistuminen
Hyväksymiskriteerit ja tuotteen yhteinen Definition of Done täyttyvät.
Luo lisäksi Storyt Kurssille ilmoittautuminen, Arvosanan tallentaminen, Omien suoritusten tarkastelu ja Opiskelutodistuksen muodostaminen. Kirjoita kuhunkin oma rooli, toiminto, hyöty ja testattavat hyväksymiskriteerit.
Backlogin tarkennus: lisää tarvittavat yksityiskohdat ja arviot ennen Storyn valintaa Sprinttiin. Jos Story on liian suuri yhteen Sprinttiin, jaa se pienemmiksi käyttäjälle arvoa tuottaviksi Storyiksi. Story Pointit ovat suhteellisia arvioita, eivät tunteja.
Jos issue on jo olemassa, lisää se projektin alareunan Add item -toiminnolla etsimällä repository ja issue tai liittämällä issuen URL. Pelkkä uusi otsikko projektin rivillä voi luoda draft issuen. Käytä Storylle varsinaista repositoryn issuea; muunna mahdollinen luonnos Convert to issue -toiminnolla.
docs/sprints/sprint-1.md-tiedostoon.
Lisää päivämäärät, linkit valittuihin Storyihin ja linkki Definition of Doneen. Linkitä muistio projektin READMEhen.Sprint = Sprint 1 projektin taulukossa.
Muut kolme Storya jäävät ilman Sprint-arvoa odottamaan myöhempää suunnittelua.Yksi Project riittää kaikille Sprinteille. Uutta projektia ei tarvitse perustaa joka Sprintille. Tässä mallissa Sprintit toteutetaan Iteration-kentällä; samoja Sprinttejä ei tarvitse ylläpitää lisäksi Milestoneina.
Toteuta opiskelijatietojen tallennus ja päivitys.task,
sama Project ja sovittu Assignee. Valitse Create.Sprint = Sprint 1 ja Status = Todo.
Jätä Story points ja Backlog order tyhjiksi.Tarkista jokaisesta taskista kolme asiaa: se on oikean Storyn sub-issue, se on lisätty samaan Projectiin ja sillä on sama Sprint-arvo kuin Storylla. Parent-suhde, projektijäsenyys ja Sprint-arvo ovat erillisiä tietoja; tarkista ne myös Storyn Sprintiä vaihdettaessa.
## Tehtävä
Toteuta opiskelijatietojen tallennus ja päivittäminen palvelimella.
## Valmistumisen ehdot
- [ ] Pakolliset tiedot ja tietojen muoto tarkistetaan palvelimella.
- [ ] Uusi opiskelija voidaan tallentaa ja olemassa oleva päivittää.
- [ ] Virheellinen syöte ei muuta tietokannan tietoja.
- [ ] Tallennusta ja päivitystä koskevat testit menevät läpi.
- [ ] Muutokset on katselmoitu ja yhdistetty yhteiseen koodiin.
## Riippuvuudet ja tarkennukset
Tarvitsee opiskelijatietojen tietokantataulun: [linkki taskiin]
Markdownin - [ ] -tarkistuslista sopii taskin sisäisiin ehtoihin.
Task Boardilla seurattava taski tehdään kuitenkin omaksi sub-issueksi, jotta sillä on oma tila ja tekijä.
Älä anna taskille lisäksi user-story-labelia.
Luo projektin yläreunan New view -painikkeella seuraavat näkymät ja nimeä niiden välilehdet. Aseta näkymän ulkoasu View-valikosta ja kirjoita suodatin hakukenttään. Kun muutat suodatinta tai asetuksia, tallenna näkymän muutokset Save-toiminnolla.
| Näkymä | Ulkoasu | Suodatin | Tarkoitus |
|---|---|---|---|
| Product Backlog | Table | is:issue is:open label:user-story | Kaikki avoimet Storyt, myös Sprinttiin valitut. |
| Odottavat Storyt | Table | is:issue is:open label:user-story no:sprint | Storyt, joita ei ole valittu Sprinttiin. |
| Sprintin Storyt | Table | is:issue label:user-story sprint:@current | Nykyisen Sprintin Storyt ja taskien edistyminen. |
| Sprintin Task Board | Board | is:issue label:task sprint:@current | Nykyisen Sprintin kaikki taskit, myös valmistuneet. |
| Kaikki kohteet | Table | Tyhjä suodatin | Ylläpitonäkymä puuttuvien kenttien etsimiseen. |
Näytä kentät Title, Labels, Status, Backlog order, Story points ja Sprint. Aseta Sort → Backlog order nousevaksi. Product Owner muuttaa järjestyslukuja tarpeen mukaan. Sprint-kenttä näyttää, mitkä Storyt on jo valittu Sprinttiin.
Näytä Title, Status, Sprint, Story points ja Sub-issue progress.
Esimerkiksi 4/6 suljettua taskia kertoo taskien tilanteesta.
Se ei vielä osoita Storyn hyväksymiskriteerien tai Definition of Donen täyttymistä.
Jos Parent issue ei löydy valikosta, ota kenttä ensin näkyviin Table-näkymän Hidden fields -listasta. Taski, jolla ei ole parentia, pitää liittää oikeaan Storyyn.
@current tarkoittaa päivämäärien perusteella nykyistä aikajaksoa.
Jos Sprint 1 ei ole vielä alkanut, käytä suunnittelussa täsmällistä suodatinta
is:issue label:task sprint:"Sprint 1".
Story-näkymässä vaihda labeliksi user-story.
Myös päättynyttä Sprinttiä tarkastellaan sen nimellä; nykyisen Sprintin näkymä siirtyy aikataulun mukaan seuraavaan jaksoon.
Näkymä ei siirrä tai kopioi issueita. Se näyttää suodattimen mukaisen osan saman projektin kohteista.
Task Boardin label:task-suodatus pitää Story-kortit poissa taskien joukosta.
Älä lisää is:open-suodatinta Sprintin näkymiin, jos haluat nähdä myös suljetut Done-taskit ja Storyt.
Refs #42.
Siirrä taski Ready for test -tilaan, kun se on valmis sovittuun katselmointiin ja testaukseen.Pull requestin automaattinen sulkeminen: esimerkiksi Closes #42 voi sulkea taskin,
kun PR yhdistetään repositoryn oletushaaraan. Käytä sitä vain, jos yhdistäminen tarkoittaa tiimin käytännössä
taskin valmistumista. Jos testaus jatkuu yhdistämisen jälkeen, käytä Refs #42 ja sulje taski myöhemmin.
Taskin PR:ssä ei pidä sulkea parent-Storya, ellei koko Story samalla täytä kaikkia valmistumisen ehtoja.
Avaa projektin … → Workflows. GitHubin oletusautomaatio voi asettaa suljetun issuen
Status-arvoksi Done. Tarkista, että se käyttää tässä oppaassa määriteltyä Done-arvoa.
Voit käyttää myös uusien kohteiden Todo-tilan asettamista. Muokkaa valittua työnkulkua Edit-toiminnolla
ja tallenna Save and turn on workflow.
Pelkkä kortin siirtäminen Doneen ei välttämättä sulje issuea: siihen tarvitaan erillinen automaatio tai issuen sulkeminen käsin. Tässä ohjeessa taski suljetaan, kun se on valmis, ja sulkeminen päivittää tilan Doneksi. Näin myös Storyn Sub-issue progress päivittyy suljettujen taskien perusteella.
Automaatiot eivät tarkista hyväksymiskriteerejä tai Definition of Donea. Älä määritä kaikkia Storyja automaattisesti seuraavaan Sprinttiin.
Storyn voi sulkea valmiina ja siirtää Doneen vasta, kun kaikki tarvittavat taskit ovat valmiit, Storyn hyväksymiskriteerit on todennettu ja kokonaisuus täyttää yhteisen Definition of Donen. Esimerkiksi valmis tietokantataulu ilman toimivaa ja testattua käyttöliittymää ei tee opiskelijatietojen Storya valmiiksi.
Pelkkä taskien 100 % -edistyminen ei riitä.
Kehittäjät tarkistavat toimivan kokonaisuuden; Storyn sulkemista ei jätetä taskilaskurin varaan.
Valmistuneen Storyn ja sen taskien Sprint-arvot jätetään paikoilleen, jotta toteutuneen Sprintin työt voidaan löytää myöhemmin.
Esittele toimiva Increment Product Ownerille ja sidosryhmille. Tarkastelkaa tulosta suhteessa Sprint Goaliin ja Product Goaliin. Kirjaa palaute Sprintin muistioon ja lisää uudet tarpeet Product Backlogiin. Review ei ole valmistumisen hyväksymisportti: Definition of Donen täyttävä työ voi valmistua ja olla toimitettavissa jo Sprintin aikana.
Sprint-kenttä,
jotta se näkyy jälleen Odottavat Storyt -näkymässä.Esimerkki: kurssille ilmoittautumisen Story jää kesken Sprint 1:ssä.
Tietokantataski valmistui, mutta kaksoisilmoittautumisen esto ja testit puuttuvat.
Story palaa odottavaan Backlogiin. Jos se valitaan Sprint 2:een, nämä keskeneräiset taskit saavat
Sprint 2 -arvon; valmis tietokantataski säilyttää Sprint 1 -arvon.
GitHubissa tässä mallissa Sprintin päättyminen tarkoittaa aikajakson päättymistä ja tiimin tekemää tarkastelua. Projektia ei suljeta eikä Iterationia poisteta Sprintin lopuksi.
Kirjaa Sprintin muistioon, mikä työskentelyssä toimi ja mitä parannetaan. Sopikaa konkreettisesta parannuksesta ja ottakaa se tarvittaessa seuraavan Sprintin toteutussuunnitelmaan. Seuraava Sprint alkaa uudella Sprint Goalilla ja kehittäjien tekemällä Storyjen valinnalla.
Laske Sprintin valmistuneiksi pisteiksi vain kokonaan valmistuneiden Storyjen pisteet. Jos viiden pisteen Story jää kesken, Sprint 1:een ei kirjata siitä osapisteitä. Älä summaa taskien pisteitä Storyn pisteiden lisäksi. Historiasta voidaan arvioida kapasiteettia, mutta pisteet eivät mittaa yksittäisen kehittäjän suoritusta tai tuotettua arvoa.
Säilytä Sprintin muistiossa valitut ja valmistuneet Storyt sekä toteutuneet pisteet. Pelkkä nykyisten kenttien suodatus ei säilytä alkuperäistä Sprint-suunnitelmaa, jos keskeneräisten Storyjen Sprint-arvoa muutetaan.