Lakki Nöyrästi vain lakki kourassa... Jussi Vänskä Espotel Oy vierailuluentosarja OTM kurssi 2010 2.luento: ohjelmistokehityksen päivärutiinit Lisää ot sik k o osoit t am alla Siitä vain reunasta Miten syödään elefantti? Jussi Vänskä OTM kevät 2010
TDD TDD eli Test Driven Development Regressiot Soveltuvuus ketteriin menetelmiin Pakottaa pieniin ohjelmistokokonaisuuksiin n. 1300 jäjestelmätestitapausta n. 500 regressiotestitapausta 10-100 yksikkötestitapausta per moduli Wanhan järjestelmän koko noin 500k SLOC Nykyisen koko arviolta 600k SLOC, mutta runsas XML pohjainen ohjelmiston tuottaminen ja mallien käyttö hankaloittavat arvion tekemistä.
CI Continous Integration Jatkuva integrointi- ja yksikkötestaus Aina jotakin toimivaa, thy shall never break the build Ei tarvita erillisiä testisovelluksia yksikkötestikehyksen kanssa Kuinka usein? Edellyttää työkalutukea sekä koosteen että käännöksen hallintaan Soveltuu ketteriin menetelmiin.
Mihin tarvitaan? Vaatimustenhallinta Ominaisuuksien hallinta Versionhallinta Yksikkötestaus Integrointitestaus Laitetestaus CI (ohjelmointi)
Vaatimusten hallintaan projektissa käytetään Borlandin Caliber ohjelmistoa, mutta sille vaihtoehtoisia ratkaisuja on haettu ohjelmista paristakin ohjelmistosta. TestLink http://testlink.sourceforge.net/docs/testlink.php Polarion http://www.polarion.com/ Caliber http://www.borland.com/us/products/caliber/index.html Erillisen työkalun käyttöön taulukkolaskentaohjelmiston sijasta on pari hyvää syytä Jäljitettävyys Tuki kehitysympäristölle Liitynnät muihin järjestelmiin
Ominaisuuksien hallinta on toteutettu Mantis tietokannan avulla. Mantis toimii sekä SCRUM backlogina että bugitietokantana. Tällöin backlog taskit on helppo linkittää toteutus-, testaus- ja reklamaatiotaskeihin. http://www.mantisbt.org/ http://scrum.dk/pages/about-scrum Ilman toimivaa backlog hallintaa on turha yrittää pyörittää SCRUM kierroksia. AP ja toteutustiimin nopeuden arviointi on laajennettu Mantis tietokantaan. Johtuen projektissa työskentelevien ulkopuolisten henkilöiden määrästä on työajan(laskutuksen) seuranta näppärästi yhdistettävissä samaan työkaluun.
Mantis
Versionhallinta on ehkä itsestäänselvyys, mutta sen valinta ei välttämättä ole. Nykyisellään vaihtoehtoja on käytännössä kolme; GIT, SVN ja CVS. Versionhallintaa käytetään projektissa myös koontikäännöskuorien määrittelemiseen. Käytännössä tämä tarkoittaa käännöksiin liittyvän metatiedon versioitumista varsinaisen lähdekoodin tavoin. http://svnbook.red-bean.com/ Lähdekoodin hallinta on muotoutunut rajusti projektin edetessä ja hioutunut hyvinkin joustavaksi.
SCM Jokainen projekti voi määritellä vapaasti oman julkaisun rakenteensa ja siihen kuuluvat ohjelmistoversiot Ohjelmistokomponentti voi versioitua vapaasti omaa tahtiaan. Komponenttien jakaminen eri projektien välillä helppoa
Yksikkötestauksen työkalun valintaan vaikuttaa vahvasti käytettävä käännösympäristö. Projektin ohjelmistot käännetään autotool ohjelmakokoelman avulla. Qt sovelluksille on tosin omakin testauskehys, mutta sitä ei projektissa hyödynnetä. CXXtest on junit perheen jälkeläinen, johon projekti päätyi lähinnä gcov tuen takia. void testcsoftwareversion::teststringconversion() { } std::string version = "10.9"; CSoftwareVersion<unsigned int> application( version ); std::string appversion = application; TS_ASSERT_EQUALS( version, appversion ); unsigned int b = 10; unsigned int c = 9; CSoftwareVersion<unsigned int> application2( b, c ); std::string someversion = application2; TS_ASSERT_EQUALS( version, someversion );
Integrointitestaus on huonosti automatisoitavissa. Usein integrointia varten on erillinen vastuuhenkilö. Toistaiseksi integrointitestaus suoritetaan käsin, mutta kehityksen alla on simuloidun laiteympäristön ja skriptattujen testitapausten yhdistäminen CI ympäristöön. Tällöin yksikkötestien lisäksi suoritetaisiin myös skriptatut integrointitestit automaattisesti. Testitapausten kehitys oli alunperin LabViev ja TestStand pohjainen, mutta siirtymässä työkaluriippumattomaan Python pohjaiseen skriptaukseen.
Laitetestaus on korvattu liki kokonaan simulaattoritestauksella. Ainoastaan julkaisujen ja uusien laiteominaisuuksien yhteydessä käytetään enää aitoa laitetta. Integrointitestaus ja käytettävyystestaus suoritetaan pääsääntöisesti simulaattorilla.
Jatkuvan integroinnin ympäristö osuus on määräävin kaikista kehitysympäristöön liittyvistä ohjelmistoista. Muiden työkalujen on toimittava yhteen CI ympäristön kanssa. Taipuminen näin päin siitä syystä, että toimivia CI ympäristöjä ei ole liiaksi saatavilla. Cruise http://cruisecontrol.sourceforge.net/dashboard.html Pulse http://zutubi.com/ Polarion http://www.polarion.com/ Polarion on laaja-alaisuutensa ansiosta tulevaisuuden työkalu, vaikka tällä hetkellä käännöspalvelut on koottu Pulseen.
Ohjelmointityökalut ovat oikeastaan toisarvoisia. Alunperin käytössä olivat ainakin seuraavat työkalut VisualStudio KDevelop Emacs Eclipse Qt designer Tärkempi varsinaista ohjelmointieditoria on käännösjärjestelmä. Alunperin ohjelmisto oli käsin määritellyn maken varassa. Sittemmin käännös siirrettiin autotool pohjaiseksi ja seuraava askel on cmake. Projektin edetessä editoriksi on vakiintunut Eclipse IDE mutta tuettuna on edellen cmaken avulla myös VisualStudio.
Eclipse
Toteutusvuo Uudet ominaisuudet järjestelmään käyvät läpi seuraavat vaiheet enemmän tai vähemmän SCRUM prosessin mukaisesti. Vaatimusmäärittely Valmistumistavoite Sprint aikataulutus Backlog Taski Testaus Hyväksyminen (DONE)