• No results found

Vi tror att vårt ramverk kan utgöra grund för en lämplig mall för fortsatt arbete, men att det krävs fler tester i att upptäcka och åtgärda fel. I vårt researcharbete fann vi flera automatiska verktyg för att injicera fel. Vi av-gränsade vårt arbete till att bara utföra injicering manuellt men menar att det skulle vara intressant att undersöka automatiska verktyg också.

Det ramverk för injicering och upptäckt av fel som presenterats i denna rap-port fungerade för att appliceras på målsystemet EXIT. Alla fel som injicer-ades hittinjicer-ades genom vår metod för upptäckt. Ytterligare tester, med fler försökspersoner som utför testerna och med ett bredare urval av metoder skulle kunna leda till ytterligare förbättringar i ramverket. Ramverket är utformat på ett sätt som gör att fler aktiviteter enkelt kan adderas till den befintliga aktivitetslistan. Studien svarar inte på om programmet EXIT är en bra representation av ett typiskt program. Vi tror därför att det vore värde-fullt att testa ramverket på andra program, för att undersöka om faserna i injicerings- eller upptäcktsmetoden bör justeras.

References

[1] A Tutorial on Software Fault Injection. URL:https://pdfs.semanticscholar.

org/ec6d/668dd3d45d9910a721f005ac4739d89af5c2.pdf (visited on 04/02/2019).

[2] “Lion Air crash plane ’not airworthy’”. en-GB. In: (Nov. 2018). URL:

https : / / www . bbc . com / news / world - asia - 46121127 (visited on 04/08/2019).

[3] “Boeing 737 Max: What went wrong?” en-GB. In: (Apr. 2019). URL:

https://www.bbc.com/news/world- africa- 47553174 (visited on 04/08/2019).

[4] Trendowicz, Adam. Software Cost Estimation, Benchmarking, and Risk Assessment The Software Decision-Makers’ Guide to Predictable Software Development. eng. The Fraunhofer IESE Series on Software and Systems Engineering. 2013. ISBN: 3-642-30764-7.

[5] Henrique Madeira Diamantino Costa, Marco Vieira. “On the Emula-tion of Software Faults by Software Fault InjecEmula-tion”. In: (2000). URL:

https : / / ieeexplore . ieee . org / stamp / stamp . jsp ? arnumber = 857571&tag=1.

[6] D, Itti Hooda Ph and Chhillar, Rajender Singh. Software Test Process, Testing Types and Techniques.

[7] Ebert, C. and Neve, P. De. “Surviving global software development”.

In: IEEE Software 18.2 (Mar. 2001), pp. 62–69. ISSN: 0740-7459.

DOI:10.1109/52.914748.

[8] Hamill, Maggie and Goseva-Popstojanova, Katerina. “Analyzing and predicting effort associated with finding and fixing software faults”.

eng. In: Information and Software Technology 87.C (2017), pp. 1–

18. ISSN: 0950-5849.

[9] Hamill, Maggie and Goseva-Popstojanova, Katerina. “Analyzing and predicting effort associated with finding and fixing software faults”.

In: Information and Software Technology 87 (2017), pp. 1–18. ISSN:

0950-5849. DOI:https://doi.org/10.1016/j.infsof.2017.01.

002. URL: http://www.sciencedirect.com/science/article/pii/

S0950584917300290.

[10] Financial Content: Cambridge University study states software bugs cost economy $312 billion per year. en. Jan. 2013. URL:https : / / insight . jbs . cam . ac . uk / 2013 / financial content cambridge university study states software bugs cost economy 312 -billion-per-year/ (visited on 06/07/2019).

[11] Papotti, Paulo, Do Prado, Antonio, and Souza, Wanderley de. “Re-ducing time and effort in legacy systems reengineering to MDD using metaprogramming”. eng. In: Proceedings of the 2012 ACM Research in Applied Computation Symposium. RACS ’12. ACM, 2012, pp. 348–

355. ISBN: 9781450314923.

[12] invisiblethread. The Mars Climate Orbiter: what, why, and lessons learned (The Invisible Thread). en. CT915. URL:https://www.ibm.

com/developerworks/community/blogs/invisiblethread/entry/

the_mars_climate_orbiter_what_why_and_lessons_learned (vis-ited on 03/29/2019).

[13] Baresi, Luciano and Pezzè, Mauro. “An Introduction to Software Test-ing”. en. In: Electronic Notes in Theoretical Computer Science 148.1 (Feb. 2006), pp. 89–111. ISSN: 15710661. DOI:10.1016/j.entcs.

