Abstract
Embedded systems are used everywhere in our daily lives. About 90% of the produced microprocessors are used in embedded systems. Embedded systems get more and more dominated by software. Bugs remain in the software and can often be observed for the first time only in late development phases. It is difficult to reproduce bugs in embedded systems based on test reports. Our proposed automated bug reproduction concept is capable of handling sensor inputs as well as thread schedules. It reduces the manual effort while debugging a reproduced bug by applying dynamic verification during replay . This chapter shows the implementation of assertions and presents anomaly detection techniques to locate the root-causes of bugs. Anomalies can be detected by comparing executions which cause the bug with executions which do not cause the bug. Interferences between two executions which can be compared have to be detected. Using partitioning techniques, we explain coverage-based analysis and metrics as well as invariant-based analysis. The monitoring of the software for these analyses may cause a high overhead and thus may result in long monitoring times. Therefore, we show how monitoring can be accelerated by hierarchical refinement. Most of the available automated bug reproduction and dynamic verification tools are only applicable on specific platforms. Debugging tools, like the GDB, are usually the first tools which are available for new embedded platforms. Therefore, our tool is implemented based on the GDB . We present a tool for automated bug reproduction and efficient dynamic verification implemented with a debugger tool.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Notes
- 1.
Status July 2016
References
Navit-car navigation system. http://www.navit-project.org. Accessed Aug 2016
Abreu R (2009) Spectrum-based fault localization in embedded software. PhD thesis, University Delft
Amiar A, Delahaye M, Falcone Y, du Bousquet L (2013) Fault localization in embedded software based on a single cyclic trace. In: ISSRE ’13: proceedings of the 24th international automated reproduction and analysis of bugs in embedded software 39 symposium on software reliability engineering. IEEE, pp 148–157
Anderson P (2008) The use and limitations of static-analysis tools to improve software quality. CrossTalk J Defence Softw Eng 42(4):18–21
Anvik J, Hiew L, Murphy GC (2006) Who should fix this bug? In: ICSE ’06: proceedings of the 28th international conference on software engineering. ACM, pp 361–370
Barringer H, Havelund K (2011) Tracecontract: a scala dsl for trace analysis. In: FM ’11: proceedings of the 17th international symposium on formal methods. Springer, pp 57–72
Burger M, Zeller A (2011) Minimizing reproduction of software failures. In: Proceedings of 2011 international symposium on software testing and analysis, pp 221–231
Charette RN (2009) This car runs on code. IEEE Spectr 21(6)
Dallmeier V, Lindig C, Zeller A (2005) Lightweight bug localization with ample. In: AADEBUG ’05: proceedings of the sixth international symposium on automated analysis-driven debugging. ACM, pp 99–104
Dovgalyuk P (2012) Deterministic replay of system’s execution with multi-target qemu simulator for dynamic analysis and reverse debugging. In: CSMR ’12: proceedings of the 16th European conference on software maintenance and reengineering. IEEE, pp 553–556
Ebert C, Jones C (2009) Embedded software: facts, figures and future. Computer 42(4):42–52
Eichelberger H, Kropf T, Greiner T, Rosenstiel W (2013) Runtime verification driven debugging of replayed errors. In: ICTSS ’13: proceedings of the PhD workshop of ICTSS’13
Eichelberger H, Kropf T, Ruf J, Greiner T, Rosenstiel W (2015) Efficient fault localization during replay of embedded software. In: SEAA ’15: proceedings of the 41th euromicro conference series on software engineering and advanced applications. IEEE, pp 43–52
Eichelberger H, Ruf J, Kropf T, Greiner T, Rosenstiel W (2014) Debugger-based record replay and dynamic analysis for in-vehicle infotainment. In: ICCSA ’14: Proceedings of the 14th international conference on computational science and its applications. Springer, pp 387–401
Foundation G (2016) Gdb: the gnu project debugger. http://www.sourceware.org/gdb. Accessed Aug 2016
Foundation G (2016) Gnu pth—the gnu portable threads. http://www.gnu.org/software/pth/. Accessed Aug 2016
Goeders J, Wilton S (2014) Effective fpga debug for high-level synthesis generated circuits. In: FPL ’14: proceedings of the 24th international conference on field programmable logic and applications. IEEE, pp 1–8
Goll J (2012) Methoden des software engineering. Springer, Wiesbaden
Gomez L, Neamtiu I, Azim T, Millstein T (2013) Reran: timing- and touch-sensitive record and replay for android. In: ICSE ’13: proceedings of the 35th international conference on software engineering. ACM, pp 72–81
Heckeler P, Eichelberger H, Schlich B, Kropf T, Ruf J, Huster S, Burg S, Rosenstiel W (2013) Accelerated model-based robustness testing of state machine implementations. ACM Appl Comput Rev 13(03):50–67
Hower D, Hill M (2008) Rerun: exploiting episodes for lightweight memory race recording. In: ISCA ’08: proceedings of the 35th international symposium on computer architecture. ACM/IEEE, pp 265–276
Hutchins M, Foster H, Goradia T, Ostrand T (1994) Experiments of the effectiveness of dataflow- and controlflow-based test adequacy criteria. In: ICSE ’94: proceedings of the 16th international conference on software engineering. IEEE, pp 191–200
Jiang B, Long X, Gao X, Liu Z, Chan W (2011) Floma: statistical fault localization for mobile embedded system. In: ICACC ’11: proceedings of the 3rd international conference on advanced computer control. IEEE, pp 396–400
Jones C (2012) A short history of the cost per defect metric. http://www.ifpug.org/Documents/Jones-CostPerDefectMetricVersion4.pdf. Accessed Aug 2016
Jones JA, Harrold MJ, Stasko J (2002) Visualization of test information to assist fault localization. In: Proceedings of 2002 international conference on software engineering, pp 467–477
Joorabchi ME, Mirzaaghaei M, Mesbah A (2014) Works for me! characterizing non- reproducible bug reports. In: MSR ’14: proceedings of the 11th working conference on mining software repositories. IEEE, pp 62–71
Laadan O, Viennot N, Nieh J (2010) Transparent, lightweight application execution replay on commodity multiprocessor operating systems. In: SIGMETRICS ’10: proceedings of the 2010 ACM SIGMETRICS international conference on measurement and modeling of computer systems. ACM, pp 155–166
Lee YH, Song YW (2010) Replay debugging for multi-threaded embedded software. In: EUC ’10: proceedings of the 2010 IEEE international conference on embedded and ubiquitous computing. IEEE, pp 15–22
Leucker M, Schallhart C (2009) A brief account of runtime verification. J Logic Algebraic Program 78(5):293–303
Liggesmeyer P (2009) Software-qualitaet. Spektrum Akademischer Verlag, Heidelberg
Liu C, Yan X, Yu H, Han J, Yu P (2005) Mining behavior graphs for “backtrace” of noncrashing bugs. In: SDM ’05: proceedings of the 2005 SIAM international conference on data mining
Liu X, Lin W, Pan A, Zhang Z (2007) Wids checker. In: Proceedings of 4th USENIX conference on networked systems design and implementation, pp 257–270
Maeng J, Kwon JI, Sin MK, Ryu M (2009) Rt-replayer: a record-replay architecture for embedded real-time software debugging. In: SAC ’09: proceedings of the 2009 ACM symposium on applied computing. ACM, pp 1670–1675
Patil H, Pereira C, Stallcup M, Lueck G, Cownie J (2010) Pinplay: a framework for deterministic replay and reproducible analysis of parallel programs. In: CGO ’10: proceedings of the 8th international symposium on code generation and optimization. IEEE/ACM, pp 2–11
Sen K, Kalasapur S, Brutch T, Gibbs S (2013) Jalangi: a selective record-replay and dynamic analysis framework for javascript. In: ESEC/FSE ’13: proceedings of the 9th joint meeting on foundations of software engineering. ACM, pp 488–498
Shin H, Endoh Y, Kataoka Y (2007) Arve: aspect-oriented runtime verification environment. In: Proceedings of 2007 runtime verification, pp 87–96
Tan L, Liu C, Li Z, Wang X, Zhou Y, Zhai C (2014) Bug characteristics in open source software. Imperical Softw Eng 19(6):1665–1705
Wu J, Geyer C, Rehg JM (2011) Real-time human detection using contour cues. In: ICRA ’11: proceedings of the 2011 international conference on robotics and automation. IEEE, pp 860–867
Xuan J, Monperrus M (2014) Learning to combine multiple ranking metrics for fault localization. In: ICSME ’14: proceedings of the 30th international conference on software maintenance and evolution. IEEE, pp 191–200
Yasushi S (2005) Jockey: a user-space library for record-replay debugging. In: AADEBUG ’05: proceedings of the sixth international symposium on automated analysis-driven debugging. ACM, pp 69–76
Zeller A (2009) Why programs fail: a guide to systematic debugging, 2nd edn. Morgan Kaufmann Publishers
Zhang S, Ernst MD (2013) Automated diagnosis of software configuration errors. In: Proceedings of 2013 international conference on software engineering, pp 312–321
Zuo Z, Khoo SC, Sun C (2014) Efficient predicated bug signature mining via hierarchical instrumentation. In: ISSTA ’14: proceedings of the 2014 international symposium on software testing and analysis. ACM, pp 215–224
Author information
Authors and Affiliations
Corresponding author
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2017 Springer Science+Business Media, LLC
About this chapter
Cite this chapter
Eichelberger, H., Kropf, T., Ruf, J., Rosenstiel, W. (2017). Automated Reproduction and Analysis of Bugs in Embedded Software. In: Lettnin, D., Winterholer, M. (eds) Embedded Software Verification and Debugging. Embedded Systems. Springer, New York, NY. https://doi.org/10.1007/978-1-4614-2266-2_4
Download citation
DOI: https://doi.org/10.1007/978-1-4614-2266-2_4
Published:
Publisher Name: Springer, New York, NY
Print ISBN: 978-1-4614-2265-5
Online ISBN: 978-1-4614-2266-2
eBook Packages: EngineeringEngineering (R0)