4,064 research outputs found

    A Study of Concurrency Bugs and Advanced Development Support for Actor-based Programs

    Full text link
    The actor model is an attractive foundation for developing concurrent applications because actors are isolated concurrent entities that communicate through asynchronous messages and do not share state. Thereby, they avoid concurrency bugs such as data races, but are not immune to concurrency bugs in general. This study taxonomizes concurrency bugs in actor-based programs reported in literature. Furthermore, it analyzes the bugs to identify the patterns causing them as well as their observable behavior. Based on this taxonomy, we further analyze the literature and find that current approaches to static analysis and testing focus on communication deadlocks and message protocol violations. However, they do not provide solutions to identify livelocks and behavioral deadlocks. The insights obtained in this study can be used to improve debugging support for actor-based programs with new debugging techniques to identify the root cause of complex concurrency bugs.Comment: - Submitted for review - Removed section 6 "Research Roadmap for Debuggers", its content was summarized in the Future Work section - Added references for section 1, section 3, section 4.3 and section 5.1 - Updated citation

    Testing of Concurrent Programs

    Get PDF
    Testing concurrent systems requires exploring all possible non-deterministic interleavings that the concurrent execution may have, as any of the interleavings may reveal erroneous behaviour. This introduces a new problem: the well-known state space problem, which is often computationally intractable. In the present thesis, this issue will be addressed through: (1) the development of new Partial-Order Reduction Techniques and (2) the combination of static analysis and testing (property-based testing) in order to reduce the combinatorial explosion. As a preliminary result, we have performed an experimental evaluation on the SYCO tool, a CLP-based testing framework for actor-based concurrency, where these techniques have been implemented. Finally, our experiments prove the effectiveness and applicability of the proposed techniques

    Systematic Testing for Detecting Concurrency Errors in Erlang Programs

    Get PDF
    We present the techniques used in Concuerror, a systematic testing tool able to find and reproduce a wide class of concurrency errors in Erlang programs. We describe how we take advantage of the characteristics of Erlang's actor model of concurrency to selectively instrument the program under test and how we subsequently employ a stateless search strategy to systematically explore the state space of process interleaving sequences triggered by unit tests. To ameliorate the problem of combinatorial explosion, we propose a novel technique for avoiding process blocks and describe how we can effectively combine it with preemption bounding, a heuristic algorithm for reducing the number of explored interleaving sequences. We also briefly discuss issues related to soundness, completeness and effectiveness of techniques used by Concuerror

    Towards Automated Test Sequence Generation

    Get PDF
    The article presents a novel control-flow based test sequence generation technique using UML 2.0 activity diagram, which is a behavioral type of UML diagram. Like other model-based techniques, this technique can be used in the earlier phases of the development process owing to the availability of the design models of the system. The activity diagram model is seamlessly converted into a colored Petri net. We proposed a technique that enables the automatic generation of test sequences according to a given coverage criteria from the execution of the colored Petri nets model. Two types of structural coverage criteria for AD based models, namely sequential and concurrent coverage are described. The proposed technique was applied to an example to demonstrate its feasibility and the generated test sequences were evaluated against selected coverage criteria. This technique can potentially be adapted to service oriented applications, workflows, and concurrent applications

    ๊ฒฐ์ •๋ก ์  ์Šค์ผ€์ฅด๋ง์„ ์ด์šฉํ•˜์—ฌ ๋™์‹œ์„ฑ ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ์ปค๋„ ํผ์ ธ ์ œ์ž‘

    Get PDF
    ํ•™์œ„๋…ผ๋ฌธ(์„์‚ฌ) -- ์„œ์šธ๋Œ€ํ•™๊ต๋Œ€ํ•™์› : ๊ณต๊ณผ๋Œ€ํ•™ ์ „๊ธฐยท์ •๋ณด๊ณตํ•™๋ถ€, 2022. 8. ์ด๋ณ‘์˜.์ปค๋„ ํผ์ ธ๋“ค์ด ์ตœ๊ทผ ๋ช‡ ๋…„๊ฐ„ ๋ฐœ์ „ํ•ด์˜ค๋ฉด์„œ ํผ์ ธ์— ์˜ํ•ด ๋ณด๊ณ ๋˜๋Š” ๋ฒ„๊ทธ๋“ค์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚ฌ๋‹ค. ์ปค๋„ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ด๋Ÿฐ ๋ฒ„๊ทธ๋“ค์„ ๋ชจ๋‘ ๋ถ„์„ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์ƒํ™ฉ์€ ๋””๋ฒ„๊น… ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฒ„๊ทธ ์žฌํ˜„์˜ ์ค‘์š”์„ฑ์„ ๋”์šฑ ์ค‘์š”ํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. ๋ถˆํ–‰ ํžˆ๋„, ํผ์ ธ๋Š” ์ข…์ข… ๋ฒ„๊ทธ ์žฌํ˜„์— ์‹คํŒจํ•˜๋Š”๋ฐ ์žฌํ˜„์ด ํž˜๋“  ๋ฒ„๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ๋™์‹œ์„ฑ ๋ฒ„๊ทธ๋‹ค. ๋™์‹œ์„ฑ ๋ฒ„๊ทธ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ ์‚ฌ์ด์˜ ํŠน์ •ํ•œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ• ๋•Œ ๋ฐœ์ƒํ•˜๋Š”๋ฐ ์ปค ๋„ ์Šค์ผ€์ฅด๋ง์˜ ๋น„๊ฒฐ์ •์ ์ธ ์Šค๋ ˆ๋“œ ๊ฐ„์„ญ์€ ๋™์‹œ์„ฑ ๋ฒ„๊ทธ์˜ ์žฌํ˜„์„ ๋ง‰๋Š”๋‹ค. ๊ทธ ๊ฒฐ๊ณผ, ์ผ๋ถ€ ๋™์‹œ์„ฑ ๋ฒ„๊ทธ๋“ค์€ ๋ฒ„๊ทธ์˜ ์žฌํ˜„์— ์‹คํŒจํ•œ ๋’ค ๊ณ ์ณ์ง€์ง€ ์•Š์€์ฑ„ ๋ฒ„๋ ค์ง„๋‹ค. ์ด ๋…ผ๋ฌธ์—์„œ๋Š”, ํผ์ ธ์— ์˜ํ•ด ๋ฐœ๊ฒฌ๋œ ๋ฒ„๊ทธ๋ฅผ ๊ฒฐ์ •์ ์œผ๋กœ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ ๋Š” REPFUZZER ๋ฅผ ์†Œ๊ฐœํ•œ๋‹ค. ์ด๋Š” ์„ ํƒ์  ์Šค๋ ˆ๋“œ ์ถ”์ ๊ณผ ๊ฒฐ์ •์  ์Šค์ผ€์ฅด๋Ÿฌ๋ฅผ ํ†ตํ•ด ๋ฌธ ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค. ์„ ํƒ์  ์Šค๋ ˆ๋“œ ์ถ”์ ์„ ํ†ตํ•ด REPFUZZER ๋Š” ํผ์ ธ์— ์žˆ์–ด์„œ ํฅ๋ฏธ๋กœ์šด ์Šค๋ ˆ๋“œ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  REPFUZZER ๋Š” ๊ฒฐ์ •์  ์Šค์ผ€์ฅด๋Ÿฌ๋ฅผ ํ†ตํ•ด ์„ ํƒ๋œ ์Šค๋ ˆ๋“œ๋ฅผ ์Šค์ผ€์ฅด ํ•ด์ฃผ๋ฉฐ ๊ฒฐ์ •์ ์ธ ์Šค๋ ˆ๋“œ ๊ฐ„์„ญ์„ ๋งŒ๋“ค์–ด ๋‚ธ๋‹ค. ํผ์ง• ๋‹จ๊ณ„์™€ ์žฌํ˜„ ๋‹จ๊ณ„ ๋ชจ๋‘์—์„œ REPFUZZER ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ํผ์ ธ๋Š” ์ฐพ์•„๋‚ธ ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•ด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ REPFUZZER ๋Š” 15๊ฐœ์˜ ์‹ค์ œ ๋™์‹œ์„ฑ ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•˜๋ฉด์„œ ํšจ์œจ์„ฑ์„ ๋ณด์—ฌ์คฌ์œผ๋ฉฐ, ๋ฒ„๊ทธ ์ค‘ ์ผ๋ถ€๋Š” ๋น„๊ฒฐ์ •์ ์ธ ์ปค๋„ ์Šค์ผ€์ฅด๋ง์œผ๋กœ ์žฌํ˜„ํ•ด๋‚ด๊ธฐ ์œ„ํ•ด ์—„์ฒญ๋‚œ ์‹œ๊ฐ„์„ ํ•„์š”๋กœ ํ–ˆ๋‹ค.As kernel fuzzer has been studied and becomes better for years, the number of reported bugs from the fuzzer increased. Since kernel developers could not analyze all of the bugs, the situation emphasizes the importance of bug reproduce which can provide debug information. Unfortunately, the fuzzer often fails to reproduce bug, and one of the most difficult bug type is concurrency bug. The concurrency bug requires certain conditions between several threads, and non-deterministic thread interleavings from kernel scheduling prevent reproducing. As a result, some concurrency bugs are left unpatched after failures of reproduce. In this thesis, we presents REPFUZZER which enables deterministic reproduce for bugs found by fuzzer. It solves the problem with selective thread tracing and deterministic scheduler. With selective thread tracing, REPFUZZER can focus on only interesting thread in fuzzing context. Then REPFUZZER schedules the selected threads with deterministic scheduler and produces deterministic thread interleavings. Using REPFUZZERโ€™s scheduling at both fuzzing and reproduce phase, the fuzzer can reproduce bugs found at fuzzing phase. As a result, REPFUZZER shows its effectiveness for reproducing concurrency bugs with 15 real-world bugs, and some of the bugs require enormous times to be reproduced with non-deterministic kernel scheduling.Abstract i Contents ii List of Tables iv List of Figures v 1 INTRODUCTION 1 2 BACKGROUND 5 2.1 Fuzzing 5 2.2 Concurrency Bug 6 3 DESIGN 7 3.1 Design 7 3.1.1 Selective Thread Tracing 9 3.1.2 Deterministic Scheduler 12 3.2 Implementation 18 4 EVALUATION 20 4.1 Effectiveness of Deterministic Scheduler 20 4.2 Statistics of Deterministic Scheduler 23 4.3 Overhead of Deterministic Scheduler 25 5 DISCUSSION 27 6 RELATED WORKS 29 6.1 Kernel Concurrency Bugs 29 6.2 Reproducing Bugs 30 7 CONCLUSION 32 Abstract (In Korean) 37์„

    Confuzzโ€”a concurrency fuzzer

    Get PDF

    Software testing or the bugsโ€™ nightmare

    Get PDF
    Software development is not error-free. For decades, bugs โ€“including physical onesโ€“ have become a significant development problem requiring major maintenance efforts. Even in some cases, solving bugs led to increment them. One of the main reasons for bugโ€™s prominence is their ability to hide. Finding them is difficult and costly in terms of time and resources. However, software testing made significant progress identifying them by using different strategies that combine knowledge from every single part of the program. This paper humbly reviews some different approaches from software testing that discover bugs automatically and presents some different state-of-the-art methods and tools currently used in this area. It covers three testing strategies: search-based methods, symbolic execution, and fuzzers. It also provides some income about the application of diversity in these areas, and common and future challenges on automatic test generation that still need to be addressed
    • โ€ฆ
    corecore