9 research outputs found
Checking Observational Purity of Procedures
Verifying whether a procedure is observationally pure is useful in many
software engineering scenarios. An observationally pure procedure always
returns the same value for the same argument, and thus mimics a mathematical
function. The problem is challenging when procedures use private mutable global
variables, e.g., for memoization of frequently returned answers, and when they
involve recursion.
We present a novel verification approach for this problem. Our approach
involves encoding the procedure's code as a formula that is a disjunction of
path constraints, with the recursive calls being replaced in the formula with
references to a mathematical function symbol. Then, a theorem prover is invoked
to check whether the formula that has been constructed agrees with the function
symbol referred to above in terms of input-output behavior for all arguments.
We evaluate our approach on a set of realistic examples, using the Boogie
intermediate language and theorem prover. Our evaluation shows that the
invariants are easy to construct manually, and that our approach is effective
at verifying observationally pure procedures.Comment: FASE 201
Flow- and context-sensitive points-to analysis using generalized points-to graphs
© Springer-Verlag GmbH Germany 2016. Bottom-up interprocedural methods of program analysis construct summary flow functions for procedures to capture the effect of their calls and have been used effectively for many analyses. However, these methods seem computationally expensive for flow- and context- sensitive points-to analysis (FCPA) which requires modelling unknown locations accessed indirectly through pointers. Such accesses are com- monly handled by using placeholders to explicate unknown locations or by using multiple call-specific summary flow functions. We generalize the concept of points-to relations by using the counts of indirection levels leaving the unknown locations implicit. This allows us to create sum- mary flow functions in the form of generalized points-to graphs (GPGs) without the need of placeholders. By design, GPGs represent both mem- ory (in terms of classical points-to facts) and memory transformers (in terms of generalized points-to facts). We perform FCPA by progressively reducing generalized points-to facts to classical points-to facts. GPGs distinguish between may and must pointer updates thereby facilitating strong updates within calling contexts. The size of GPGs is linearly bounded by the number of variables and is independent of the number of statements. Empirical measurements on SPEC benchmarks show that GPGs are indeed compact in spite of large procedure sizes. This allows us to scale FCPA to 158 kLoC using GPGs (compared to 35 kLoC reported by liveness-based FCPA). Thus GPGs hold a promise of efficiency and scalability for FCPA without compro- mising precision
Mostly-Functional Behavior in Java Programs
Abstract. We present a lightweight type-and-effect system for Java programs that features two major innovations over extant object-oriented effects systems: initialization effects, which are writes to an object’s state while it is being constructed, and quiescing fields, which are fields that are never written after an object is constructed. We also present a novel taxonomy of degrees of method purity in object-oriented programs, which characterizes methods whose effects are confined to their receiver object. Finally, we find significant amounts of mostly-functional behavior in realistic Java programs: in the benchmarks we analyzed, between 48–53% of declared fields were identifiable as quiescing and between 24–78 % of dynamic field reads were from quiescing fields
No intention to comply with pneumococcal vaccination: in the elderly
A Clinical Paper submitted in partial fulfillment of the requirements for the degree of Master of Science in Nursing-Family Nurse PractitionerThe purpose of this study was to explore and describe the experience of refusing
the pneumococcal vaccine from the perspective of adults 65 years and older.
Pneumococcal disease is a leading cause of serious illness in adults, particularly those
65 years of age and older. Despite numerous studies on barriers and facilitators to
pneumococcal vaccination, little research has focused solely on those patients who refuse vaccination.To enhance the healthcare provider's understanding, the following research question was asked: What are the factors that influence adults, 65 years and
older, when making a decision to not receive the pneumococcal vaccine?
The Health Belief Model (HBM) provided the framework for this research. A
phenomenological qualitative design was used to gather narrative data in order to
explore and describe their experiences. The sample was obtained through purposive
convenience samples of participants who have refused a pneumococcal vaccination
within the last year. The setting for data collection was determined by the participants
for their convenience (home, etc.). A demographic questionnaire was utilized to aid in
data collection, and semi-structured face-to-face interviews were conducted using openended
questions. The researcher was the instrument for data collection. Interviews
were audio-taped and transcribed verbatim. Data were analyzed utilizing Colaizzi's
(1978) approach
Reflections on Verifying Software with Whiley
An ongoing challenge for computer science is the development of a tool which automatically verifies programs meet their specifications, and are free from runtime errors such as divide-byzero, array out-of-bounds and null dereferences. Several impressive systems have been developed to this end, such as ESC/Java and Spec#, which build on existing programming languages (e.g. Java, C#). Unfortunately, such languages were not designed for this purpose and this significantly hinders the development of practical verification tools for them. For example, soundness of verification in these tools is compromised. We have developed a programming language specifically designed for verification, called Whiley, and an accompanying verifying compiler. In this paper, we reflect on a number of challenges we have encountered in developing a practical system.