2005.12.014. URL: https://linkinghub.elsevier.com/retrieve/

pii/S1571066106000442 (visited on 03/29/2019).

[14] ISO/IEC/IEEE 24765:2017(E): ISO/IEC/IEEE International Stan-dard - Systems and software engineering–Vocabulary. eng. IEEE, 2017. ISBN: 1-5044-4118-4.

[15] Cotroneo, D et al. “Experimental Analysis of Binary-Level Software Fault Injection in Complex Software”. eng. In: 2012 Ninth European Dependable Computing Conference. IEEE, 2012. ISBN: 9781467309387.

[16] Duraes, J.A and Madeira, H.S. “Emulation of Software Faults: A Field Data Study and a Practical Approach”. eng. In: 32.11 (2006), pp. 849–

867. ISSN: 0098-5589.

[17] Defect Report. July 2018. URL:http://softwaretestingfundamentals.

com/defect-report/.

[18] Kajko-Mattsson, Mira, Forssander, Stefan, and Andersson II, Gunnar.

“Software problem reporting and resolution process at ABB Robotics AB: State of practice”. In: Journal of Software Maintenance 12 (Sept.

2000), pp. 255–285. DOI:10.1002/1096-908X(200009/10)12:53.0.

CO;2-L.

[19] Kajko-Mattsson, M. “Corrective Maintenance Maturity Model: Prob-lem Management”. en. In: International Conference on Software Main-tenance, 2002. Proceedings. Montreal, Que., Canada: IEEE Comput.

Soc, 2002, pp. 486–490. ISBN: 978-0-7695-1819-0. DOI:10.1109/

ICSM.2002.1167809. URL: http://ieeexplore.ieee.org/document/

1167809/ (visited on 08/01/2019).

[20] Kajko-Mattsson, M. and Britts, S. “A Model of Front-End Pre-Change Corrective Testing”. In: 2006 International Conference on Software Engineering Advances (ICSEA’06). Oct. 2006. DOI:10.1109/ICSEA.

2006.261280.

[21] O’Regan, Gerard. “Software Reliability and Dependability”. In: (2017).

URL:https : / / www . springer . com / cda / content / document / cda _ downloaddocument/9783319640204-c2.pdf?SGWID=0-0-45-1613824-p181028689.

[22] Tsai, and T. K. and Iyer, R. K. “Fault injection techniques and tools”.

In: Computer 30.4 (Apr. 1997), pp. 75–82. ISSN: 0018-9162. DOI:

10.1109/2.585157.

[23] Lena Feinbube, Lukas Pirl and Polze, Andreas. “Software Fault In-jection: A Practical Perspective”. In: (2017). URL: https : / / www . intechopen . com / books / dependability engineering / software -fault-injection-a-practical-perspective.

[24] Svenningsson, Rickard. “Model-Implemented Fault Injection for Ro-bustness Assessment”. In: (2011). ISSN: 978-91-7501-173-8. URL:kth.

diva-portal.org/smash/get/diva2:460561/FULLTEXT01.pdf.

[25] Fault Injection Methodology and Tools. URL:https://ieeexplore.

ieee . org / stamp / stamp . jsp ? tp = &arnumber = 6013043 (visited on 04/09/2019).

[26] Increasing Test Coverage using Human-Based Approach of Fault In-jection Testing. URL:https://ieeexplore- ieee- org.focus.lib.

kth.se/stamp/stamp.jsp?tp=&arnumber=6140685&tag=1 (visited on 04/09/2019).

[27] Kanawati, G.A, Kanawati, N.A, and Abraham, J.A. “FERRARI: a flex-ible software-based fault and error injection system”. eng. In: 44.2 (1995), pp. 248–260. ISSN: 0018-9340.

[28] Han, Seungjae, Shin, K.G, and Rosenberg, H.A. “DOCTOR: an inte-grated software fault injection environment for distributed real-time systems”. eng. In: Proceedings of 1995 IEEE International Computer Performance and Dependability Symposium. IEEE Comput. Soc. Press, 1995. ISBN: 0818670592.

[29] EXIT - EXAMINATORER INOM INFORMATIONSTEKNIK. URL:http:

//kth.diva- portal.org/smash/get/diva2:432747/FULLTEXT01.

pdf (visited on 04/02/2019).

[30] Strohkirch., Cornelis and Österberg, Marcus. Effort distribution for migration of small legacy system.

