Data-intensiivisen ohjelmiston refaktorointi Python-ympäristössä : Tapaustutkimus
Boman, Konsta (2020)
Boman, Konsta
2020
Tietotekniikan DI-tutkinto-ohjelma - Degree Programme in Information Technology, MSc (Tech)
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2020-02-26
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202002142103
https://urn.fi/URN:NBN:fi:tuni-202002142103
Tiivistelmä
Python-ympäristöön on viimeisen vuosikymmenen aikana kehitetty monipuolinen kattaus tehokkaita ja suosittuja data-analyysityökaluja. Python on saavuttanut perinteisiä data-analyysityökaluja, kuten ohjelmointikieli-R:ää, niin suosiossa kuin toiminnallisuuden kattavuudessa. Työn tarkoitus on tutkia Pythonia data-analyysityökaluna ja löytää uusien data-analyysikirjastojen käyttötarkoituksia sekä hyviä ja huonoja puolia. Kerättyä tietoa hyväksi käyttäen tehdään tapaustutkimus, jossa kirjoitetaan uudelleen Pythonilla toteutettu vanha data-analyysisovellus. Vanha sovellus kaipaa uudelleentoteutusta, sillä sen ylläpito on työlästä ja sen suorituskyky on heikko. Näihin ongelmiin etsitään ratkaisua kirjoittamalla data-analyysi uudelleen uusia kirjastoja hyödyntäen.
Tapaustutkimuksen data-analyysisovellus analysoi testattavalta kosketuspaneelilta saatua dataa ja vertaa sitä robotilta saatuun referenssidataan. Datasta analysoidaan erilaisia virhearvoja, kuten lineaarivirhettä. Sovellus käyttää tiedon tallennukseen relaatiotietokantaa.
Uusi toteutus vastaa vanhan toteutuken toiminnallisuutta. Toteutuksia vertaillaan niiden suorituskyvyn ja ylläpidettävyyden perusteella. Suorituskykyä mitataan Python-profiloijalla ja ylläpidettävyyttä verrataan rivimäärällä ja huonoon lähdekoodiin viittaavia rakenteita etsimällä.
Uuden toteutuksen pääasiallisiksi työkaluiksi valikoituivat NumPy ja Pandas, jotka auttoivat ongelmakohtien ratkaisemisessa merkittävästi. Uusi toteutus on näiden työkalujen käytön myötä reilusti tehokkaampi ja tiiviimpi. Suorituskykyparannukset saavutettiin hyödyntäen NumPyn:n ja Pandasin optimoituja metodeja natiivien Python-metodien sijaan ja suurin syy koodikannan pienenemiselle on vastuunsiirto uusille kirjastoille monen toiminnallisuuden kohdalla. Python environment has received a versatile, efficient and popular set of tools for data-analysis in the past decade. Python has reached more traditional data-analysis tools, such as the programming language R, in popularity and functionality. In this thesis, Python is researched as a data-analysis tool. The goal is to find the most efficient new libraries to develop data-analysis. The libraries are studied for their intented uses and in order to find their pros and cons. Based on the literature review, a case study is conducted. An old Python based data-analysis application is rewritten with new tools. The old application is in need of a reimplementation since it is troublesome to maintain and the performance is poor. The maintainability and performance issues are the two main problems that the thesis aims to solve.
The application studied in this case study analyses performance of touchpanels. Coordinates reported by the touchpanel are compared to reference values from a robot-drawn line. Error values such as linearity-error are calculated from the data. The application uses relational database for data storage.
The functionality of the new implementation is made to correspond the old application. Implementations are compared based on their maintainability and performance. Performance is measured with a profiler and maintainabilites are compared based on lines of code and structures that implicate poor design.
NumPy and Pandas were selected as the main tools for the new implementation. These libraries played a major role in solving the performance and maintainability issues. The new implementation has greatly improved performance and requires a lot smaller code base in comparison to the old implementation. Most of the performance improvement was achieved by utilizing optimized methods of NumPy and Pandas over native Python methods. Smaller code base is mainly due to the transfer of liability to NumPy and Pandas.
Tapaustutkimuksen data-analyysisovellus analysoi testattavalta kosketuspaneelilta saatua dataa ja vertaa sitä robotilta saatuun referenssidataan. Datasta analysoidaan erilaisia virhearvoja, kuten lineaarivirhettä. Sovellus käyttää tiedon tallennukseen relaatiotietokantaa.
Uusi toteutus vastaa vanhan toteutuken toiminnallisuutta. Toteutuksia vertaillaan niiden suorituskyvyn ja ylläpidettävyyden perusteella. Suorituskykyä mitataan Python-profiloijalla ja ylläpidettävyyttä verrataan rivimäärällä ja huonoon lähdekoodiin viittaavia rakenteita etsimällä.
Uuden toteutuksen pääasiallisiksi työkaluiksi valikoituivat NumPy ja Pandas, jotka auttoivat ongelmakohtien ratkaisemisessa merkittävästi. Uusi toteutus on näiden työkalujen käytön myötä reilusti tehokkaampi ja tiiviimpi. Suorituskykyparannukset saavutettiin hyödyntäen NumPyn:n ja Pandasin optimoituja metodeja natiivien Python-metodien sijaan ja suurin syy koodikannan pienenemiselle on vastuunsiirto uusille kirjastoille monen toiminnallisuuden kohdalla.
The application studied in this case study analyses performance of touchpanels. Coordinates reported by the touchpanel are compared to reference values from a robot-drawn line. Error values such as linearity-error are calculated from the data. The application uses relational database for data storage.
The functionality of the new implementation is made to correspond the old application. Implementations are compared based on their maintainability and performance. Performance is measured with a profiler and maintainabilites are compared based on lines of code and structures that implicate poor design.
NumPy and Pandas were selected as the main tools for the new implementation. These libraries played a major role in solving the performance and maintainability issues. The new implementation has greatly improved performance and requires a lot smaller code base in comparison to the old implementation. Most of the performance improvement was achieved by utilizing optimized methods of NumPy and Pandas over native Python methods. Smaller code base is mainly due to the transfer of liability to NumPy and Pandas.