Auflistung nach Schlagwort "grammar"
1 - 3 von 3
Treffer pro Seite
Sortieroptionen
- ConferencePaperGenerating Tests that Cover Input Structure(Software Engineering 2021, 2021) Pereira Borges Jr., Nataniel; Havrikov, Nikolas; Zeller, AndreasTo systematically test a program, one needs good inputs—inputs that are valid such that they are not rejected by the program, and inputs that cover as much of the input space as possible in order to reach a maximum of functionality. We present recent techniques to systematically cover input structure. Our k-path algorithm for grammar production [HZ19] systematically covers syntactic elements of the input as well as their combinations. We show how to learn such input structures from graphical user interfaces, notably their interaction language [DBZ19]. Finally, we demonstrate that knowledge bases such as DBPedia can be a reliable source of semantically coherent inputs [Wa20]. All these techniques result in a significantly higher code coverage than state of the art.
- ConferencePaperLearning Circumstances of Software Failures(Software Engineering 2021, 2021) Gopinath, Rahul; Havrikov, Nikolas; Kampmann, Alexander; Soremekun, Ezekiel; Zeller, AndreasA program fails. Under which circumstances does the failure occur? Starting with a single failure-inducing input ("The input ((4)) fails") and an input grammar, this talk presents two techniques that use systematic tests to automatically determine the circumstances under which the failure occurs. The DDSET algorithm [Go20] generalizes the input to an _abstract failure-inducing input_ that contains both (concrete) terminal symbols and (abstract) nonterminal symbols from the grammar - for instance, “(())”, which represents any expression in double parentheses. The ALHAZEN technique [Ka20] takes this even further, using decision trees to learn input properties such as length or numerical values associated with failures: "The error occurs as soon as there are two parentheses or more." Such abstractions can be used as debugging diagnostics, characterizing the circumstances under which a failure occurs; and as producers of additional failure-inducing tests to help design and validate fixes and repair candidates. Both have the potential to significantly boost speed and quality of software debugging.
- ConferencePaperMining Input Grammars(Software Engineering 2021, 2021) Gopinath, Rahul; Mathis, Björn; Zeller, AndreasTo assess the behavior of a program, one needs to understand its inputs---their sources, their structure, and how they lead to individual behavior. But as syntax and semantics of inputs are almost never completely specified, humans and computers constantly have to figure out how to produce a particular behavior. In this abstract, we show how to automatically extract accurate, well-structured input grammars from existing programs. Such input grammars are useful for software testing, as they can serve as producers of valid, high-quality inputs for software testing that easily pass through parsing and validation to reliably trigger the desired program behavior. Moreover, they allow testers to control which inputs are to be produced - in contrast to the majority of fuzzers, that operate as black boxes. Our Mimid prototype uses dynamic tainting to extract input grammars from given programs - grammars that are well-structured and highly readable, even for complex recursive input formats such as JavaScript or JSON. Specific parser-directed test generators systematically explore the input syntax, such that grammars can be mined even without any given inputs.