9 research outputs found

    Checking Observational Purity of Procedures

    Full text link
    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

    Get PDF
    © 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

    Revealing Purity and Side Effects on Functions for Reusing Java Libraries

    No full text

    Precise Interprocedural Side-Effect Analysis

    No full text

    Mostly-Functional Behavior in Java Programs

    No full text
    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

    No full text
    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

    No full text
    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.
    corecore