[31] About JavaScript. en. URL: https://developer.mozilla.org/en-US/docs/Web/JavaScript/About_JavaScript (visited on 07/08/2019).

[32] Hakansson, Anne H. “Portal of Research Methods and Methodologies for Research Projects and Degree Projects”. eng. In: (2013).

[33] Babbie, Earl R. The basics of social research. en. 5th ed. Australia

; Belmont, CA: Wadsworth / Cengage Learning, 2011. ISBN: 978-0-495-81224-1.

[34] Creswell, John W. Qualitative inquiry and research design: choosing among five approaches. eng. 3. ed.. Thousand Oaks: SAGE Publica-tions, 2013. ISBN: 978-1-4129-9531-3.

[35] Niclas Andersson, Anders Ekholm. Vetenskaplighet – Utvärdering av tre implementeringsprojekt inom IT Bygg och Fastighet 2002.

se. URL:http://www.lth.se/fileadmin/projekteringsmetodik/

research/Other_projects/utvarderingver1.pdf (visited on 08/26/2019).

[36] Mandal, Pratap Chandra. “Qualitative research: Criteria of evaluation”.

en. In: International Journal of Academic Research and Develop-ment. IEEE Comput. Soc, 2002, pp. 591–596. ISBN: 978-0-7695-1819-0. URL:http://www.academicjournal.in/search/Qualitative%

20research:%20Criteria%20of%20evaluation (visited on 08/01/2019).

[37] Bryman, Alan. Social research methods. eng. 4. ed.. Oxford: Oxford University Press, 2012. ISBN: 978-0-19-958805-3.

Appendices

Appendix - Contents

A Exempel på typer av fel 63

B Loggbok Upptäcktsmetod 67

B.1 Fel 1 . . . 67 B.2 Fel 2 . . . 68 B.3 Fel 3 . . . 70 B.4 Problemanalysfas . . . 70 B.5 Förberedelsefasen . . . 70 B.6 Fel 4 . . . 71 B.7 Fel 5 . . . 72 B.8 Fel 6 . . . 73

C Loggbok Injiceringsmetod 75

C.1 Kravstudiefasen . . . 75 C.2 Källkodsanalys . . . 75 C.3 Fel 1 - WPFV . . . 75 C.4 Fel 2 - WPFV . . . 76 C.5 Fel 3 - WVAV . . . 77 C.6 Fel 4 - MIA . . . 78 C.7 Fel 5 - MVAE . . . 79 C.8 Fel 6 - MFC . . . 80

D Installation 81

A Exempel på typer av fel

I denna bilaga presenteras konkreta exempel av de faults som visas i tabell 2.1.

Listing 7: Pre-MIA

Listing 13: Pre-MLAC

Listing 21: Pre-WPFV f o o ( int x )

{

int b = x + x ; next ( b ) ;

}

Listing 22: WPFV f o o ( int x )

{

int b = x + x ; next ( x ) ;

}

Listing 23: Pre-WAEP f o o ( int x )

{

next ( x / 5 ) ; }

Listing 24: WAEP f o o ( int x )

{

next ( x − 5 ) ; }

B Loggbok Upptäcktsmetod

Här presenteras upptäckarens loggbok.

B.1 Fel 1

B.1.1 Problemanalysfas

Felet bekräftades genom att följa instruktionerna i felrapporten. Tester som utfördes var: Lägg till examinator i fliken ”Add examinator”. I fältet KTH-username matades strängen ”fel1.1” in. Därefter undersöktes fliken ”specify tutoring hours” enligt problembeskrivningen skulle här den nyligen tillagda examinatorn visas. Det faktiska resultatet var tomt under ”last name”, ”First name” samt email. Det fanns heller inga alternativ under rullistan ”Mail”.

B.1.2 Förberedelsefasen

För att testa om felet var unikt testades strängarna ”abc”, ”123”, ”def456”

vilket gav samma resultat som ovan.

Efter att ha gjort en initial granskning av koden valdes två funktioner att titta närmare på. Dessa var:"get_tutoring_hours()" i postgres.js,

"app.get('/specify_tutoring_hours', (req,res))" i server.js samt

"specify_tutoring_hours()" i parse_data.js. Det första som undersöktes var om den tillagda examinatorn låg i databasen och då framgångsrikt lagts till i databasen. Det bekräftades genom att undersöka datan i ”examiner”

Detta gjordes genom programmet pgAdmin4.

Efter att ha testat att byta ut "get_all_examiners" till innehållet i "get_examinator"

