Test templates: a specification-based testing framework
ICSE '93 Proceedings of the 15th international conference on Software Engineering
Object-oriented software construction (2nd ed.)
Object-oriented software construction (2nd ed.)
Structural specification-based testing: automated support and experimental evaluation
ESEC/FSE-7 Proceedings of the 7th European software engineering conference held jointly with the 7th ACM SIGSOFT international symposium on Foundations of software engineering
Data Abstraction, Implementation, Specification, and Testing
ACM Transactions on Programming Languages and Systems (TOPLAS)
Korat: automated testing based on Java predicates
ISSTA '02 Proceedings of the 2002 ACM SIGSOFT international symposium on Software testing and analysis
Test Driven Development: By Example
Test Driven Development: By Example
A Simple and Practical Approach to Unit Testing: The JML and JUnit Way
ECOOP '02 Proceedings of the 16th European Conference on Object-Oriented Programming
How Did Software Get So Reliable Without Proof?
FME '96 Proceedings of the Third International Symposium of Formal Methods Europe on Industrial Benefit and Advances in Formal Methods
Assessing test-driven development at IBM
Proceedings of the 25th International Conference on Software Engineering
TestEra: A Novel Framework for Automated Testing of Java Programs
Proceedings of the 16th IEEE international conference on Automated software engineering
Two Controlled Experiments Concerning the Usefulness of Assertions as a Means for Programming
ICSM '02 Proceedings of the International Conference on Software Maintenance (ICSM'02)
How the design of JML accommodates both runtime assertion checking and formal verification
Science of Computer Programming - Formal methods for components and objects pragmatic aspects and applications
Tool-assisted unit-test generation and selection based on operational abstractions
Automated Software Engineering
ASE '06 Proceedings of the 21st IEEE/ACM International Conference on Automated Software Engineering
Empirical Software Engineering
Using formal specifications to support testing
ACM Computing Surveys (CSUR)
A comparative study of programmer-written and automatically inferred contracts
Proceedings of the eighteenth international symposium on Software testing and analysis
Computer
Generating tests from UML specifications
UML'99 Proceedings of the 2nd international conference on The unified modeling language: beyond the standard
Pex: white box test generation for .NET
TAP'08 Proceedings of the 2nd international conference on Tests and proofs
Specifying reusable components
VSTTE'10 Proceedings of the Third international conference on Verified software: theories, tools, experiments
Reusing a JML Specification Dedicated to Verification for Testing, and Vice-Versa: Case Studies
Journal of Automated Reasoning
Proceedings of the 33rd International Conference on Software Engineering
Proceedings of the 33rd International Conference on Software Engineering
The 1st verified software competition: experience report
FM'11 Proceedings of the 17th international conference on Formal methods
Guiding a General-Purpose C Verifier to Prove Cryptographic Protocols
CSF '11 Proceedings of the 2011 IEEE 24th Computer Security Foundations Symposium
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
Eclat: automatic generation and classification of test inputs
ECOOP'05 Proceedings of the 19th European conference on Object-Oriented Programming
Are practitioners writing contracts?
Rigorous Development of Complex Fault-Tolerant Systems
Stateful testing: Finding more errors in code and contracts
ASE '11 Proceedings of the 2011 26th IEEE/ACM International Conference on Automated Software Engineering
What good are strong specifications?
Proceedings of the 2013 International Conference on Software Engineering
What good are strong specifications?
Proceedings of the 2013 International Conference on Software Engineering
Hi-index | 0.00 |
Experience with lightweight formal methods suggests that programmers are willing to write specification if it brings tangible benefits to their usual development activities. This paper considers stronger specifications and studies whether they can be deployed as an incremental practice that brings additional benefits without being unacceptably expensive. We introduce a methodology that extends Design by Contract to write strong specifications of functional properties in the form of preconditions, postconditions, and invariants. The methodology aims at being palatable to developers who are not fluent in formal techniques but are comfortable with writing simple specifications. We evaluate the cost and the benefits of using strong specifications by applying the methodology to testing data structure implementations written in Eiffel and C#. In our extensive experiments, testing against strong specifications detects twice as many bugs as standard contracts, with a reasonable overhead in terms of annotation burden and run-time performance while testing. In the wide spectrum of formal techniques for software quality, testing against strong specifications lies in a "sweet spot" with a favorable benefit to effort ratio.