A behavioral notion of subtyping
ACM Transactions on Programming Languages and Systems (TOPLAS)
The B-book: assigning programs to meanings
The B-book: assigning programs to meanings
ESP: path-sensitive program verification in polynomial time
PLDI '02 Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation
The Infeasibility of Quantifying the Reliability of Life-Critical Real-Time Software
IEEE Transactions on Software Engineering
Optimizing Code Size through Procedural Abstraction
LCTES '00 Proceedings of the ACM SIGPLAN Workshop on Languages, Compilers, and Tools for Embedded Systems
Houdini, an Annotation Assistant for ESC/Java
FME '01 Proceedings of the International Symposium of Formal Methods Europe on Formal Methods for Increasing Software Productivity
High Integrity Software: The SPARK Approach to Safety and Security
High Integrity Software: The SPARK Approach to Safety and Security
Automated Support for Program Refactoring using Invariants
ICSM '01 Proceedings of the IEEE International Conference on Software Maintenance (ICSM'01)
Automated soundness proofs for dataflow analyses and transformations via local rules
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
An overview of JML tools and applications
International Journal on Software Tools for Technology Transfer (STTT) - Special section on formal methods for industrial critical systems
Echo: a practical approach to formal verification
Proceedings of the 10th international workshop on Formal methods for industrial critical systems
Applying Formal Methods to a Certifiably Secure Software System
IEEE Transactions on Software Engineering
Stratego/XT 0.17. A language and toolset for program transformation
Science of Computer Programming
Spin model checker, the: primer and reference manual
Spin model checker, the: primer and reference manual
Formal verification of security properties of smart card embedded source code
FM'05 Proceedings of the 2005 international conference on Formal Methods
Formal specifications on industrial-strength code—from myth to reality
CAV'06 Proceedings of the 18th international conference on Computer Aided Verification
The case for software evolution
Proceedings of the FSE/SDP workshop on Future of software engineering research
Practical limits on software dependability: a case study
Ada-Europe'10 Proceedings of the 15th Ada-Europe international conference on Reliable Software Technologies
Using dynamic analysis to discover polynomial and array invariants
Proceedings of the 34th International Conference on Software Engineering
Hi-index | 0.00 |
In this paper we describe a novel yet practical approach to the formal verification of implementations. Our approach splits verification into two major parts. The first part verifies an implementation against a low-level specification written using source-code annotations. The second extracts a high-level specification from the implementation with the low-level specification, and proves that it implies the original system specification from which the system was built. Semantics-preserving refactorings are applied to the implementation in both parts to reduce the complexity of the verification. Much of the approach is automated. It reduces the verification burden by distributing it over separate tools and techniques, and it addresses both functional correctness and high-level properties at separate levels. As an illustration, we give a detailed example by verifying an optimized implementation of the Advanced Encryption Standard (AES) against its official specification.