Scrum
Scrum GitHub Projectsissa

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ä.

Etene järjestyksessä: valmistele ensin Scrum-alusta kohtien 2–7 mukaan. User Storyjen ja taskien luominen alkaa vasta kohdasta 8. Jos projekti on jo käytössä, täydennä puuttuvat asetukset ja käytä olemassa olevia kenttiä ja näkymiä.

1. Scrum-käsitteiden vastineet GitHubissa
ScrumissaTässä GitHub-toteutuksessa
Product GoalProjektin README-kuvaukseen kirjattu tuotteen yhteinen tavoite.
Product BacklogProjektin avoimet User Story -issuet tärkeysjärjestyksessä. Sprinttiin valitut Storyt kuuluvat edelleen tuotteen Backlogiin.
User StoryRepositoryn issue, jolla on label user-story, kuvaus käyttäjän tarpeesta ja hyväksymiskriteerit.
SprintSprint-nimisen Iteration-kentän aikajakso, esimerkiksi Sprint 1.
Sprint GoalErillinen Sprintin suunnittelumuistio repositoryssa, linkitettynä projektin READMEhen.
Sprint BacklogSprint Goal, kyseiseen Sprintiin valitut Storyt ja niiden taskien muodostama toteutussuunnitelma.
TaskiStoryn sub-issue, jolla on label task, oma vastuuhenkilö ja työn tila.
Task BoardBoard-näkymä, jossa Sprintin taskit ovat Status-sarakkeissa. Parent issue kertoo, mihin Storyyn taski kuuluu.
Definition of DoneTuotteen yhteiset valmistumisen ehdot repositoryn dokumentissa, johon projektin README viittaa.
IncrementToimiva, 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öä.

2. Projektin perustaminen
  1. Luo tuotteen koodille repository, esimerkiksi oppilasrekisteri. Varmista, että sen Issues-osio on käytössä.
  2. Avaa välilehti Projects ja valitse New project. Valitse tyhjä Table-projekti, anna nimeksi Oppilasrekisteri – Scrum ja valitse Create project.
  3. Avaa projektin oikean yläkulman … → Settings. Kirjoita lyhyt kuvaus Description-kenttään ja tarkemmat tiedot README-tekstikenttään. Tallenna molemmat. README on tässä projektin asetuksiin tallennettava Markdown-teksti, ei erillinen tiedosto.
  4. Luo repositoryssa Issues → Labels → New label -toiminnolla labelit user-story ja task.
  5. Luo repositoryyn docs/definition-of-done.md ja kirjaa siihen yhteiset valmistumisen ehdot.
  6. Luo repositoryyn muistion pohja docs/sprints/sprint-1.md. Lisää otsikot päivämäärille, Sprint Goalille, valituille Storyille, Reviewlle ja Retrospectivelle. Tavoite ja Story-linkit täydennetään vasta Sprint Planningissa.

Kirjoita GitHub Projects -projektin asetusten README-tekstikenttään 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.

