Exploring topics in efficient software testing A narrative literature review
Abstract
Bedrifter i dag opplever stort press i forhold til å levere programvare av høy kvalitet, og en av de viktigste verktøyene for å oppnå denne målsettingen er programvaretesting. Imidlertid har de fleste bedrifter ikke de nødvendige ressursene til å innføre det ypperste innen programvaretesting og må gjennomføre testing på en måte som utnytter de tilgjengelige ressursene på en kostnadseffektiv måte.
Denne bacheloroppgaven undersøker hva slags programvaretesting selskaper bør utføre og hvordan programvaretester burde utformes med formål å utnytte ressurser effektivt. Oppgaven tar også for seg om det finnes tekniske og organisatoriske faktorer som fremmer effektiv utnyttelse av testressurser. Metodisk er oppgaven basert på en narrativ litteraturgjennomgang som utforsker tilgjengelig litteratur innenfor emnet.
Funnene indikerer at det er mange fordeler og ulemper med både automatisk og manuell programvaretesting, og en hybrid tilnærming som kombinerer begge delene vil trolig være fordelaktig for de fleste selskaper. Tester på lavere testnivå, slik som enhetstester og regresjonstester, er godt egnet for automatisering ettersom de trenger å bli kjørt ofte og det er veldig fordelaktig med rask tilbakemelding til utviklerne. Imidlertid er det også klare fordeler ved å utføre en del automatisk testing også på høyere nivå, ettersom mange progamvarefeil ikke vil bli avdekket av lavnivåtester. Manuell testing har sine fordeler ettersom denne typen testing har lavere startkostnader og er bedre egnet i tilfeller der testingen er kompleks og vanskelig å programmere. Det er også fordelaktiv å teste tidlig i utviklingsfasen.
Litteraturen angående hva og når man burde automatisere inkluderer modeller som kan brukes for å simulere ulike grader av automatisering og estimere kostnadsbesparelene gitt av dette. Disse modellene er imidlertid trolig for arbeidskrevende til at selskaper realistisk kommer til å bruke dem. Det finnes også sjekklister som kan brukes som beslutningsverktøy i forhold til automatisering.
Når det gjelder utforming av tester, diskuteres det hvordan man burde lage testorakler for å være mest mulig effektiv med minst mulig innsats, gitt de to dimensjonene som definerer testorakler, nemlig frekvens og presisjon. Funnene tyder på at kun en programtilstand trenger å bli undersøkt og at det er mest effektivt å sjekke en delmengde av utdata slik som for eksempel returverdier. I forhold til tekniske faktorer fremheves det at det er viktig å velge de riktige verktøyene for testautomatisering. Strukturerte beslutninger om dette kan nås gjennom bruk av sjekklister som hjelper få med alt i forhold til teknologi, funksjonalitet og kostnad. Funnene om organisatoriske faktorer understreker viktigheten av modenhet i forhold til testprosesser og rollene som utviklere og testingeniører spiller, samt forholdene mellom disse to gruppene. Companies today are under great pressure to release high quality software and one of the most crucial tools for accomplishing this is software testing. Furthermore, most companies do not have the budget for state-of-the-art software testing and need to conduct testing in a manner that utilizes the available resources efficiently.
This bachelor thesis investigates what kind of software testing companies should be doing and how to design tests in order to be efficient with test resources, as well as if there are technical and organizational factors that facilitate efficient software testing. The thesis is based on conducting a narrative literature review that explores the available literature within the topic.
Findings indicate that there are many advantages and disadvantages of both automatic and manual testing and a hybrid approach combining both methods is likely advantageous for most companies. Tests at the lower test levels, such as unit tests, as well as regression tests are well suited for automation as they need to be executed often and give fast feedback to developers. However, there are also clear advantages to conducting some automated testing at the higher level, as there are many software failures that will not be reveal by low level test. Manual testing has its advantages as it has lower initial investment costs and is better suited for testing that is complex and difficult to code. It is also beneficial to start testing as early as possible during development.
The literature on what and when to automate contains models that can be used for simulating the benefits, however using these models probably requires too much effort for companies to realistically use them. There are also checklists that can be used as decision-support tools.
In terms of test design, how to efficiently create test oracles is discussed, highlighting the two dimensions that define oracle strategies, frequency and precision while trying to be cost efficient by keeping effort in mind. The findings imply that only one program state needs to be checked and that it is most efficient to check a subset of the program output such as return values. In terms of technical factors, selecting the appropriate test automation tools is important. This can be decided with the help of e.g. checklists that help make a structured decision about technology, features and cost for the tools. The findings on organizational factors emphasize the importance of test process maturity and the roles of and relationship between test engineers and developers.