Browser's Memory Profiling Automation
Liu, Lucy (2017)
Liu, Lucy
Haaga-Helia ammattikorkeakoulu
2017
All rights reserved
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2017091315034
https://urn.fi/URN:NBN:fi:amk-2017091315034
Tiivistelmä
Tämä opinnäytetyö on toimeksianto Comptel Oyj:n, Nexterday UI Platform, Terra-tiimille. Toimeksiantaja halusi automatisoidun muistin profiloinnin selaimelle, jotta tiimin sovelluskehittäjillä olisi helpompi tarkistaa koodin laatu ja havaita mahdolliset muistivuodot.
Muistivuoto tapahtuu, kun muistia, jota on varattu suorittamaan jotain operaatiota, ei vapauteta suoritetun operaation jälkeen. Näin ohjelmisto käyttää lopulta senkin muistin, jonka se tarvitsee toimiakseen normaalisti.
Muistin profilointia voidaan suorittaa manuaalisesti käyttämällä selaimen kehittäjätyökaluja nauhoittamaan selaimen suorituskykyä. Nauhoituksen aikana käyttäjän on tarkoitus tehdä jotakin toimintoa toistuvasti moneen kertaan kyseisellä sovelluksella, jotta saataisiin laadukasta palautetta suorituskyvystä. Kehittäjätyökalu piirtää kuvaajan, mistä käyttäjä näkee, kuinka paljon muistia on varattu eri vaiheissa. Tavallisesti on hyvä epäillä muistivuotoa, jos kyseinen kuvaaja muistuttaa sahalaitaa.
Automaatiolla on monia etuuksia, muun muassa se, että kehittäjät ja testaajat säästävät paljon aikaa. On hyvä automatisoida erityisesti sellaiset testit, jotka tarvitsevat paljon täsmällisiä syötteitä. Ennen automatisoinnin harkitsemista pitäisi manuaaliset testit olla ”täydellisiä”. Automaation alkukustannukset ovat korkeita, mutta testien muuttaminen automatisoinnin jälkeen saattaa myöskin tulla kalliiksi.
Koska tätä aihetta ei olla varsinaisesti aiemmin tutkittu, ainakaan Terra-tiimissä, on aloitettava perustutkimuksesta ja suunnittelusta. Tässä työssä käytetään Terra-tiimin nykyisiä työkaluja testaamiseen ja kehitykseen ja otetaan myös käyttöön pari uutta työkalua.
Tässä implementaatiossa käytetään Google Chromen komentorivikytkimiä, jotta muistin profilointi saataisiin käynnistettyä komentoriviltä. Ensiksi käynnistämme komentorivin automatisoitujen yksikkötestien kanssa Karma-työkalun avulla. Tämän jälkeen sama tehdään Nightwatch.js työkalulla, joka hoitaa funktionaalisien testien automatisoinnin. Komennot antavat syötteenä takaisin profiloinnin lokitiedoston, joka on raakaa JSON-formaattia.
Kyseisen tiedoston data pitää kääntää validiksi JSON:iksi, joten tiedostoa pitää parsia. Näin, saadaan myös muistin profilointia ajatellen turha tieto pois. Parsimisen päätteeksi luodaan uusi tiedosto. ElasticSearch valittiin tietokannaksi parsitulle datalle ja Kibana-työkalulla saadaan piirrettyä ja näytettyä infografiikkaa kyseisen ptofilointidatan pohjalta. Loppuautomaatio tapahtuu Jenkins CI:n avulla, jolle annetaan tarvittavat komentorivikomennot.
Muistivuoto tapahtuu, kun muistia, jota on varattu suorittamaan jotain operaatiota, ei vapauteta suoritetun operaation jälkeen. Näin ohjelmisto käyttää lopulta senkin muistin, jonka se tarvitsee toimiakseen normaalisti.
Muistin profilointia voidaan suorittaa manuaalisesti käyttämällä selaimen kehittäjätyökaluja nauhoittamaan selaimen suorituskykyä. Nauhoituksen aikana käyttäjän on tarkoitus tehdä jotakin toimintoa toistuvasti moneen kertaan kyseisellä sovelluksella, jotta saataisiin laadukasta palautetta suorituskyvystä. Kehittäjätyökalu piirtää kuvaajan, mistä käyttäjä näkee, kuinka paljon muistia on varattu eri vaiheissa. Tavallisesti on hyvä epäillä muistivuotoa, jos kyseinen kuvaaja muistuttaa sahalaitaa.
Automaatiolla on monia etuuksia, muun muassa se, että kehittäjät ja testaajat säästävät paljon aikaa. On hyvä automatisoida erityisesti sellaiset testit, jotka tarvitsevat paljon täsmällisiä syötteitä. Ennen automatisoinnin harkitsemista pitäisi manuaaliset testit olla ”täydellisiä”. Automaation alkukustannukset ovat korkeita, mutta testien muuttaminen automatisoinnin jälkeen saattaa myöskin tulla kalliiksi.
Koska tätä aihetta ei olla varsinaisesti aiemmin tutkittu, ainakaan Terra-tiimissä, on aloitettava perustutkimuksesta ja suunnittelusta. Tässä työssä käytetään Terra-tiimin nykyisiä työkaluja testaamiseen ja kehitykseen ja otetaan myös käyttöön pari uutta työkalua.
Tässä implementaatiossa käytetään Google Chromen komentorivikytkimiä, jotta muistin profilointi saataisiin käynnistettyä komentoriviltä. Ensiksi käynnistämme komentorivin automatisoitujen yksikkötestien kanssa Karma-työkalun avulla. Tämän jälkeen sama tehdään Nightwatch.js työkalulla, joka hoitaa funktionaalisien testien automatisoinnin. Komennot antavat syötteenä takaisin profiloinnin lokitiedoston, joka on raakaa JSON-formaattia.
Kyseisen tiedoston data pitää kääntää validiksi JSON:iksi, joten tiedostoa pitää parsia. Näin, saadaan myös muistin profilointia ajatellen turha tieto pois. Parsimisen päätteeksi luodaan uusi tiedosto. ElasticSearch valittiin tietokannaksi parsitulle datalle ja Kibana-työkalulla saadaan piirrettyä ja näytettyä infografiikkaa kyseisen ptofilointidatan pohjalta. Loppuautomaatio tapahtuu Jenkins CI:n avulla, jolle annetaan tarvittavat komentorivikomennot.