Pareon Verify

Total Page:16

File Type:pdf, Size:1020Kb

Pareon Verify Pareon Verify Test suite for dynamic Find the hard-to-fi nd errors software verifi cation other tools don’t fi nd “We are going to defi nitely incorporate the Vector Fabrics toolset as an important part of our quality off ering“ Jan Asselman Quality team leader / Altran Intelligent Systems Copyright © 2015 Vector Fabrics B.V Avoid software errors and high repair costs with Pareon Verify Test suite for dynamic software verification finds difficult-to-detect software errors and makes lengthy debugging sessions a thing of the past. The amount of software in embedded Cost of an error systems, cell phones, or transportation vehicles such as cars and airplanes is A study by NASA [1] shows the cost of fixing a software error found in the field is 100x more expensive than exploding in size and importance. This the same error found already during development. development has led to a exponential growth in the number of potential software errors or “bugs”. It is more important than ever to effectively and thoroughly test software before it is shipped. With the common use of C++ nowadays, it is also common to have more dynamic behavior and multithreading. This leads to a new category of errors that is hard to detect using the traditional testing tools and methods. Development Testing In the field Errors are expensive The mounting costs of a software defect. Having to repair software errors post-release in pro- duction or in the field is a costly process. Expensive, even without taking into account any damage to the brand and the public image of the manufacturer. Thus it is crucial that as many errors in the code as possible are detected and corrected before the prod- uct enters the market. 2 Copyright © 2015 Vector Fabrics B.V Car Sofware % Single Average high-end car 8,5 8,5 processor 14 14 F-35 Fighter Jet 30,1 30,1 % Multi 24 24 2013 19,4 19,4 processor Boeing 787 % Multi core 100 100Total fl ight software *million lines 21,4 20,621,4 20,6 % Multi core & of code Multi processor % Don’t know Growing size and complexity of code increases the number of errors in code. 100 million lines of complex code It is not uncommon for a car or an airplane to have For instance, a Heisenbug could relate to a timing over 100 million lines of code running. As the amount problem: in a debugger, timings change and the and the of complexity of code increases, so does the bug does not appear. This makes the subsequent number of errors in the code. detection and resolution of these errors an ex- tremely complex and thus costly process. Another component to drive up the complexity and the number of errors in code is multicore usage. More and more processors are already multicore, which For the reasons mentioned above, validating software brings new challenges to software correctness and without dynamic analysis is no longer an eff ective verifi cation. strategy. Software projects are growing in size, the software itself is becoming more dynamic and the Increasing dynamic behavior hardware used to operate the software is becoming Modern software testers are challenged to cope with increasingly sophisticated. Without employing dynam- the ever increasing complexity and the ever increasing ic analysis, the complex software errors will remain dynamic behavior of the software. Dynamic behavior undetected in the product to cause problems later. - for example dynamic memory use and multithread- ing - is hard to test for. Bugs in dynamic behavior tend Automated dynamic analysis by Pareon Verify to be hard to reproduce. Examples of these errors This trend led Vector Fabrics to develop Pareon Verify include buff er overfl ows, memory leaks, and invalid - a tool for dynamic software verifi cation. Pareon memory accesses. Verify allows for automated dynamic analysis of coding errors in large volumes of source code. This process is Heisenbugs able to detect software errors that cannot be identi- A whole new category of software errors is nowadays fi ed using other tools or methods. labelled as a “Heisenbug”: named after the uncer- tainty principle elaborated by the German theoretical physicist Werner Heisenberg. Heisenbugs are hard to diagnose because they tend to disappear when under scrutiny: debuggers or so-called “printf-debugging” tend to adjust the run-time circumstances enough to make the bug disappear. Increasing size and complexity of applications cause more errors to occur in software. Copyright © 2015 Vector Fabrics B.V 3 The advantages of dynamic code analysis Dynamic analysis - or runtime analysis, as it’s some- Dynamic analysis looks at the entire application and is times called - can be seen as an MRI scanner for not limited to a local unit scope in its error detection. software. By looking inside the application while it Additionally, as it looks inside the application to see executes, it is possible to detect errors in the errors in individual operations in a white-box fashion, internal behavior. it reports errors in an application even if that error does not cause the application to fail its black-box test Dynamic analysis observes at the application’s internal on a particular test case. structures and behavior and observes where errors originate. In doing so, it pinpoints the primary cause of Therefore, dynamic code analysis is a part to a the error. This way, dynamic analysis identifies errors comprehensive software testing process. It com- that remain undetected during other tests. plements static code analysis and unit testing. Dy- namic analysis offers the key advantage: it reveals Limits of existing methods the most expensive errors that would otherwise Errors in dynamic behavior are notoriously difficult remain undetected. to detect with traditional testing tools and methods. Errors in the dynamic behavior don’t trigger when the application is run in its normal testing environment, Dynamic analysis Heisenbugs but cause problems when environment, timing or circumstances change. Unit & system tests Functional errors Static analysis is limited in its capability to predict the Static analysis Coding errors behavior of dynamic structures and cannot foresee all Coding style checks Coding style violations possible combinations of inputs, code paths, dynamic Cost of an error memory and thread timing in the full application scope. Compilation Syntax errors Unit testing is limited in scope to a smaller part of the application, and cannot detect errors that are caused The role of the dynamic analysis in the software by the global behavior or the environment of the verification process. application. Dynamic analysis to help Dynamic analysis is not hindered by these limitations: as it observes the application’s actual operation while being executed, it can see all the combinations of dynamic and global behavior that are triggered during the execution, regardless of complexity. 4 Copyright © 2015 Vector Fabrics B.V How it works? Dynamic analysis works by instrumenting the target Pareon Verify detects a range of software errors, in- application to see the behavior inside the application. cluding Heisenbugs.. Pareon Verify can be completely The instrumentation in the application binary creates integrated into the development process so that new a stream of events, or a trace, that is captured by the software changes can be continuously screened for analyzer and studied for errors in the behavior. The new errors. analyzer then reports the found errors in a clear and concise way with detailed references to source code for easy correction of the error. The workflow of Pareon Verify is as follows: 1. Compile Use Pareon’s instrumenting C and C++ compiler as a drop-in replacement for your (cross)compiler. Set-up your build in minutes. 2. Execute Execute the instrumented program on a host PC or target embedded board. Run with representa- tive input data or test suite. 3. Analyze Conveniently analyze the resulting execution trace on your host PC. Minimal memory and perfor- mance impact from the analysis on the target! 4. Resolve bugs Get detailed messages for each error. Instantly see how to fix the problem. Variable names, full call stacks. No false positives! Invalid memory access Invalid pointer usage and buffer overflows e.g. through bad pointer arithmetic Array out-of-bounds Access outside a buffer or using wrong indexes into a multidimensional array Using variables that have not been written yet, generally leading to data corruption Uninitialized memory reads or crashes Use-after-free Use of dangling pointers, pointing to memory that no longer exists Multiple threads accessing the same data without proper synchronization, Race conditions generally leads to data corruption Memory leaks Will cause system to slow down or run out of memory Hard-to-detect errors Pareon Verify finds. Copyright © 2015 Vector Fabrics B.V 5 Example Multicore errors ? ? Write Computer hardware increasingly uses multicore 10 processors. Not just PCs, but also cell phones have up 10 to 8 cores inside nowadays. This causes problems on the software side as multicore software development is harder. So-called “data races” already occurred on single core CPUs when interacting with interrupts, but Read are now muchRead more widespread due to the multi- threaded programs actually running threads in parallel. Write 10 A data race arises when two threads access the same 10 variable without proper synchronization. As a result, threads could read stale or just wrong data - data corruption will happen. Shared Shared Thread A memory Thread B Thread A memoryIn general,Thread multi-threaded B programs will have more Time Time dynamic behavior and thus will be more susceptible to Read and write from different threads to dynamic software errors. shared memory. “We are glad we are now able to ? ? catch some really difficult bugs much earlier“ Write 10 10 Daniele Lacamera Lead developer / PicoTCP Read Read Write 10 10 Shared Shared Thread A memory Thread B Thread A memory Thread B Time Time Data race, read of uninitialized data because the read happens before the write is done.
Recommended publications
  • Fixing Complex Faults in Embedded Cyberphysical Systems
    Understanding and Fixing Complex Faults in Embedded Cyberphysical Systems PREPRINT IEEE COMPUTER MAGAZINE, JANUARY 2021 Alexander Weiss*, Smitha Gautham**, Athira Varma Jayakumar**, Carl Elks**, D. Richard Kuhn***, Raghu N. Kacker***, Thomas B. Preusser* * Accemic Technologies ** Virginia Commonwealth University *** National Institute of Standards and Technology Understanding fault types can lead to novel approaches to debugging and runtime verification. Dealing with complex faults, particularly in the challenging area of embedded systems, craves for more powerful tools, which are now becoming available to engineers. MISTAKES, ERRORS, DEFECTS, BUGS, FAULTS AND ANOMALIES Embedded systems are everywhere, and they present unique challenges in verification and testing. The real-time nature of many embedded systems produces complex failure modes that are especially hard to detect and prevent. To prevent system failures, we need to understand the nature and common types of software anomalies. We also need to think about how mistakes lead to observable anomalies and how these can be differentiated according to their reproducibility. Another key need for efficient fault detection is the comprehensive observability of a system. This kind of understanding leads to the principle of "scientific debugging". In everyday language, we use a number of words such as bug, fault, error, etc. inconsistently and confusingly to describe the malfunctioning of a software-based system. This also happens to the authors of this paper in their normal life unless they pay strict attention to their choice of words. Therefore, we would like to start with a brief clarification based on the terminology used by the "IEEE Standard Classification for Software Anomalies" [1]. • If coders notice a mistake themselves, it is called an error (“a human action that produces an incorrect result “[1]).
    [Show full text]
  • Software Debugging Techniques
    Software debugging techniques P. Adragna Queen Mary, University of London Abstract This lecture provides an introduction to debugging, a crucial activity in ev- ery developer's life. After an elementary discussion of some useful debugging concepts, the lecture goes on with a detailed review of general debugging tech- niques, independent of any specific software. The final part of the lecture is dedicated to analysing problems related to the use of C++ , the main program- ming language commonly employed in particle physics nowadays. Introduction According to a popular definition [1], debugging is a methodical process of finding and reducing the number of bugs, or defects, in a computer program. However, most people involved in spotting and removing those defects would define it as an art rather then a method. All bugs stem from a one basic premise: something thought to be right, was in fact wrong. Due to this simple principle, truly bizarre bugs can defy logic, making debugging software challenging. The typical behaviour of many inexperienced programmers is to freeze when unexpected problems arise. Without a definite process to follow, solving problems seems impossible to them. The most obvious reaction to such a situation is to make some random changes to the code, hoping that it will start working again. The issue is simple: the programmers have no idea of how to approach debugging [2]. This lecture is an attempt to review some techniques and tools to assist non-experienced pro- grammers in debugging. It contains both tips to solve problems and suggestions to prevent bugs from manifesting themselves. Finding a bug is a process of confirming what is working until something wrong is found.
    [Show full text]
  • 1 Software Needs Seatbelts and Airbags
    DEBUGGING Software Needs Seatbelts and Airbags Finding and fixing bugs in deployed software is difficult and time-consuming. Here are some alternatives. Emery D. Berger, University of Massachusetts, Amherst Like death and taxes, buggy code is an unfortunate fact of life. Nearly every program ships with known bugs, and probably all of them end up with bugs that are discovered only post-deployment. There are many reasons for this sad state of affairs. One problem is that many applications are written in memory-unsafe languages. Variants of C, including C++ and Objective-C, are especially vulnerable to memory errors such as buffer overflows and dangling pointers (use-after-free bugs). Two of these are in the SANS Top 25 list: buffer copy without checking size of input (http://cwe.mitre.org/top25/index.html#CWE-120) and incorrect calculation of buffer size (http://cwe.mitre.org/top25/index.html#CWE-131); see also heap-based buffer overflow (http://cwe.mitre.org/data/definitions/122.html) and use after free (http://cwe.mitre. org/data/definitions/416.html). These bugs, which can lead to crashes, erroneous execution, and security vulnerabilities, are notoriously challenging to repair. SAFE LANGUAGES: NO PANACEA Writing new applications in memory-safe languages such as Java instead of C/C++ would help mitigate these problems. For example, because Java uses garbage collection, Java programs are not susceptible to use-after-free bugs; similarly, because Java always performs bounds-checking, Java applications cannot suffer memory corruption caused by buffer overflows. That said, safe languages are no cure-all. Java programs still suffer from buffer overflowsand null pointer dereferences, although they throw an exception as soon as they happen, unlike their C-based counterparts.
    [Show full text]
  • Debugging Petascale HPC Applications
    Debugging Petascale HPC Applications Blue Waters User Workshop 2013 Objectives ● Raise awareness ● Debugging in general ● Allinea DDT in particular ● Enhance dexterity ● Allinea DDT in particular Print statement debugging? ● The first debugger: print statements ● Each process prints a message or value at defined f(x)Segfault locations Line ● Line Diagnose the problem from x evidence and intuition Number Print ● A long slow process Statements ● Analogous to bisection root finding ● Broken at modest scale ● Too much output – too many log files "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." Brian Kernighan Bugs in Practice Some Types of Bugs ● Bohr bug ● Steady, dependable bug ● Heisenbug ● Vanishes when you try to debug (observe) ● Mandelbug ● Complexity and obscurity of the cause is so great that it appears chaotic ● Schroedinbug ● First occurs after someone reads the source file and deduces that it never worked, after which the program ceases to work A `New' Vernacular for Bugs ● Defect ● An incorrect program code – A bug in the code ● Infection ● An incorrect program state – A bug in the state ● Failure ● An observable incorrect program behaviour – A bug in the behaviour Zeller A., “Why Programs Fail”, 2nd Edition, 2009 TRAFFIC ● Debugging ● Transforming a broken program into a working one ● How? ● Track the problem ● Reproduce ● Automate - (and simplify) the test case ● Find origins – where could the “infection” be from? ● Focus – examine the origins ● Isolate – narrow down the origins ● Correct – fix and verify the testcase is successful Zeller A., “Why Programs Fail”, 2nd Edition, 2009 How to Focus and Isolate ● A scientific process? ● Hypothesis, trial and observation, ..
    [Show full text]
  • MCFLY: Time-Travel Debugging for the Web
    MCFLY: Time-Travel Debugging for the Web John Vilk, Emery D. Berger James Mickens Mark Marron University of Massachusetts Amherst Harvard University Microsoft Research fjvilk, [email protected] [email protected] [email protected] Abstract Time-traveling debuggers offer the promise of simplifying debugging by letting developers freely step forwards and backwards through a program’s execution. However, web applications present multiple challenges that make time- travel debugging especially difficult. A time-traveling de- bugger for web applications must accurately reproduce all network interactions, asynchronous events, and visual states observed during the original execution, both while stepping Figure 1. All major web browsers separate web applica- forwards and backwards. This must all be done in the con- tion computation (JavaScript engine) from I/O (Layout text of a complex and highly multithreaded browser runtime. Engine). MCFLY both synchronizes and maintains visibil- At the same time, to be practical, a time-traveling debugger ity into the items shown in gray (the JavaScript engine, the must maintain interactive speeds. multithreaded layout engine, and the screen), all at interac- This paper presents MCFLY, the first time-traveling de- tive speed. bugger for web applications. MCFLY departs from previous approaches by operating on a high-level representation of the browser’s internal state. This approach lets MCFLY provide accurate time-travel debugging—maintaining JavaScript driven settings like the web, bug symptoms can manifest far and visual state in sync at all times–at interactive speeds. from their root causes. MCFLY’s architecture is browser-agnostic, building on web There are two widely used approaches to find these bugs: standards supported by all major browsers.
    [Show full text]
  • Concurrent Breakpoints
    Concurrent Breakpoints Chang Seo Park Koushik Sen Electrical Engineering and Computer Sciences University of California at Berkeley Technical Report No. UCB/EECS-2011-159 http://www.eecs.berkeley.edu/Pubs/TechRpts/2011/EECS-2011-159.html December 18, 2011 Copyright © 2011, by the author(s). All rights reserved. Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, to republish, to post on servers or to redistribute to lists, requires prior specific permission. Acknowledgement Research supported by Microsoft (Award #024263) and Intel (Award #024894) funding and by matching funding by U.C. Discovery (Award #DIG07-10227), by NSF Grants CCF-101781, CCF-0747390, CCF- 1018729, and CCF-1018730, and by a DoD NDSEG Graduate Fellowship. The last author is supported in part by a Sloan Foundation Fellowship. Additional support comes from Par Lab affiliates National Instruments, Nokia, NVIDIA, Oracle, and Samsung. Concurrent Breakpoints Chang-Seo Park and Koushik Sen EECS Department, UC Berkeley Berkeley, CA 94720, USA fparkcs,[email protected] Abstract regular testing. Therefore, even if a user reports the input that caused a bug in a concurrent program, the developer In program debugging, reproducibility of bugs is a key re- may not be able to recreate the bug and debug the cause quirement. Unfortunately, bugs in concurrent programs are of the bug. Such non-deterministic bugs in concurrent pro- notoriously difficult to reproduce compared to their sequen- grams are called Heisenbugs.
    [Show full text]
  • Computer Programming & Physics
    Physics, computing, programming http://ds9a.nl/ - [email protected] http://tinyurl.com/phycomp (+notes) That’s me, circa 1996 23 months ago today Announcement of the discovery of the higgs boson. They skipped the second part of the announcement by Fabiola Gianotti. In Comic Sans. Some LHC computing stats ● ~0.5*109 collisions/s, one every 2 nanoseconds ● 15,000 terabyte of raw data/day ○ 300MB/s after first filter ● 140 data centers in 33 countries ● >200,000 CPU cores in “tier 0” data centers in Meyrin (Switzerland) and Budapest (Hungary) Around 4MW of computing power here. Nothing compared to rest of LHC ;-) No Computers No Higgs! This is all webbased, but remarkably basic ‘teletext’ like. This is no accident. Pre-web, CERN used some kind of videotex, and it stuck. They now emulate it in HTML. First ever webserver. CERN donated web technology to the world for free. In return they got the Higgs boson. They also got hacked. Physics Computing Close interchange - a “recent” gift was GMR, http://en.wikipedia. org/wiki/Giant_magnetoresistance 1987, in stores in 1995! http://www.wdc.com/wdproducts/library/other/2579-850121.pdf http://scienceblogs.com/startswithabang/files/2009/05/Hbomb-600x753.jpg https://www.youtube.com/watch?v=0ogSC6JKkrY MANDATORY - http://calteches. library.caltech.edu/34/3/FeynmanLosAlamos.htm John von Neumann “He made major contributions to a number of fields,[1] including mathematics (foundations of mathematics, functional analysis, ergodic theory, geometry, topology, and numerical analysis), physics (quantum mechanics, hydrodynamics, and fluid dynamics), economics (game theory), computing(Von Neumann architecture, linear programming, self-replicating machines, stochastic computing), and statistics” Plus.
    [Show full text]
  • Debugging HPC Applications
    Debugging HPC Applications David Lecomber CTO, Allinea Software [email protected] Agenda ● Bugs and Debugging ● Debugging parallel applications ● Debugging OpenACC and other hybrid codes ● Debugging for Petascale (and beyond) About Allinea ● HPC development tools company ● Flagship product Allinea DDT – Now the leading debugger in parallel computing – The scalable debugger ● Record holder for debugging software on largest machines ● Production use at extreme scale – and desktop – Wide customer base ● Blue-chip engineering, government and academic research ● Strong collaborative relationships with customers and partners Bugs in Practice Some types of bug ● Some Terminology ● Bohr bug – Steady, dependable bug ● Heisenbug – Vanishes when you try to debug (observe) ● Mandelbug – Complexity and obscurity of the cause is so great that it appears chaotic ● Schroedinbug – First occurs after someone reads the source file and deduces that it never worked, after which the program ceases to work Debugging ● Transforming a broken program to a working one ● How? ● Track the problem ● Reproduce ● Automate - (and simplify) the test case ● Find origins – where could the “infection” be from? ● Focus – examine the origins ● Isolate – narrow down the origins ● Correct – fix and verify the testcase is successful ● TRAFFIC ● Suggested Reading: nd ● Zeller A., “Why Programs Fail”, 2 Edition, 2009 How to focus and isolate ● A scientific process? ● Hypothesis, trial and observation, ... ● Requires the ability to understand what a program is doing ● Printf ● Command
    [Show full text]
  • Heisenbugs and Bohrbugs: Why Are They Different?
    Heisenbugs and Bohrbugs: Why are they different? March 8, 2003 Abstract repeated. If a Bohrbug is present in the system, there would always be a failure on retying the Jim Gray proposed a classification of bugs based operation which caused the failure. In case of a on the type of failures they induce. Bohrbugs Heisenbug, the error could vanish on a retry. are bugs which always cause a failure when a Bohrbug was named after the Bohr atom. Just particular operation is performed. Heisenbugs as the Bohr atom is solid, a Bohrbug is also are bugs which may or may not cause a fault for solid and easily detectable by standard debug- a given operation. It has often been questioned ging techniques. The word Heisenbug comes as to whether these two bug categories are the from Heisenberg’s Uncertainty Principle which same or different. The main reason for the ar- states that it is fundamentally impossible to pre- gument is that if everything is the same, a bug dict the position and momentum of a particle at should resurface and then by definition a Heisen- the same time. If we try to apply standard de- bug should be the same as a Bohrbug. bugging techniques such as cyclic debugging [5] We take the position that Heisenbugs and to catch the error, we may find that the error has Bohrbugs are different types of bugs. As argu- disappeared. Bohrbug is also called a permanent ment, we try to clarify the definition of Heisen- fault while Heisenbug is called as a transient or bugs and Bohrbugs and explain what an “oper- intermittent fault [2].
    [Show full text]
  • Debugging with Gdb and Valgrind
    DebuggingDebugging withwith gdbgdb andand valgrindvalgrind Dr. Axel Kohlmeyer Associate Dean for Scientific Computing, CST Associate Director, Institute for Computational Science Assistant Vice President for High-Performance Computing Temple University Philadelphia PA, USA [email protected] What is Debugging? ● Identifying the cause of an error and correcting it ● Once you have identified defects, you need to: ● find and understand the cause ● remove the defect from your code ● Statistics show about 60% of bug fixes are wrong: -> they remove the symptom, but not the cause ● Improve productivity by getting it right the first time ● A lot of programmers don't know how to debug! ● Debugging needs practice and experience: -> understand the science and the tools 2 More About Debugging ● Debugging is a last resort: ● Doesn't add functionality ● Doesn't improve the science ● The best debugging is to avoid bugs: ● Good program design ● Follow good programming practices ● Always consider maintainability and readability of code over getting results a bit faster ● Maximize modularity and code reuse 3 Errors are Opportunities ● Learn from the program you're working on: ● Errors mean you didn't understand the program. If you knew it better, it wouldn't have an error. You would have fixed it already ● Learn about the kinds of mistakes you make: ● If you wrote the program, you inserted the error ● Once you find a mistake, ask yourself: – Why did you make it? – How could you have found it more quickly? – How could you have prevented it? – Are there other similar mistakes in the code? 4 How to NOT do Debugging ● Find the error by guessing ● Change things randomly until it works (again) ● Don't keep track of what you changed ● Don't make a backup of the original ● Fix the error with the most obvious fix ● If wrong code gives the correct result, and changing it doesn't work, don't correct it.
    [Show full text]
  • Heisenbug Hunting from the Trenches
    Heisenbug hunting from the trenches Andrei Terechko [email protected] http://www.vectorfabrics.com Outline • Is my software free of bugs? • Dynamic analysis to the rescue • Case studies: 1. TCP/IP software stack 2. H.264 reference software 3. Visualization Toolkit 4. Boost C++ 5. Car navigation software 2 | October 6th, 2015 © 2015 VECTOR FABRICS. ALL RIGHTS RESERVED. Wake-up call Thread 0 Thread 1 Thread 2 t1 = t2 = sum = 0; repeat 20: repeat 20: spawn Thread 1; sum++; sum++ spawn Thread 2; t1 = 1; t2 = 1; while !t1 && !t2; print sum; 3 | October 6th, 2015 © 2015 VECTOR FABRICS. ALL RIGHTS RESERVED. Heisenbugs and other dynamic bugs • Wikipedia on Heisenbug: a software bug that seems to disappear or alter its behavior when one attempts to study it • hard to catch in development • crash systems in production 4 | October 6th, 2015 © 2015 VECTOR FABRICS. ALL RIGHTS RESERVED. Static and dynamic bugs static bugs, dynamic bugs, “spell checker” “behavior checker” ! src1.c src1.c ! src2.c src2.c 5 | October 6th, 2015 © 2015 VECTOR FABRICS. ALL RIGHTS RESERVED. How to detect the dynamic bugs? Dynamic, Dynamic analysis multithreading (Pareon Verify) Quality certification (SIL, ISO) Static analysis (Coverity, Klocwork) Static, Unit testing frameworks single thread (CPPUnit) standards checker (MISRA, QA-C) Compiler (gcc, clang) 6 | October 6th, 2015 © 2015 VECTOR FABRICS. ALL RIGHTS RESERVED. Dynamic analysis @ Continuous Integration Source code Compile Executable Execute Output Static Error Dynamic Error analysis report analysis report 7 | October 6th, 2015 © 2015 VECTOR FABRICS. ALL RIGHTS RESERVED. Top quality of the tested projects • Agile development techniques • Deploy Continuous Integration • Excellent set of unit tests • Many integration tests • Some have conformance tests • Use code coverage to add new tests • Use static analysis tools • Eager to adopt dynamic analysis tools 8 | October 6th, 2015 © 2015 VECTOR FABRICS.
    [Show full text]
  • A Survey of Support for Implementing Debuggers
    A Survey of Support For Implementing Debuggers Vern Paxson CS 262 Prof. Anderson October 30, 1990 Abstract The degree to which hardware and operating systems support debugging strongly influ- ences the caliber of service that a debugger can provide. We survey the different forms in which such support is available. We limit our survey to lower-level debugger design issues such as accessing the debugged program’s state and controlling its execution. The study concentrates on those types of support that make overall debugger performance efficient and that support debugger features for ferreting out hard-to-find bugs. We conclude with an overview of state-of-the-art debuggers and a proposal for a new debugger design. Introduction Debugging is one of the fundamental aspects of software development. Once software has been specified and designed, it enters a well-known edit–compile– test–debug–repeat implementation cycle. During this cycle there is clearly a need for tools that aid debugging: one study of experienced programmers [1] found that 78% had bugs that took longer than one day to find, and 34% had bugs that took more than a month to find. Breakpoint debuggers are now widely available. These debuggers allow a programmer to suspend a program’s execution at a particular point, inspect and possibly modify the program’s state, and then continue the program. In their usual form breakpoint debuggers are adequate for a number of de- bugging tasks, but they provide little support for particularly difficult bugs, such as those whose effects are not apparent until long after their erroneous action occurs.
    [Show full text]