som gissningsvis hade samma funktionalitet riktades ansträngningarna åt funktionen get_all_examinators.

Efter att ha jämfört"get_all_examiners med "get_examiners fastställdes det att"get_all_examinators" hade request som callback istället för "result"

- rad 55 i postgres.js

B.1.3 Exekveringsfasen

Exekvering gjordes under kodanalysen eftersom det var ett effektivt sätt att undersöka en viss funktionalitet när koden undersöktes.

B.1.4 Utvärderingsfas

Det fastslogs att en kodanalysfas var helt avgörande för att upptäcka felet.

En förslagen förbättring till ramverket var att ha en egen kodanalysfas alter-nativt att lägga till det i aktivitetslistan.

B.2 Fel 2

B.2.1 Problemanalysfas

Problemet testades enligt problemrapporten genom att gå till fliken ”Add examinator”. Antagandet gjordes att det här skulle finnas något att inter-agera med som namnet antydde, alltså ett inmatningsfält, knapp eller lik-nande.

B.2.2 Förberedelsefase

Det var svårt att förbereda några test cases för detta fel eftersom testaren inte hade någon vetskap om hur fliken ”Add examinator” var tänkt att fungera.

Istället inspekterades koden för att hitta funktioner som var kopplade till orden ”add examinator”

Under mappen Views undersöktes filen add_examiner.html som jämfördes med add_director, inga skillnader noterades. Det var dock endast en hy-potes att de två vyerna skulle ha liknande funktionalitet. Efter att ha sökt i

server.js och sökt efter "add_examiner" hittades variabeln "add_examiner"

på rad 121 som var gråmarkerad i Visual Code vilket betydde att variabeln inte anvädes. Det fanns också en kommentar som löd: ”Gets view, creates main menu and send it back to the user”. Detta tydde på att funktionen hade med felet att göra. Efter att ha gjort en jämförelse med "app.get('/directors')"

noterades det att variabeln directors på rad 139 var ett argument i res.send på rad 142. Variabeln add_examinator las till på rad 123 efter ”menu” för att sen testas i exekveringsfasen.

B.2.3 Exekveringsfasen

Efter start av node.js testades fliken ”Add examinator” vilket gav variabeln,

”info” ett undefined error vilket sågs som rimligt eftersom info var ett return-värde i directors. Det antogs att ”info” ej skulle ingå i "add_examiners. Efter en andra exekvering visades ett liknande resultat som fliken add_director.

B.2.4 Utvärderingsfas

Tanken om en egen kodanalysfas förstärktes då det fanns väldigt lite att gå på då problembeskrivningen ej var så utförlig.

Förslag på förbättring av ramverk: Lägg till kodanalys som en egen fas och/eller lägg kodanalysfasen i förberedelsefasen då testfall inte (som i detta fall) går att göra innan en kodanalysfas.

Ett annat förslag är att möjligen ta bort exekveringsfasen och istället lägga till den som en aktivitet och/eller lägga till exekveringsmöjligheter i kod-analysfasen. Detta då upptäckaren ansåg att det var en fördel att exekvera koden under tiden för kodanalysen.

B.3 Fel 3

B.4 Problemanalysfas

Genom att starta programmet och trycka på ”Add budget year” noterades det att menyn som går över alla flikar hade en annorlunda formatering än de andra flikarna. Upptäckaren tolkade detta som att det var det som menades i problemrapporten.

B.5 Förberedelsefasen

En kodanalys genomfördes för att hitta funktioner som har med fliken ”Add budget year” att göra.

add_budget_year.html ersattes med add_director.html eftersom fliken

”Add director” hade den felaktiga menyn intakt. Detta visade sig inte fungera.

Efter att ha inspekterast html-koden i Google chrome fastslogs det att "id="mainmenu"

saknades under fliken ”Add budget year”.

Genom att kommentera bort rad 267 i server.js erhölls samma icke-formaterade meny för alla flikar. Efter att ha bytt ut rad 30 mot rad 36 i main_menu.js har också problemet flyttats till fliken ”Budget Year” istället för ”Add budget year”. Genom att ändra strängen "add_budget_year till en annan sträng, i detta fall strängen ”123” löstes problemet. Upptäckaren trodde dock inte detta var lösningen till det underliggande problemet utan misstänkte att felet låg under "Views/add_budget_year.html" eller mellan rad 30 och 34 i

main_menu.js

Efter granskning och jämförelser med liknande if-satser i main_menu.js noterades att det saknades et +-tecken på rad 31.

