84 research outputs found

    The Java system dependence graph

    Get PDF
    The Program Dependence Graph was introduced by Ottenstein and Ottenstein in 1984 [14]. It was suggested to be a suitable internal program representation for monolithic programs, for the purpose of carrying out certain software engineering operations such as slicing and the computation of program metrics. Since then, Horwitz et al. have introduced the multi-procedural equivalent System Dependence Graph [9]. Many authors have proposed object-oriented dependence graph construction approaches [11, 10, 20, 12]. Every approach provides its own benefits, some of which are language specific. This paper is based on Java and combines the most important benefits from a range of approaches. The result is a Java System Dependence Graph, which summarises the key benefits offered by different approaches and adapts them (if necessary) to the Java language

    Kaveri: Delivering the Indus Java Program Slicer to Eclipse

    Full text link

    Program Model Checking: A Practitioner's Guide

    Get PDF
    Program model checking is a verification technology that uses state-space exploration to evaluate large numbers of potential program executions. Program model checking provides improved coverage over testing by systematically evaluating all possible test inputs and all possible interleavings of threads in a multithreaded system. Model-checking algorithms use several classes of optimizations to reduce the time and memory requirements for analysis, as well as heuristics for meaningful analysis of partial areas of the state space Our goal in this guidebook is to assemble, distill, and demonstrate emerging best practices for applying program model checking. We offer it as a starting point and introduction for those who want to apply model checking to software verification and validation. The guidebook will not discuss any specific tool in great detail, but we provide references for specific tools

    A Machine-Checked, Type-Safe Model of Java Concurrency : Language, Virtual Machine, Memory Model, and Verified Compiler

    Get PDF
    The Java programming language provides safety and security guarantees such as type safety and its security architecture. They distinguish it from other mainstream programming languages like C and C++. In this work, we develop a machine-checked model of concurrent Java and the Java memory model and investigate the impact of concurrency on these guarantees. From the formal model, we automatically obtain an executable verified compiler to bytecode and a validated virtual machine

    OSCAR. A Noise Injection Framework for Testing Concurrent Software

    Get PDF
    “Moore’s Law” is a well-known observable phenomenon in computer science that describes a visible yearly pattern in processor’s die increase. Even though it has held true for the last 57 years, thermal limitations on how much a processor’s core frequencies can be increased, have led to physical limitations to their performance scaling. The industry has since then shifted towards multicore architectures, which offer much better and scalable performance, while in turn forcing programmers to adopt the concurrent programming paradigm when designing new software, if they wish to make use of this added performance. The use of this paradigm comes with the unfortunate downside of the sudden appearance of a plethora of additional errors in their programs, stemming directly from their (poor) use of concurrency techniques. Furthermore, these concurrent programs themselves are notoriously hard to design and to verify their correctness, with researchers continuously developing new, more effective and effi- cient methods of doing so. Noise injection, the theme of this dissertation, is one such method. It relies on the “probe effect” — the observable shift in the behaviour of concurrent programs upon the introduction of noise into their routines. The abandonment of ConTest, a popular proprietary and closed-source noise injection framework, for testing concurrent software written using the Java programming language, has left a void in the availability of noise injection frameworks for this programming language. To mitigate this void, this dissertation proposes OSCAR — a novel open-source noise injection framework for the Java programming language, relying on static bytecode instrumentation for injecting noise. OSCAR will provide a free and well-documented noise injection tool for research, pedagogical and industry usage. Additionally, we propose a novel taxonomy for categorizing new and existing noise injection heuristics, together with a new method for generating and analysing concurrent software traces, based on string comparison metrics. After noising programs from the IBM Concurrent Benchmark with different heuristics, we observed that OSCAR is highly effective in increasing the coverage of the interleaving space, and that the different heuristics provide diverse trade-offs on the cost and benefit (time/coverage) of the noise injection process.Resumo A “Lei de Moore” Ă© um fenĂłmeno, bem conhecido na ĂĄrea das ciĂȘncias da computação, que descreve um padrĂŁo evidente no aumento anual da densidade de transĂ­stores num processador. Mesmo mantendo-se vĂĄlido nos Ășltimos 57 anos, o aumento do desempenho dos processadores continua garrotado pelas limitaçÔes tĂ©rmicas inerentes `a subida da sua frequĂȘncia de funciona- mento. Desde entĂŁo, a industria transitou para arquiteturas multi nĂșcleo, com significativamente melhor e mais escalĂĄvel desempenho, mas obrigando os programadores a adotar o paradigma de programação concorrente ao desenhar os seus novos programas, para poderem aproveitar o desempenho adicional que advĂ©m do seu uso. O uso deste paradigma, no entanto, traz consigo, por consequĂȘncia, a introdução de uma panĂłplia de novos erros nos programas, decorrentes diretamente da utilização (inadequada) de tĂ©cnicas de programação concorrente. Adicionalmente, estes programas concorrentes sĂŁo conhecidos por serem consideravelmente mais difĂ­ceis de desenhar e de validar, quanto ao seu correto funcionamento, incentivando investi- gadores ao desenvolvimento de novos mĂ©todos mais eficientes e eficazes de o fazerem. A injeção de ruĂ­do, o tema principal desta dissertação, Ă© um destes mĂ©todos. Esta baseia-se no “efeito sonda” (do inglĂȘs “probe effect”) — caracterizado por uma mudança de comportamento observĂĄvel em programas concorrentes, ao terem ruĂ­do introduzido nas suas rotinas. Com o abandono do Con- Test, uma framework popular, proprietĂĄria e de cĂłdigo fechado, de anĂĄlise dinĂąmica de programas concorrentes atravĂ©s de injecção de ruĂ­do, escritos com recurso `a linguagem de programação Java, viu-se surgir um vazio na oferta de framework de injeção de ruĂ­do, para esta mesma linguagem. Para mitigar este vazio, esta dissertação propĂ”e o OSCAR — uma nova framework de injeção de ruĂ­do, de cĂłdigo-aberto, para a linguagem de programação Java, que utiliza manipulação estĂĄtica de bytecode para realizar a introdução de ruĂ­do. O OSCAR pretende oferecer uma ferramenta livre e bem documentada de injeção de ruĂ­do para fins de investigação, pedagĂłgicos ou atĂ© para a indĂșstria. Adicionalmente, a dissertação propĂ”e uma nova taxonomia para categorizar os dife- rentes tipos de heurĂ­sticas de injecção de ruĂ­dos novos e existentes, juntamente com um mĂ©todo para gerar e analisar traces de programas concorrentes, com base em mĂ©tricas de comparação de strings. ApĂłs inserir ruĂ­do em programas do IBM Concurrent Benchmark, com diversas heurĂ­sticas, ob- servĂĄmos que o OSCAR consegue aumentar significativamente a dimensĂŁo da cobertura do espaço de estados de programas concorrentes. Adicionalmente, verificou-se que diferentes heurĂ­sticas produzem um leque variado de prĂłs e contras, especialmente em termos de eficĂĄcia versus eficiĂȘncia

    Program Dependence Net and On-demand Slicing for Property Verification of Concurrent System and Software

    Full text link
    When checking concurrent software using a finite-state model, we face a formidable state explosion problem. One solution to this problem is dependence-based program slicing, whose use can effectively reduce verification time. It is orthogonal to other model-checking reduction techniques. However, when slicing concurrent programs for model checking, there are conversions between multiple irreplaceable models, and dependencies need to be found for variables irrelevant to the verified property, which results in redundant computation. To resolve this issue, we propose a Program Dependence Net (PDNet) based on Petri net theory. It is a unified model that combines a control-flow structure with dependencies to avoid conversions. For reduction, we present a PDNet slicing method to capture the relevant variables' dependencies when needed. PDNet in verifying linear temporal logic and its on-demand slicing can be used to significantly reduce computation cost. We implement a model-checking tool based on PDNet and its on-demand slicing, and validate the advantages of our proposed methods.Comment: 17 pages, 3 figure

    Slicing of Concurrent Programs and its Application to Information Flow Control

    Get PDF
    This thesis presents a practical technique for information flow control for concurrent programs with threads and shared-memory communication. The technique guarantees confidentiality of information with respect to a reasonable attacker model and utilizes program dependence graphs (PDGs), a language-independent representation of information flow in a program
    • 

    corecore