84 research outputs found
The Java system dependence graph
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
Program Model Checking: A Practitioner's Guide
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
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
â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
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
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
PLACES'10: The 3rd Workshop on Programmng Language Approaches to concurrency and Communication-Centric Software
Paphos, Cyprus. March 201
- âŠ