B.5.1 Utvärderingsfas

Efter att tillsynes ha löst problemet på ett för upptäckaren konstigt sätt genom att ändra en path till en path som inte fanns var det svårt att hitta den bakom-liggande felet.

B.6 Fel 4

B.6.1 Problemanalysfas

Enligt problembeskrivningen gick det inte att starta programmet. Efter att ha försökt starta programmet gav terminalen ett syntax-error på rad 207 i

"parse_data.js"

B.6.2 Förberedelsefasen

Det första som gjordes var att undersöka rad 207 i "parse_data.js". Efter jämförelser med funktionen db.get_budget_years noterades det att if-satsen saknades på rad 207. Efter åtgärd fungerade programmet enligt problem-beskrivningen, dvs programmet startade.

B.6.3 Utvärderingsfas

Upptäckaren ansåg att detta problem var väldigt enkelt att upptäcka då ter-minalen pekade ut var problemet låg och att mjukvaran är utformad på ett sådant sätt att det finns många funktioner som liknar varandra och därför går att jämföras med varandra.

B.7 Fel 5

B.7.1 Problemanalysfas

För att återskapa problemet startades programmet och flera flikar undersök-tes. På varje flik hade menyn en annorlunda layout jämfört med kravspeci-fikationen. Texten undefined noterades också ovanför html-innehållet av menyn.

B.7.2 Förberedelsefasen

En kodanalys utfördes som tillval från aktivitetslistan. Eftersom problemet hade att göra med menyn undersöktes server.js, postgres.js, parse_data.js samt main-menu.js med sökordet menu. Menyn undersöktes med verktyget

”inspect” i Google chrome. Där upptäcktes strängen undefined låg i head-ern. Efter att ha undersökt main_menu.js närmare baserat på att den skapar menyn, upptäcktes det att två taggar saknades eftersom taggarna </ul></div>

stängde uttrycket men det fanns inga taggar som matchade dem. Efter att ha lagt till <dib><ul> i början av html-koden försvann strängen ”unde-fined” efter exekvering. Menyn stämde dock fortfarande inte överens med kravspecifikationen och slutsatsen att css-kod till html-utrycken saknades gjordes. Upptäckaren misstänkte att det saknades en ”style” till den omslu-tande <div>-taggen. I main.css fanns en style med namnet ”mainmenu”.

id=mainmenu las till <div>-taggen på rad 2 i main_menu.js efter exekver-ing var formaterexekver-ingen på menyn samma som i kravspecifikationen.

B.7.3 Utvärderingsfas

Upptäckaren tyckte att felet var svårt att åtgärda eftersom det inte fanns ett tydligt mönster att jämföra med som i tidigare fel.

B.8 Fel 6

B.8.1 Problemanalysfas

Problemet återskapades enligt problembeskrivningen. I filen ”Add degree project” skapades ett nytt projekt med en student. Title: 1234abc som ett master-projekt startdatum: 1992-01-11 slutdatum: 1992-01-12 på KTH. Per-sonnummer: 8909129567 First name: test Last name: test2 Därefter tryck-tes knappen insert in - resultatet var att ingening hände med sidan. I Google chrome stod det ”Waiting for localhost”. Genom att studera fliken Network i chrome konstaterades det att inga paket skickades när upptäckaren klickade på insert. Upptäckaren gissade att felet hade något med kommunikationen med databasen att göra, dvs något fel när informationen skulle skickas till databasen.

B.8.2 Förberedelsefasen

