Show simple item record

dc.contributor.advisorLei, Yu (Jeff)
dc.creatorXu, Jing
dc.date.accessioned2017-02-14T16:06:39Z
dc.date.available2017-02-14T16:06:39Z
dc.date.created2016-12
dc.date.issued2016-12-21
dc.date.submittedDecember 2016
dc.identifier.urihttp://hdl.handle.net/10106/26401
dc.description.abstractConcurrency faults are hard to detect and localize due to the nondeterministic behavior of concurrent programs. In this dissertation, we present three approaches to detecting and localizing faults in concurrent programs. The first approach identifies erroneous event patterns in a failed concurrent program execution. Given a failed execution, we characterize the execution as a sequence of context-switch points and then use controlled execution to distinguish erroneous context-switch points from benign context-switch points. Erroneous context-switch points are used to derive erroneous event patterns, which allow the user to quickly localize the actual fault. Our experiments were conducted on thirteen programs. Seven of them were made by students of a course and the others were from real-life programs. The results showed that our technique can effectively and efficiently localize the faults in twelve of the thirteen programs. The second approach detects unbounded thread-instantiation loops in server applications that typically spawn a separate thread to handling incoming requests. It checks loops and conditions under which a thread instantiation may take place against several bounding iteration patterns and bounding condition patterns. A loop is considered bounded if a pattern match is found. Otherwise, it is considered unbounded. The results of our experiments showed that the approach could effectively detect 38 unbounded thread-instantiation loops from 24 real-life java server applications. In particular, 12 unbounded thread-instantiation loops detected by our approach were confirmed by the original developers. The third approach minimizes stress tests for concurrent data structures. It applies delta debugging to identify threads and method invocations that can be removed from a stress test. When running a stress test reduced by removing some threads/method invocations, we control the execution of the reduced test in a way such that it is more likely to repeat the original failure. In our experiments, we applied the approach to the stress tests of sixteen real-life concurrent data structures. Each stress test had 100 threads and 100 method invocations in each thread to stress test the target data structure. All the stress tests were reduced to be no more than four threads and fourteen out of sixteen stress tests were reduced to have no more than five method invocations.
dc.format.mimetypeapplication/pdf
dc.language.isoen_US
dc.subjectFault detection
dc.subjectFault localization
dc.subjectConcurrent programs
dc.subjectStress testing
dc.titleFAULT DETECTION AND LOCALIZATION TECHNIQUES FOR CONCURRENT PROGRAMS
dc.typeThesis
dc.degree.departmentComputer Science and Engineering
dc.degree.nameDoctor of Philosophy in Computer Science
dc.date.updated2017-02-14T16:06:39Z
thesis.degree.departmentComputer Science and Engineering
thesis.degree.grantorThe University of Texas at Arlington
thesis.degree.levelDoctoral
thesis.degree.nameDoctor of Philosophy in Computer Science
dc.type.materialtext


Files in this item

Thumbnail


This item appears in the following Collection(s)

Show simple item record