## Scrum-tiimi ja työskentelytavat
- Product Owner: [nimi]
- Scrum Master: [nimi]
- Kehittäjät: [nimet]
- Sprintin pituus: 2 viikkoa
- Definition of Done: [Definition of Done](https://github.com/OMISTAJA/REPOSITORY/blob/main/docs/definition-of-done.md)
- Sprint 1:n tavoite ja muistiot: [Sprint 1:n tavoite](https://github.com/OMISTAJA/REPOSITORY/blob/main/docs/sprints/sprint-1.md)

Korvaa linkeissä OMISTAJA ja REPOSITORY omilla tiedoillasi ja tarvittaessa main repositoryn oletushaaralla. Tämä README on GitHub Projects -projektin kuvaus, ei repositoryn README.md-tiedosto. Käytä tässä kokonaisia GitHub-osoitteita, jotta linkit osoittavat halutun repositoryn dokumentteihin.

Jos kirjoitat saman sisällön repositoryn juuressa olevaan README.md-tiedostoon, voit käyttää suhteellisia linkkejä [Definition of Done](docs/definition-of-done.md) ja [Sprint 1:n tavoite](docs/sprints/sprint-1.md). Tällöin linkit seuraavat tarkasteltavaa haaraa ja toimivat myös repositoryn paikallisessa kopiossa Markdownia tukevassa katseluohjelmassa.

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.

3. Kenttien ja työn tilojen määrittäminen

Luo seuraavat kolme projektikenttää ennen näkymien valmistelua. Jos kenttä on jo luotu, käytä sitä.

  1. Avaa projektin Table-näkymä ja sarakeotsikoiden oikean reunan +-painike. Valitse Add field / New field → Create project field.
  2. Kirjoita nimeksi Sprint ja valitse tyypiksi Iteration. Aseta ensimmäisen Sprintin aloituspäivä ja kestoksi esimerkiksi 2 weeks, ja tallenna.
  3. Luo samalla toiminnolla kenttä Backlog order, tyyppi Number, ja tallenna.
  4. Luo samalla toiminnolla kenttä Story points, tyyppi Number, ja tallenna.

Create project field luo tämän projektin kentän. Manage Issue Fields koskee organisaation yhteisiä issue-kenttiä. Käytä kenttänimiä täsmälleen yllä olevassa muodossa. New view luo näkymän ja Boardin New column sarakkeen. Olemassa olevia kenttiä muokataan projektin oikean yläkulman … → Settings -sivulla.

KenttäTyyppiKäyttötapa tässä oppaassa
StatusOlemassa oleva Single selectTyön tila. Muokkaa arvot alla olevan taulukon mukaisiksi.
SprintIterationStoryn ja taskin Sprint. Kenttä luodaan yllä; aikajaksot nimetään seuraavassa kohdassa.
Backlog orderNumberStoryjen tarkka järjestys: 10, 20, 30… Pienin ensin. Väliin voi lisätä esimerkiksi luvun 15.
Story pointsNumberStoryn suhteellinen koko, esimerkiksi 3, 5 tai 8. Jätä taskien kenttä tyhjäksi.
AssigneesGitHubin valmis kenttäTaskin tekijä tai tekijät. Kehittäjät sopivat työnjaosta.
LabelsGitHubin valmis kenttäLabel user-story ilmaisee, että issue on User Story. Label task ilmaisee, että issue on taski.
Parent issueGitHubin valmis kenttäNäyttää taskin Storyn. Ota näkyviin + → Hidden fields → Parent issue.
Sub-issue progressGitHubin valmis kenttäNäyttää suljettujen sub-issueiden edistymisen. Ota näkyviin Hidden fields -listasta.

Lähde: Iteration-kentän luominen ja aikajaksojen muokkaaminen.

Status-kentän arvot

Avaa projektin oikean yläkulman … → Settings ja valitse kenttäluettelosta Status. Nimeä tarvittaessa valmiit vaihtoehdot uudelleen ja lisää puuttuvat. Pidä nimet samoina kaikissa näkymissä. Halutessasi aseta Todo oletusarvoksi uusille kohteille.

ArvoSovittu merkitys
TodoTyötä ei ole aloitettu. Käytetään myös uusille Backlogin Storyille.
In progressTyötä tehdään. Story on tässä tilassa, kun sen toteutus on alkanut.
Ready for testToteutus odottaa katselmointia tai testausta.
Needs infoTyö odottaa lisätietoa tai esteen poistumista. Kirjaa este issueen.
DoneTyö 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ä.

4. Sprint-aikajaksojen valmistelu

Käytä edellisessä kohdassa luotua Sprint-kenttää. Tässä nimetään ja ajoitetaan Sprintit. Sprintin tavoite ja siihen valittavat Storyt päätetään myöhemmin Sprint Planningissa.

  1. Avaa projektin oikean yläkulman … → Settings ja valitse kenttäluettelosta Sprint.
  2. GitHub luo Iteration-kentän luonnissa aluksi kolme aikajaksoa. Nimeä ne Sprint 1, Sprint 2 ja Sprint 3. Lisää tarvittaessa sprinttejä Add iteration -painikkeella.
  3. Tarkista kunkin aikajakson aloitus- ja lopetuspäivä. Esimerkiksi Sprint 1 voi kestää 5.–18.10.2026 ja Sprint 2 19.10.–1.11.2026. Käytä oman tiimin aikataulua ja pidä Sprintit samanpituisina.
  4. Tallenna Save changes.

Sprint-arvon asettaminen issueen ei luo automaattisesti Sprintille omaa Boardia. Valmistele tarvittavat näkymät seuraavassa kohdassa.

Lähde: Iteration-kentän aikajaksot.

5. Backlog-, Sprint- ja Task Board -näkymien valmistelu

Näkymät voidaan valmistella tyhjään projektiin. Ne täyttyvät myöhemmin, kun Storyt ja taskit luodaan.

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 View → Save changes -toiminnolla.

Näkymän nimi ja suodatin

  1. Avaa valmisteltava välilehti, esimerkiksi View 1.
  2. Valitse hakukentän vierestä View → Rename view, kirjoita alla olevan taulukon nimi ja paina Enter.
  3. Valitse View-valikosta ulkoasuksi taulukon mukainen Table tai Board.
  4. Liitä suodatin taulukon tai Boardin yläpuolella olevaan Filter by keyword or by field -hakukenttään.
  5. Tallenna View → Save changes. Toista jokaiselle näkymälle.
NäkymäUlkoasuSuodatinTarkoitus
Product BacklogTableis:issue is:open label:user-storyKaikki avoimet Storyt, myös Sprinttiin valitut.
Odottavat StorytTableis:issue is:open label:user-story no:sprintStoryt, joita ei ole valittu Sprinttiin.
Sprintin StorytTableis:issue label:user-story sprint:@currentNykyisen Sprintin Storyt ja taskien edistyminen.
Sprintin Task BoardBoardis:issue label:task sprint:@currentNykyisen Sprintin kaikki taskit, myös valmistuneet.
Kaikki kohteetTableTyhjä suodatinYlläpitonäkymä puuttuvien kenttien etsimiseen.

Product Backlog -näkymän asetukset

  1. Avaa Product Backlog → View → Fields ja näytä Title, Labels, Status, Backlog order, Story points ja Sprint. Title on otsikkosarake. Kentät on luotu jo kohdassa 3.
  2. Valitse View → Sort → Backlog order nousevaksi. Tarvittaessa klikkaa Sort-valikossa valittua kenttää uudelleen vaihtaaksesi suunnan.
  3. Tallenna View → Save changes. Järjestysluvut täytetään vasta Storyjen luonnin yhteydessä: pienin luku sijoittaa Storyn ensimmäiseksi.

Sprint-sarakkeesta näkee myöhemmin, mitkä Storyt on valittu Sprinttiin. Jos itse luotu kenttä puuttuu Fields-listasta, tarkista saman projektin asetuksista, että kenttä on olemassa, sekä Table-näkymän + → Hidden fields -lista.

Sprintin Storyt -näkymän asetukset

Avaa Sprintin Storyt → View → Fields ja näytä Title, Status, Sprint, Story points ja Sub-issue progress. Tallenna View → Save changes. Esimerkiksi 4/6 suljettua taskia kertoo taskien tilanteesta. Se ei vielä osoita Storyn hyväksymiskriteerien tai Definition of Donen täyttymistä.

Story Pointien seurannan valmistelu

Jos haluat pisteet näkyviin tiloittain, luo New view -toiminnolla Table-näkymä Sprintin pisteet. Aseta suodattimeksi is:issue label:user-story sprint:@current.

  1. Valitse View → Fields ja näytä ainakin Title, Status, Story points ja Sprint.
  2. Valitse View → Group by → Status.
  3. Valitse View → Field sum → Story points. Pistesumma näkyy kunkin tilaryhmän otsikossa.
  4. Tallenna View → Save changes. Älä lisää is:open-suodatinta, jotta valmistuneet, suljetut Storyt pysyvät mukana.

Done-ryhmän summa kertoo kokonaan valmistuneiden Storyjen pisteet. Muiden ryhmien summat kuvaavat pisteytettyä, vielä keskeneräistä työtä. Seurannan tulkinta selitetään kohdassa Story Pointien seuranta.

Lähde: Numerokentän summan näyttäminen.

Sprintin Task Board -näkymän asetukset

Taulu näyttää taskit kortteina Status-sarakkeissa. Kortin Parent issue -kenttä kertoo, mihin Storyyn taski kuuluu. Se on tyhjä, kunnes taskit on luotu, lisätty projektiin ja merkitty nykyiseen Sprinttiin.

  1. Aseta ulkoasuksi Board ja View → Column by → Status.
  2. Valitse View → Fields ja näytä korteissa ainakin Assignees, Parent issue ja Sprint.
  3. Valitse View → Sort by → Parent issue, jotta saman Storyn taskit ovat peräkkäin kunkin Status-sarakkeen sisällä.
  4. Tallenna näkymän asetukset valitsemalla View → Save changes.

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.

Yhden Storyn taskien tarkastelu

Voit rajata saman Boardin yhden Storyn taskeihin lisäämällä hakukenttään nykyisen suodattimen perään parent-issue:"OMISTAJA/REPOSITORY#NUMERO". Korvaa OMISTAJA, REPOSITORY ja NUMERO Storyn repositoryn omistajalla, nimellä ja issue-numerolla. Esimerkiksi parent-issue:"oma-tiimi/oppilasrekisteri#12" näyttää Storyn #12 taskit. Poista tämä ehto, kun haluat taas kaikki Sprintin taskit näkyviin.

Jos Boardin View-valikossa on Slice by ja sen vaihtoehdoissa Parent issue, voit käyttää myös sitä Storyn valitsemiseen sivupaneelista.

Valinnainen ryhmittely: GitHubin dokumentaatio kuvaa myös Boardin View → Group by -toiminnon. Jos se ja Parent issue ovat käyttöliittymässäsi tarjolla, voit muodostaa Storyjen mukaan vaakasuuntaiset ryhmät. Jos Group by ei näy, käytä yllä kuvattua Boardia ja tarvittaessa parent-issue-suodatinta.

Lähteet: Boardin asetukset, Parent issue -suodatin.

Samat näkymät kaikille Sprinteille

Tallenna Sprintin Storyt- ja Task Board -näkymien oletussuodattimeksi yllä oleva sprint:@current. Se valitsee nykyisen aikajakson Sprint-kenttään määriteltyjen päivämäärien perusteella. Kun seuraava Sprint alkaa, samat näkymät näyttävät sen työt. Jokaiselle Sprintille ei tarvitse luoda omaa näkymää.

Jos ensimmäinen Sprint ei ole vielä alkanut tai haluat tarkastella tiettyä aiempaa tai tulevaa Sprinttiä, vaihda hakukentässä tilapäisesti sprint:@current esimerkiksi muotoon sprint:"Sprint 1". Muu suodatin säilyy samana: Story-näkymässä is:issue label:user-story ja Task Boardilla is:issue label:task. Voit käyttää myös sprint:@next tai sprint:@previous.

Älä tallenna tilapäistä Sprint-valintaa Save changes -toiminnolla, jos haluat säilyttää @current-oletuksen. Palauta tarkastelun jälkeen hakukenttään sprint:@current. Jos tämän päivän kohdalle ei ole määritelty Sprint-aikajaksoa, nykyisen Sprintin näkymä voi olla tyhjä.

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.

6. Projektin automaatioiden valmistelu

Tarkista projektin automaatiot

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.

7. Alusta on valmis – tarkista ennen Storyjen luomista
  • Repository, GitHub Project ja tiimin käyttöoikeudet on valmisteltu.
  • Product Goal ja yhteiset käytännöt on kirjattu projektin READMEhen.
  • Definition of Done ja Sprintin muistion pohja ovat repositoryssa; READMEssa on niiden toimivat linkit.
  • Labelit user-story ja task on luotu.
  • Kentät Sprint, Backlog order ja Story points on luotu kerran.
  • Status-vaihtoehdot ja Sprint-aikajaksot on määritelty.
  • Näkymät on nimetty ja niiden kentät, suodattimet, lajittelu ja Boardin Status-sarakkeet tallennettu.
  • Projektin automaatiot on tarkistettu.

Tyhjät näkymät ovat tässä vaiheessa normaaleja. Seuraavaksi aloitetaan Product Backlogin täyttäminen User Storyilla.

8. User Storyjen luominen Product Backlogiin
  1. Valitse Issues → New issue. Anna Storylle kuvaava otsikko, esimerkiksi Opiskelijan tietojen ylläpito.
  2. Kirjoita kuvaukseen käyttäjän tarve ja hyväksymiskriteerit alla olevan mallin mukaan.
  3. Valitse label user-story ja lisää issue Projects-kohdassa projektiin Oppilasrekisteri – Scrum. Luo issue Create- tai Submit new issue -painikkeella.
  4. Avaa projektin aiemmin valmisteltu Product Backlog -näkymä. Aseta Storyn Status = Todo ja Backlog order = 10. Kehittäjät arvioivat Storyn koon, esimerkiksi Story points = 5. Jätä Sprint tyhjäksi.
  5. Luo samalla tavalla muut Storyt ja anna niille järjestysluvut 20, 30, 40 ja 50. Product Owner vastaa järjestyksestä; kehittäjät vastaavat työmääräarvioista.

Kopioitava Storyn kuvaus

## 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.

9. Sprint Planning: tavoite ja Storyjen valinta

Valitse tavoite ja Storyt Sprint Planningissa

  1. Scrum Team keskustelee Sprintin arvosta ja muodostaa Sprint Goalin: Oppilasrekisteri mahdollistaa uuden opiskelijan lisäämisen ja hänen osallistumisensa opetukseen.
  2. Täydennä Sprint Goal valmistelussa luotuun docs/sprints/sprint-1.md-muistioon. Lisää päivämäärät, linkit valittuihin Storyihin ja linkki Definition of Doneen. Linkitä muistio projektin READMEhen.
  3. Kehittäjät valitsevat tavoitetta tukevat Storyt kapasiteettinsa perusteella. Esimerkissä valitaan opiskelijan tietojen ylläpito ja kurssille ilmoittautuminen.
  4. Aseta molempien Storyjen Sprint = Sprint 1 Product Backlog -näkymän Sprint-sarakkeessa. Muut kolme Storya jäävät ilman Sprint-arvoa odottamaan myöhempää suunnittelua.
  5. Pilko valitut Storyt seuraavan kohdan mukaisesti taskeiksi. Tavoite, Storyt ja taskit muodostavat Sprint Backlogin.

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.

10. Storyjen jakaminen taskeiksi

Avaa aiemmin valmisteltu Sprintin Storyt -näkymä. Jos Sprint 1 ei ole vielä alkanut, vaihda sprint:@current tilapäisesti muotoon sprint:"Sprint 1". Voit avata saman issuen myös Product Backlogista.

  1. Avaa Sprint 1:een valittu Opiskelijan tietojen ylläpito -issue klikkaamalla sen otsikkoa.
  2. Valitse kuvauksen alapuolelta Create sub-issue. Kirjoita otsikko, esimerkiksi Toteuta opiskelijatietojen tallennus ja päivitys.
  3. Kirjoita taskin konkreettinen sisältö ja valmistumisen ehdot. Lisää label task, sama Project ja sovittu Assignee. Valitse Create.
  4. Aseta taskille projektissa Sprint = Sprint 1 ja Status = Todo. Jätä Story points ja Backlog order tyhjiksi.
  5. Toista kaikille taskeille. Voit käyttää Create more sub-issues -valintaa. Jos taski on jo olemassa, käytä Storyn sub-issue-valikon Add existing issue -toimintoa.

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.

Avaa valmisteltu Sprintin Task Board -välilehti nähdäksesi luomasi taskit. Jokaiselle taskille asetetaan Sprint erikseen: Storyn Sprint-arvo ei periydy sub-issueille. Jos taulu on tyhjä, tarkista taskin Project, label task ja Sprint = Sprint 1. Jos Sprint 1 ei ole vielä nykyinen Sprint, käytä myös Task Boardilla tilapäistä suodatinta sprint:"Sprint 1".

Story 1: opiskelijan tietojen ylläpito

  • Määrittele opiskelijan tiedot ja tarkistussäännöt.
  • Luo tai päivitä opiskelijatietojen tietokantataulu.
  • Toteuta opiskelijan lisäys- ja muokkauslomake.
  • Toteuta tietojen tallennus ja päivittäminen palvelimella.
  • Rajaa toiminto ylläpitäjälle.
  • Kirjoita testit lisäykselle, päivitykselle ja virheellisille tiedoille.

Story 2: kurssille ilmoittautuminen

  • Näytä opiskelijalle kurssit, joille voi ilmoittautua.
  • Lisää ilmoittautumistoiminto käyttöliittymään.
  • Tallenna ilmoittautuminen tietokantaan.
  • Estä saman opiskelijan ilmoittautuminen samalle kurssille kahdesti.
  • Näytä vahvistus onnistuneesta ilmoittautumisesta.
  • Testaa onnistuva ilmoittautuminen ja virhetilanteet.

Kopioitava taskin kuvaus

## 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.

Lähde: Sub-issueiden luominen ja olemassa olevien issueiden liittäminen.

11. Päivittäinen työ ja pull requestit
  1. Kehittäjä ottaa sovitun taskin työn alle, asettaa itsensä Assignees-kenttään ja siirtää kortin Todo → In progress. Kortin siirtäminen muuttaa taskin Status-arvoa.
  2. Kirjaa kysymykset ja ratkaisut taskin kommentteihin. Esteen kohdalla käytä Needs info -tilaa ja kerro, mitä tarvitaan työn jatkamiseksi.
  3. Daily Scrumissa kehittäjät tarkastelevat Task Boardia suhteessa Sprint Goaliin, sopivat seuraavista töistä ja päivittävät toteutussuunnitelmaa.
  4. Tee koodimuutoksesta pull request ja viittaa siinä taskiin, esimerkiksi Refs #42. Siirrä taski Ready for test -tilaan, kun se on valmis sovittuun katselmointiin ja testaukseen.
  5. Kun taskin valmistumisen ehdot täyttyvät, sulje taski valmiina ja varmista Status = Done. Päivitä parent-Storyn tila erikseen vastaamaan kokonaisuuden tilannetta.

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.

Taskin sulkeminen päivittää Status-arvon Doneksi aiemmin valmistellulla automaatiolla. Varmista tarvittaessa tila myös käsin.

12. Valmistuminen ja Sprintin päättäminen

Milloin User Story on valmis?

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.

Sprint Review

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.

Keskeneräisen Storyn palauttaminen Backlogiin

  1. Kirjaa Sprintin muistioon Storyn linkki, alkuperäinen pistearvio, valmistunut työ ja jäljelle jäänyt työ. Tämä säilyttää tiedon Sprintin alkuperäisestä valinnasta myös kenttiä muutettaessa.
  2. Pidä keskeneräinen Story avoimena. Tyhjennä sen Sprint-kenttä, jotta se näkyy jälleen Odottavat Storyt -näkymässä.
  3. Tyhjennä myös sen keskeneräisten taskien Sprint-arvot. Säilytä niiden todellinen Status; jo aloitettua työtä ei tarvitse merkitä aloittamattomaksi.
  4. Jätä valmiit taskit suljetuiksi ja niiden Sprint-arvoksi päättynyt Sprint. Ne säilyvät saman Storyn sub-issueina.
  5. Product Owner järjestää Storyn uudelleen. Jos kehittäjät valitsevat sen myöhemmin Sprint Planningissa, aseta uusi Sprint Storylle ja vain sen jäljellä oleville taskeille.

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.

Sprint Retrospective ja seuraavan Sprintin suunnittelu

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.

Story Pointien seuranta

Story Pointeilla voidaan seurata pisteytetyn työn valmistumista. Esimerkiksi Sprinttiin valitaan 5, 3 ja 8 pisteen Storyt, yhteensä 16 pistettä. Kun 5 ja 3 pisteen Storyt ovat kokonaan valmiit, valmistunut työ on 8/16 eli 50 % Sprinttiin valituista pisteistä. Keskeneräisen 8 pisteen Storyn pisteitä ei vielä lasketa valmistuneiksi, vaikka osa sen taskeista olisi tehty.

Valmistelussa luodun Sprintin pisteet -näkymän Done-ryhmä näyttää valmistuneet pisteet. Prosentti lasketaan valmistuneiden pisteiden ja seurattavan kokonaispistemäärän suhteena; Field sum näyttää summat, eikä laske tätä prosenttia automaattisesti. Kirjaa Sprintin alussa valittu pistemäärä muistioon, jotta alkuperäinen suunnitelma säilyy myös työn sisällön muuttuessa.

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.

Halutessasi voit tehdä projektin Insights-osiossa kaavion. Aseta nykytilan kaavion suodattimeksi is:issue label:user-story sprint:@current, X-axis = Status ja Y-axis = Sum, numerokentäksi Story points. Näin kaavio näyttää pisteet työn tiloittain. Arkistoidut tai poistetut kohteet eivät kuulu Insights-seurantaan.

Insights: Burn up -kaavio

Avaa GitHub Projectin oikean yläkulman Insights ja valitse Burn up. Kaavio kuvaa projektiin lisättyjen kohteiden etenemistä ajan kuluessa. Sen tietolähteenä ovat projektin issuet ja pull requestit sekä niiden avoin/suljettu tila, eivät committien määrät.

  1. Rajaa kaavio User Storyihin suodattimella is:issue label:user-story. Näin taskit ja pull requestit eivät tule mukaan samoihin lukuihin.
  2. Avaa Configure. Aika-akseli on X-axis = Time. Jos haluat seurata pisteitä Storyjen lukumäärän sijaan, valitse Y-axis = Sum ja numerokentäksi Story points.
  3. Tallenna kaavion asetukset Save changes -toiminnolla.

Completed tarkoittaa tässä valmiina suljettuja issueita. Pelkkä projektin Status-arvon muuttaminen Doneksi ei siis riitä, jos Storyn issue jää avoimeksi. Sulje Story valmiina, kun sen hyväksymiskriteerit ja Definition of Done täyttyvät.

Koko tuotteen seurantaan käytä yllä olevaa suodatinta ilman Sprint-rajausta. Tietyn Sprintin tarkastelua varten voit lisätä esimerkiksi sprint:"Sprint 1".

Lähteet: Insights-kaavion asetukset, Insights-seurannan sisältö.



Toggle Menu