Server.js genomsöktes med sökordet ”degree-project”. På rad 107 till 112 upptäcktes två variabler som inte användes. Det var gällde också en post-metod som upptäckaren antog skulle skicka data till en server. Detta tydde på att denna metod rörde problemet. Genom att jämföra med en liknande post-metod på rad 93 antog upptäckaren att ett metodanrop på 112 saknades (db.add_degree-project(...). db importerades från postgres.js. Upp-täckaren undersökte metoden "add_degree_projekt" i postgres.js för att se vilka argument samt i vilken ordning de skulle anropas på var. Där såg up-ptäckaren const add_degree_project = (req, res, mail, project_info).

Upptäckaren la då till db.add_degree_project(req,res,examiner_mail, post_info);

på rad 112 i server.js.

B.8.3 Utvärderingsfas

Upptäckaren förstod snabbt att felet hade med servern att göra. Det var däremot ett svårt fel att upptäcka då ett större kodstycke saknades.

C Loggbok Injiceringsmetod

Här presenteras injicerarens loggbok. Samtliga fel som injicerades finns till-gängliga i följande länk: https://gits-15.sys.kth.se/fmagnell/EXIT-injicerade-fel

C.1 Kravstudiefasen

Det som fanns dokumenterat om EXIT lästes, vilket innefattade den ursprung-liga och den migrerade versionen. Då den migrerade versionen inte var helt färdig så skilde sig programmets funktionalitet. När jag upplevde att jag förstod mig på hur EXIT fungerade så gick jag till nästa fas.

C.2 Källkodsanalys

Programmet bestod av färre kodinstruktioner än vad jag förväntade mig, och dess funktioner var även väldigt snarlika varandra vilket underlättade för förståelsen. Majoriteten av filerna var ”dependencies” från olika tillägg som programmet hade, som node.js osv. Dessa undersöktes inte. För att se att jag förstod vissa funktioner så ändrade jag lite i koden för att sen se dess resultat, vilket även gav mig lite insyn till fasen att identifiera svaga punkter.

C.3 Fel 1 - WPFV

C.3.1 Identifiera svaga punkter

Min tanke var att injicera ett fel som skulle resultera i att antingen hämtning eller skrivning till databasen skulle fungera inkorrekt. Därför letade jag efter lämpliga kodinstruktioner att mutera i filen postgres.js (filen som hanterar databasen).

C.3.2 Injicera fel

I fil postgres.js kodinstruktion 55 injicerades felet. Redan vid föregående steg såg jag vilket fel jag ville injicera, jag ändrade ett parametervärde i ett funktionsanrop så att det inte längre gick att se tillgängliga examinatorer när man besökte fliken ”specify tutoring hours”.

Kodinstruktionen 55 innan mutation:

callback(result)

Kodinstruktionen 55 efter mutation:

callback(request)

C.3.3 Exekvera

Jag startade det felaktiga programmet för att verifiera att det injicerade felet faktiskt resulterade i det jag hade för avsikt.

C.4 Fel 2 - WPFV

C.4.1 Identifiera svaga punkter

När jag påbörjade fasen så hade jag inget specifikt typ av fel planerat att injicera. Därav gick jag igenom koden för att hitta något lämpligt. I filen server.js såg jag en kodinstruktion som skickar en request till servern, genom att ändra förfrågan kommer fel information att skickas.

C.4.2 Injicera fel

I fil server.js kodinstruktion 123 injicerades felet. Felen injicerades genom att ett parametervärde raderades i förfrågan till servern. Felet gör så att man inte längre kan se lägga till examinatorer i fliken ”add examiner”.

Kodinstruktionen 123 innan mutation:

res.send(header+menu+add_examiner+footer) Kodinstruktionen 123 efter mutation:

res.send(header+menu+footer)

C.4.3 Exekvera

Felet verifierades genom att det starta programmet och besöka funktionen som triggar förfrågan till servern.

C.5 Fel 3 - WVAV

C.5.1 Identifiera svaga punkter

Då båda första felen som injicerades var av typen WPFV så gick jag in med syftet att injicera en annan typ av fel. Jag tittade igenom tabell 2.1 och bestämde mig för att hitta en lämplig plats att injicera ett fel av typen WVAV. I filen main_menu.js hittade jag en lämplig kodinstruktion att mutera, som påverkar hur menyfliken i programmet visas.

C.5.2 Injicera fel

I filen main_menu.js kodinstruktion 31 injicerades felet. Felet injicerades genom att mutera kodinstruktionen från att tilldela en varibel ett värde genom tilldelningsoperatorn += till =. Felet leder till att menyn försvinner när man besöker fliken ”Add bubdget year”.

Kodinstruktionen 31 innan mutation:

ret += "<li class="active"><a href="/add_budget_year">Add budget year</a></li>";

Kodinstruktionen 31 efter mutation:

ret = "<li class="active"><a href="/add_budget_year">Add budget year</a></li>";

C.5.3 Exekvera

Felet verifierades genom att starta programmet och besöka fliken ”Add bud-get year”, där layouten för menyn skiljer sig från övriga flikar. Det känns som att detta steg kan bakas ihop med föregående steg då det känns som att arbetsinsatsen är såpass liten för att vara en egen fas.

Felet verifierades genom att starta programmet och besöka fliken ”Add bud-get year”, där layouten för menyn skiljer sig från övriga flikar. Det känns som att detta steg kan bakas ihop med föregående steg då det känns som att arbetsinsatsen är såpass liten för att vara en egen fas.

Related documents