Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
A behavioral notion of subtyping
ACM Transactions on Programming Languages and Systems (TOPLAS)
Solving shape-analysis problems in languages with destructive updating
ACM Transactions on Programming Languages and Systems (TOPLAS)
BI as an assertion language for mutable data structures
POPL '01 Proceedings of the 28th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
POPL '77 Proceedings of the 4th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
TVLA: A System for Implementing Static Analyses
SAS '00 Proceedings of the 7th International Symposium on Static Analysis
Separation and information hiding
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Transition predicate abstraction and fair termination
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Preliminary design of JML: a behavioral interface specification language for java
ACM SIGSOFT Software Engineering Notes
Modular invariants for layered object structures
Science of Computer Programming - Special issue on source code analysis and manipulation (SCAM 2005)
Bogor/Kiasan: A k-bounded Symbolic Execution for Checking Strong Heap Properties of Open Systems
ASE '06 Proceedings of the 21st IEEE/ACM International Conference on Automated Software Engineering
Specification and verification challenges for sequential object-oriented programs
Formal Aspects of Computing
Separation logic, abstraction and inheritance
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Enhancing modular OO verification with separation logic
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Using history invariants to verify observers
ESOP'07 Proceedings of the 16th European conference on Programming
An automatic verifier for Java-like programs based on dynamic frames
FASE'08/ETAPS'08 Proceedings of the Theory and practice of software, 11th international conference on Fundamental approaches to software engineering
Smallfoot: modular automatic assertion checking with separation logic
FMCO'05 Proceedings of the 4th international conference on Formal Methods for Components and Objects
Symbolic execution with separation logic
APLAS'05 Proceedings of the Third Asian conference on Programming Languages and Systems
The spec# programming system: an overview
CASSIS'04 Proceedings of the 2004 international conference on Construction and Analysis of Safe, Secure, and Interoperable Smart Devices
Building your own software model checker using the bogor extensible model checking framework
CAV'05 Proceedings of the 17th international conference on Computer Aided Verification
Dynamic frames: support for framing, dependencies and sharing without restrictions
FM'06 Proceedings of the 14th international conference on Formal Methods
A local shape analysis based on separation logic
TACAS'06 Proceedings of the 12th international conference on Tools and Algorithms for the Construction and Analysis of Systems
Compositional shape analysis by means of bi-abduction
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Classical BI: a logic for reasoning about dualising resources
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Design patterns in separation logic
Proceedings of the 4th international workshop on Types in language design and implementation
Abductive Inference for Reasoning about Heaps
APLAS '08 Proceedings of the 6th Asian Symposium on Programming Languages and Systems
ICLP '08 Proceedings of the 24th International Conference on Logic Programming
A Basis for Verifying Multi-threaded Programs
ESOP '09 Proceedings of the 18th European Symposium on Programming Languages and Systems: Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2009
Aliasing, Confinement, and Ownership in Object-Oriented Programming
Object-Oriented Technology. ECOOP 2008 Workshop Reader
International Workshop on Aliasing, Confinement and Ownership in Object-Oriented Programming
Implicit Dynamic Frames: Combining Dynamic Frames and Separation Logic
Genoa Proceedings of the 23rd European Conference on ECOOP 2009 --- Object-Oriented Programming
Automatic Parallelization and Optimization of Programs by Proof Rewriting
SAS '09 Proceedings of the 16th International Symposium on Static Analysis
Separation Logic Verification of C Programs with an SMT Solver
Electronic Notes in Theoretical Computer Science (ENTCS)
Memory Usage Verification Using Hip/Sleek
ATVA '09 Proceedings of the 7th International Symposium on Automated Technology for Verification and Analysis
Attacking Large Industrial Code with Bi-abductive Inference
FMICS '09 Proceedings of the 14th International Workshop on Formal Methods for Industrial Critical Systems
Automatic numeric abstractions for heap-manipulating programs
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
PHALANX: parallel checking of expressive heap assertions
Proceedings of the 2010 international symposium on Memory management
A Unified Display Proof Theory for Bunched Logic
Electronic Notes in Theoretical Computer Science (ENTCS)
Reasoning about multiple related abstractions with MultiStar
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
A shape analysis for non-linear data structures
SAS'10 Proceedings of the 17th international conference on Static analysis
Verifying executable object-oriented specifications with separation logic
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
Verifying generics and delegates
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
Capabilities for uniqueness and borrowing
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
Reasoning about function objects
TOOLS'10 Proceedings of the 48th international conference on Objects, models, components, patterns
Proceedings of the 5th ACM workshop on Programming languages meets program verification
Automatic safety proofs for asynchronous memory operations
Proceedings of the 16th ACM symposium on Principles and practice of parallel programming
Matching logic: an alternative to hoare/floyd logic
AMAST'10 Proceedings of the 13th international conference on Algebraic methodology and software technology
APLAS'10 Proceedings of the 8th Asian conference on Programming languages and systems
A quick tour of the VeriFast program verifier
APLAS'10 Proceedings of the 8th Asian conference on Programming languages and systems
Static contract checking with abstract interpretation
FoVeOOS'10 Proceedings of the 2010 international conference on Formal verification of object-oriented software
Kopitiam: modular incremental interactive full functional static verification of java code
NFM'11 Proceedings of the Third international conference on NASA Formal methods
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Separation logic + superposition calculus = heap theorem prover
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Structured specifications for better verification of heap-manipulating programs
FM'11 Proceedings of the 17th international conference on Formal methods
Annotation inference for separation logic based verifiers
FMOODS'11/FORTE'11 Proceedings of the joint 13th IFIP WG 6.1 and 30th IFIP WG 6.1 international conference on Formal techniques for distributed systems
jStar-eclipse: an IDE for automated verification of Java programs
Proceedings of the 19th ACM SIGSOFT symposium and the 13th European conference on Foundations of software engineering
Automated cyclic entailment proofs in separation logic
CADE'11 Proceedings of the 23rd international conference on Automated deduction
CAV'11 Proceedings of the 23rd international conference on Computer aided verification
Specification patterns and proofs for recursion through the store
FCT'11 Proceedings of the 18th international conference on Fundamentals of computation theory
Tractable reasoning in a fragment of separation logic
CONCUR'11 Proceedings of the 22nd international conference on Concurrency theory
Software verification using k-induction
SAS'11 Proceedings of the 18th international conference on Static analysis
Immutable specifications for more concise and precise verification
Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications
Compositional Shape Analysis by Means of Bi-Abduction
Journal of the ACM (JACM)
Mutation in linked data structures
ICFEM'11 Proceedings of the 13th international conference on Formal methods and software engineering
Usable verification of object-oriented programs by combining static and dynamic techniques
SEFM'11 Proceedings of the 9th international conference on Software engineering and formal methods
Towards a program logic for JavaScript
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Resource-sensitive synchronization inference by abduction
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The VerCors project: setting up basecamp
PLPV '12 Proceedings of the sixth workshop on Programming languages meets program verification
Memory leaks detection in java by bi-abductive inference
FASE'10 Proceedings of the 13th international conference on Fundamental Approaches to Software Engineering
ACM Transactions on Programming Languages and Systems (TOPLAS)
Heap-Dependent expressions in separation logic
FMOODS'10/FORTE'10 Proceedings of the 12th IFIP WG 6.1 international conference and 30th IFIP WG 6.1 international conference on Formal Techniques for Distributed Systems
ESOP'10 Proceedings of the 19th European conference on Programming Languages and Systems
Behavioral interface specification languages
ACM Computing Surveys (CSUR)
Comparing verification condition generation with symbolic execution: an experience report
VSTTE'12 Proceedings of the 4th international conference on Verified Software: theories, tools, experiments
Safe asynchronous multicore memory operations
ASE '11 Proceedings of the 2011 26th IEEE/ACM International Conference on Automated Software Engineering
Efficient and formal generalized symbolic execution
Automated Software Engineering
Efficient symbolic execution of value-based data structures for critical systems
NFM'12 Proceedings of the 4th international conference on NASA Formal Methods
Verifying the reflective visitor pattern
Proceedings of the 14th Workshop on Formal Techniques for Java-like Programs
The COST IC0701 verification competition 2011
FoVeOOS'11 Proceedings of the 2011 international conference on Formal Verification of Object-Oriented Software
Verified heap theorem prover by paramodulation
Proceedings of the 17th ACM SIGPLAN international conference on Functional programming
Verification of snapshot isolation in transactional memory java programs
ECOOP'12 Proceedings of the 26th European conference on Object-Oriented Programming
An introduction to data representation synthesis
Communications of the ACM
Predicate abstraction of Java programs with collections
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Studia Logica
Modular verification of OO programs with interfaces
ICFEM'12 Proceedings of the 14th international conference on Formal Engineering Methods: formal methods and software engineering
A theorem prover for Boolean BI
POPL '13 Proceedings of the 40th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Local Reasoning for Global Invariants, Part II: Dynamic Boundaries
Journal of the ACM (JACM)
Local Reasoning for Global Invariants, Part I: Region Logic
Journal of the ACM (JACM)
Proof-Directed Parallelization Synthesis by Separation Logic
ACM Transactions on Programming Languages and Systems (TOPLAS)
Generation of Java programs properties from test purposes
Proceedings of the 2013 International Symposium on Software Testing and Analysis
A formal semantics for isorecursive and equirecursive state abstractions
ECOOP'13 Proceedings of the 27th European conference on Object-Oriented Programming
ECOOP'13 Proceedings of the 27th European conference on Object-Oriented Programming
Automating separation logic using SMT
CAV'13 Proceedings of the 25th international conference on Computer Aided Verification
A proof system for separation logic with magic wand
Proceedings of the 41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages
Specification patterns for reasoning about recursion through the store
Information and Computation
Alias control for deterministic parallelism
Aliasing in Object-Oriented Programming
State based encapsulation for modular reasoning about behavior-preserving refactorings
Aliasing in Object-Oriented Programming
Separation logic for object-oriented programming
Aliasing in Object-Oriented Programming
Aliasing in Object-Oriented Programming
Verification of complex dynamic data tree with mu-calculus
Automated Software Engineering
Software verification with VeriFast: Industrial case studies
Science of Computer Programming
Hi-index | 0.02 |
In this paper we introduce a novel methodology for verifying a large set of Java programs which builds on recent theoretical developments in program verification: it combines the idea of abstract predicate families and the idea of symbolic execution and abstraction using separation logic. The proposed technology has been implemented in a new automatic verification system, called jStar, which combines theorem proving and abstract interpretation techniques. We demonstrate the effectiveness of our methodology by using jStar to verify example programs implementing four popular design patterns (subject/observer, visitor, factory, and pooling). Although these patterns are extensively used by object-oriented developers in real-world applications, so far they have been highly challenging for existing object-oriented verification techniques.