From the Book: This book is about programming in Spark--a language highly suited for writing programs that need to be reliable, and thus particularly relevant to those application areas where safety or security are important. It is a major revision of the previous book which was entitled High Integrity Ada. Spark is sometimes regarded as being just a subset of Ada with various annotations that you have to write as Ada comments. This is mechanically correct but is not at all the proper view to take. Spark should be seen as a distinct language in its own right and that is one reason why the title was changed in this edition. Spark has just those features required for writing reliable software: not so austere as to be a pain, but not so rich as to make program analysis out of the question. But it is sensible to share compiler technology with some other standard language and it so happens that Ada provides a better framework than many other languages. In fact, Ada seems to be the only language that has good lexical support for the concept of programming by contract by separating the ability to describe a software interface (the contract) from its implementation (the code) and enabling these to be analysed and compiled separately. The Eiffel language has created a strong interest in the concept of programming by contract which Spark has embodied since its inception in the late 1980s. There has recently also been interest in reliable software in areas other than those that have traditionally cared about reliability (avionics and railroads). It is now beginning to be realized that reliable software matters in other areas, such as finance, communications, medicine and motorcars. Accordingly, I have changed the presentation with the goal that no knowledge of Ada is required to understand the discussion. However, there are some remarks comparing Spark and Ada which will be helpful to those who do know Ada. Most of these are confined to the ends of sections and are in a different font but just a few are embedded in the text in square brackets. Either way they should not impede the discussion for the general reader. I have always been interested in techniques for writing reliable software, if only (presumably like most programmers) because I would like my programs to work without spending ages debugging the wretched things. Perhaps my first realization that the tools used really mattered came with my experience of using Algol 60 when I was a programmer in the chemical industry. It was a delight to use a compiler that stopped me violating the bounds of arrays; it seemed such an advance over Fortran and other even more primitive languages which allowed programs to violate themselves in an arbitrary manner. On the other hand I have always been slightly doubtful of the practicality of the formal theorists who like to define everything in some turgid specification language before contemplating the process known as programming. It has always seemed to me that formal specifications were pretty obscure to all but a few and might perhaps even make a program less reliable in a global sense by increasing the problem of communication between client and programmer. Nevertheless, I have often felt that underlying mathematical foundations can provide us with better tools even if the mathematical nature is somewhat hidden by a more practical facade. For example, enumeration types are really about sets but a deep understanding of set theory is not necessary in order to obtain the benefits of strong typing by realizing that a set of apples is not the same as a set of oranges. Spark has this flavour of practical helpfulness underpinned by solid mathematical foundations. You don't have to understand the theorems of Boehm and Jacopini in order to obtain the benefits of good flow structure. Equally, Spark does not require esoteric annotations of a formal kind but quite simple affirmations of access and visibility which enable the Spark Examiner to effectively 'look over your shoulder' and identify inconsistencies between what you said you were going to do in the annotations and what you actually did in the code. One of the advantages of Spark is that it may be used at various levels. At the simplest level of data flow analysis, the annotations ensure that problems of mistaken identity do not arise, that undefined values are not used and other similar flow errors are trapped. The next level of information flow analysis gives additional assurance regarding the inter-dependence between variables and can highlight unexpected relationships indicative of poorly organized data.For certain applications, formal proof may be useful and Spark provides a third level in which formal preconditions, postconditions and other assertions enable proofs to be established with the aid of the Spark tools. However, formal proof is easily oversold; the effort involved in developing a proof can be high and in many cases might well be spent more effectively on other aspects of ensuring that a program is fit for its purpose. So the ability to apply Spark at various levels according to the application is extremely valuable. A simple use of proof is in showing that a program is free from exceptions due to run-time errors such as those caused by overflow or writing outside an array. This can be done in a straightforward manner and does not require the addition of the more detailed annotations required for proof in general. The various levels of analysis might even be mixed in a single program. The fine detail of key algorithms might be formally proved, higher organizational parts might benefit from information flow analysis, whereas the overall driving routines could well need only data flow analysis. And proof of freedom from run-time errors might be applied to the whole program. I must say a little about the background to this book. I first encountered the foundation work done by Bob Phillips at Malvern when a consultant to the British Government and tasked with monitoring the usefulness of various research activities. I remember feeling that the flow analysis he was investigating was potentially good stuff but needed practical user interfaces. That was twenty-five years ago. The current language and tools reflect the enormous energy put into the topic since then by Bernard Carre and his colleagues, first at Southampton University, then at Program Validation Limited and later at Praxis Critical Systems. The original approach was for the analysis of existing programs but now the emphasis is much more on writing the programs correctly in the first place. However, it always seemed to me that although the tools and techniques were gaining steady acceptance, nevertheless both the tools and indeed the world of programmers deserved a more accessible description than that found in conference papers and user manuals. A big impetus to actually do something was when my daughter Janet and I were invited by Program Validation Limited to join in a review of the formal definition of Spark and its further development. This resulted in a report familiarly known as Janet and John go a-Sparking (non-British readers should note that there is a series of children's books concerning the activities of Janet and John). Being involved in the review strengthened my feeling that a book would be very appropriate and, thanks to the support of Praxis, led to the first version of this book in 1997. Since then, Spark and its tools have evolved further to include the safe parts of object oriented programming, a better means of interfacing to other parts of a system, a simpler means of showing that a program is free from exceptions, and more auditable means of proving that a program is correct. The various tools are also greatly improved both in terms of speed and quality of reporting. These improvements justified this new book and I am most grateful for the support of Praxis in enabling me to write it. The CD at the back includes the latest demonstration versions of the major tools and electronic copies of a great deal of further documentation as well as the exercises and answers. More information regarding Praxis and Spark will be found at www.sparkada.com. I must now thank all those who have helped in many different ways. The external reviewers included Kung-Kiu Lau, George Romanski, Jim Sutton, Tucker Taft and Phil Thornley; their comments were extremely valuable in ensuring that the book met its main objectives. I was greatly assisted by a number of staff of Praxis Critical Systems and I am especially grateful to Peter Amey, Rod Chapman, Jonathan Hammond and Adrian Hilton for their detailed comments and encouragement. I must also continue to thank Bernard Carre for his vision in getting it all going; Bernard has now retired to warmer climes but his good work lives on.Finally, many thanks to my wife Barbara for her help in typesetting and proofreading, to friends at Addison-Wesley for their continued guidance and to Sheila Chatten for her help in the final stages of production. John BarnesCaversham, EnglandDecember 2002
Cited By
- Luo Z and Siegel S Collective Contracts for Message-Passing Parallel Programs Computer Aided Verification, (44-68)
- Sritharan S and Hoang T Towards Generating SPARK from Event-B Models Integrated Formal Methods, (103-120)
- Runge T, Thüm T, Cleophas L, Schaefer I and Watson B Comparing Correctness-by-Construction with Post-Hoc Verification—A Qualitative User Study Formal Methods. FM 2019 International Workshops, (388-405)
- Aronsson M, Claessen K, Sheeran M and Smallbone N Safety at speed: in-place array algorithms from pure functional programs by safely re-using storage Proceedings of the 8th ACM SIGPLAN International Workshop on Functional High-Performance and Numerical Computing, (34-46)
- Liu J, Corbett-Davies J, Ferraiuolo A, Ivanov A, Luo M, Suh G, Myers A and Campbell M Secure Autonomous Cyber-Physical Systems Through Verifiable Information Flow Control Proceedings of the 2018 Workshop on Cyber-Physical Systems Security and PrivaCy, (48-59)
- Rivera V, Cataño N, Wahls T and Rueda C (2017). Code generation for Event-B, International Journal on Software Tools for Technology Transfer (STTT), 19:1, (31-52), Online publication date: 1-Feb-2017.
- Rafnsson W, Garg D and Sabelfeld A Progress-Sensitive Security for SPARK Proceedings of the 8th International Symposium on Engineering Secure Software and Systems - Volume 9639, (20-37)
- Belo Lourenço C, Frade M and Sousa Pinto J Formalizing Single-Assignment Program Verification Proceedings of the 25th European Symposium on Programming Languages and Systems - Volume 9632, (41-67)
- Elliott T, Pike L, Winwood S, Hickey P, Bielman J, Sharp J, Seidel E and Launchbury J (2015). Guilt free ivory, ACM SIGPLAN Notices, 50:12, (189-200), Online publication date: 28-Jan-2016.
- Bello L, Hedin D and Sabelfeld A Value Sensitivity and Observable Abstract Values for Information Flow Control Proceedings of the 20th International Conference on Logic for Programming, Artificial Intelligence, and Reasoning - Volume 9450, (63-78)
- Elliott T, Pike L, Winwood S, Hickey P, Bielman J, Sharp J, Seidel E and Launchbury J Guilt free ivory Proceedings of the 2015 ACM SIGPLAN Symposium on Haskell, (189-200)
- Zhang D, Wang Y, Suh G and Myers A (2015). A Hardware Design Language for Timing-Sensitive Information-Flow Security, ACM SIGARCH Computer Architecture News, 43:1, (503-516), Online publication date: 29-May-2015.
- Zhang D, Wang Y, Suh G and Myers A (2015). A Hardware Design Language for Timing-Sensitive Information-Flow Security, ACM SIGPLAN Notices, 50:4, (503-516), Online publication date: 12-May-2015.
- Zhang D, Wang Y, Suh G and Myers A A Hardware Design Language for Timing-Sensitive Information-Flow Security Proceedings of the Twentieth International Conference on Architectural Support for Programming Languages and Operating Systems, (503-516)
- Taft S, Moore B, Pinho L and Michell S (2014). Safe parallel programming in ada with language extensions, ACM SIGAda Ada Letters, 34:3, (87-96), Online publication date: 26-Nov-2014.
- Taft S, Moore B, Pinho L and Michell S Safe parallel programming in ada with language extensions Proceedings of the 2014 ACM SIGAda annual conference on High integrity language technology, (87-96)
- Hawkins R, Miyazawa A, Cavalcanti A, Kelly T and Rowlands J Assurance Cases for Block-Configurable Software Proceedings of the 33rd International Conference on Computer Safety, Reliability, and Security - Volume 8666, (155-169)
- Nguyen T, Kapur D, Weimer W and Forrest S (2014). DIG, ACM Transactions on Software Engineering and Methodology, 23:4, (1-30), Online publication date: 5-Sep-2014.
- Visser W, Bjørner N and Shankar N Software engineering and automated deduction Future of Software Engineering Proceedings, (155-166)
- Hatcliff J, Wassyng A, Kelly T, Comar C and Jones P Certifiably safe software-dependent systems: challenges and directions Future of Software Engineering Proceedings, (182-200)
- Miyazawa A and Cavalcanti A (2013). Refinement-based verification of implementations of Stateflow charts, Formal Aspects of Computing, 26:2, (367-405), Online publication date: 1-Mar-2014.
- Logozzo F (2013). Practical specification and verification with code contracts, ACM SIGAda Ada Letters, 33:3, (7-8), Online publication date: 29-Nov-2013.
- Logozzo F Practical specification and verification with code contracts Proceedings of the 2013 ACM SIGAda annual conference on High integrity language technology, (7-8)
- Wellings A, Luckcuck M and Cavalcanti A Safety-critical Java level 2 Proceedings of the 11th International Workshop on Java Technologies for Real-time and Embedded Systems, (48-57)
- Hatcliff J, Robby , Chalin P and Belt J Explicating symbolic execution (xSymExe): an evidence-based verification framework Proceedings of the 2013 International Conference on Software Engineering, (222-231)
- Yi J, Robby , Deng X and Roychoudhury A Past expression Proceedings of the 12th annual international conference on Aspect-oriented software development, (133-144)
- Cavalcanti A, Wellings A and Woodcock J (2013). The Safety-Critical Java memory model formalised, Formal Aspects of Computing, 25:1, (37-57), Online publication date: 1-Jan-2013.
- Kanig J, Schonberg E and Dross C Hi-Lite Proceedings of the 2012 ACM conference on High integrity language technology, (27-34)
- Kanig J, Schonberg E and Dross C (2012). Hi-Lite, ACM SIGAda Ada Letters, 32:3, (27-34), Online publication date: 29-Nov-2012.
- Moore S, Askarov A and Chong S Precise enforcement of progress-sensitive security Proceedings of the 2012 ACM conference on Computer and communications security, (881-893)
- Babu P, Kumar C, Murali N and Jayakumar T (2012). An intuitive approach to determine test adequacy in safety-critical software, ACM SIGSOFT Software Engineering Notes, 37:5, (1-10), Online publication date: 7-Sep-2012.
- Faria J, Martins J and Pinto J An approach to model checking ada programs Proceedings of the 17th Ada-Europe international conference on Reliable Software Technologies, (105-118)
- Ruiz J, Comar C and Moy Y Source code as the key artifact in requirement-based development Proceedings of the 17th Ada-Europe international conference on Reliable Software Technologies, (49-59)
- da Cruz D, Frade M and Pinto J Verification conditions for single-assignment programs Proceedings of the 27th Annual ACM Symposium on Applied Computing, (1264-1270)
- Brain M and Schanda F A lightweight technique for distributed and incremental program verification Proceedings of the 4th international conference on Verified Software: theories, tools, experiments, (114-129)
- Belt J, Hatcliff J, Robby , Chalin P, Hardin D and Deng X (2011). Enhancing spark's contract checking facilities using symbolic execution, ACM SIGAda Ada Letters, 31:3, (47-60), Online publication date: 15-Nov-2011.
- Tokar PhD J, Jones F, Black PhD P and Dupilka C (2011). Software vulnerabilities precluded by spark, ACM SIGAda Ada Letters, 31:3, (39-46), Online publication date: 15-Nov-2011.
- Belt J, Hatcliff J, Robby , Chalin P, Hardin D and Deng X Enhancing spark's contract checking facilities using symbolic execution Proceedings of the 2011 ACM annual international conference on Special interest group on the ada programming language, (47-60)
- Tokar PhD J, Jones F, Black PhD P and Dupilka C Software vulnerabilities precluded by spark Proceedings of the 2011 ACM annual international conference on Special interest group on the ada programming language, (39-46)
- Chapman R, Botcazou E and Wallenburg A SPARKSkein Proceedings of the 14th Brazilian conference on Formal Methods: foundations and Applications, (16-27)
- Birgisson A and Sabelfeld A Multi-run security Proceedings of the 16th European conference on Research in computer security, (372-391)
- Beringer L Relational decomposition Proceedings of the Second international conference on Interactive theorem proving, (39-54)
- Cavalcanti A, Wellings A and Woodcock J The safety-critical Java memory model Proceedings of the 17th international conference on Formal methods, (246-261)
- Rafnsson W and Sabelfeld A Limiting information leakage in event-based communication Proceedings of the ACM SIGPLAN 6th Workshop on Programming Languages and Analysis for Security, (1-16)
- Barnett M, Fähndrich M, Leino K, Müller P, Schulte W and Venter H (2011). Specification and verification, Communications of the ACM, 54:6, (81-91), Online publication date: 1-Jun-2011.
- Belt J, Hatcliff J, Robby R, Chalin P, Hardin D and Deng X Bakar Kiasan Proceedings of the Third international conference on NASA Formal methods, (58-72)
- Wichmann B Whetstone wanderings Dependable and Historic Computing, (84-92)
- Smith D and Hoebel L Derivational software engineering Proceedings of the FSE/SDP workshop on Future of software engineering research, (355-358)
- Schonberg E (2010). Towards Ada 2012, ACM SIGAda Ada Letters, 30:3, (63-70), Online publication date: 5-Nov-2010.
- Bornat R and Amjad H (2010). Inter-process buffers in separation logic with rely-guarantee, Formal Aspects of Computing, 22:6, (735-772), Online publication date: 1-Nov-2010.
- Schonberg E Towards Ada 2012 Proceedings of the ACM SIGAda annual international conference on SIGAda, (63-70)
- Da Cruz D, Henriques P and Pinto J Contract-based slicing Proceedings of the 4th international conference on Leveraging applications of formal methods, verification, and validation - Volume Part I, (106-120)
- Hutchesson S and McDermid J Development of high-integrity software product lines using model transformation Proceedings of the 29th international conference on Computer safety, reliability, and security, (389-401)
- Lesens D Using static analysis in space Proceedings of the 17th international conference on Static analysis, (51-70)
- Barthe G, Rezk T, Russo A and Sabelfeld A (2010). Security of multithreaded programs by compilation, ACM Transactions on Information and System Security, 13:3, (1-32), Online publication date: 1-Jul-2010.
- Brito E and Sousa Pinto J Program verification in SPARK and ACSL Proceedings of the 15th Ada-Europe international conference on Reliable Software Technologies, (97-110)
- Schonberg E Towards ada 2012 Proceedings of the 15th Ada-Europe international conference on Reliable Software Technologies, (238-250)
- Woodcock J, Larsen P, Bicarregui J and Fitzgerald J (2009). Formal methods, ACM Computing Surveys, 41:4, (1-36), Online publication date: 1-Oct-2009.
- Cohen E, Moskal M, Tobies S and Schulte W (2009). A Precise Yet Efficient Memory Model For C, Electronic Notes in Theoretical Computer Science (ENTCS), 254, (85-103), Online publication date: 1-Oct-2009.
- Dewar R and Astrachan O (2009). CS education in the U.S., XRDS: Crossroads, The ACM Magazine for Students, 16:1, (17-20), Online publication date: 1-Sep-2009.
- Dewar R and Astrachan O (2009). Point/counterpointCS education in the U.S., Communications of the ACM, 52:7, (41-45), Online publication date: 1-Jul-2009.
- Askarov A and Sabelfeld A Catch me if you can Proceedings of the ACM SIGPLAN Fourth Workshop on Programming Languages and Analysis for Security, (45-57)
- Sabelfeld A and Russo A From dynamic to static and back Proceedings of the 7th international Andrei Ershov Memorial conference on Perspectives of Systems Informatics, (352-365)
- Finifter M, Mettler A, Sastry N and Wagner D Verifiable functional purity in java Proceedings of the 15th ACM conference on Computer and communications security, (161-174)
- Rakamaric Z and Hu A Automatic Inference of Frame Axioms Using Static Analysis Proceedings of the 23rd IEEE/ACM International Conference on Automated Software Engineering, (89-98)
- Nanevski A, Morrisett G and Birkedal L (2008). Hoare type theory, polymorphism and separation1, Journal of Functional Programming, 18:5-6, (865-911), Online publication date: 1-Sep-2008.
- Dévai G (2008). Programming language elements for correctness proofs, Acta Cybernetica, 18:3, (403-425), Online publication date: 1-Jan-2008.
- Nettleton C, Ifill W and Marsh C (2007). Towards a demonstrably-correct ada compiler, ACM SIGAda Ada Letters, XXVII:3, (89-96), Online publication date: 17-Nov-2007.
- Lau K (2007). Using SPARK for a beginner's course on reasoning about imperative programs, ACM SIGAda Ada Letters, XXVII:3, (75-78), Online publication date: 17-Nov-2007.
- Lau K and Wang Z (2007). Verified component-based software in SPARK, ACM SIGAda Ada Letters, XXVII:3, (51-58), Online publication date: 17-Nov-2007.
- Jackson P, Ellis B and Sharp K Using SMT solvers to verify high-integrity programs Proceedings of the second workshop on Automated formal methods, (60-68)
- Ireland A Cooperative reasoning for automatic software verification Proceedings of the second workshop on Automated formal methods, (51-54)
- Nettleton C, Ifill W and Marsh C Towards a demonstrably-correct ada compiler Proceedings of the 2007 ACM international conference on SIGAda annual international conference, (89-96)
- Lau K Using SPARK for a beginner's course on reasoning about imperative programs Proceedings of the 2007 ACM international conference on SIGAda annual international conference, (75-78)
- Lau K and Wang Z Verified component-based software in SPARK Proceedings of the 2007 ACM international conference on SIGAda annual international conference, (51-58)
- Brown A and McDermid J The art and science of software architecture Proceedings of the First European conference on Software Architecture, (237-256)
- Chong S, Vikram K and Myers A SIF Proceedings of 16th USENIX Security Symposium on USENIX Security Symposium, (1-16)
- Urueña S and Zamorano J (2007). Building high-integrity distributed systems with Ravenscar restrictions, ACM SIGAda Ada Letters, XXVII:2, (29-36), Online publication date: 1-Aug-2007.
- Riehle R (2007). Designing software components to tolerances, ACM SIGSOFT Software Engineering Notes, 32:4, (7-es), Online publication date: 1-Jul-2007.
- Chalin P (2007). Are the Logical Foundations of Verifying Compiler Prototypes Matching user Expectations?, Formal Aspects of Computing, 19:2, (139-158), Online publication date: 1-Jun-2007.
- Chalin P A Sound Assertion Semantics for the Dependable Systems Evolution Verifying Compiler Proceedings of the 29th international conference on Software Engineering, (23-33)
- Brosgol B Languages for Safety-Critical Software Companion to the proceedings of the 29th International Conference on Software Engineering, (180-181)
- Urueña S and Zamorano J Building high-integrity distributed systems with Ravenscar restrictions Proceedings of the 13th international workshop on Real-time Ada, (29-36)
- Lau K (2007). Active learning sheets for a beginner's course on reasoning about imperative programs, ACM SIGCSE Bulletin, 39:1, (198-202), Online publication date: 7-Mar-2007.
- Lau K Active learning sheets for a beginner's course on reasoning about imperative programs Proceedings of the 38th SIGCSE technical symposium on Computer science education, (198-202)
- Burns A and Lin T (2007). An engineering process for the verification of real-time systems, Formal Aspects of Computing, 19:1, (111-136), Online publication date: 1-Mar-2007.
- Sward R and Gerken M (2006). Developing safety critical software for an unmanned aerial vehicle situational awareness tool, ACM SIGAda Ada Letters, XXVI:3, (45-50), Online publication date: 17-Nov-2006.
- Sward R and Gerken M Developing safety critical software for an unmanned aerial vehicle situational awareness tool Proceedings of the 2006 annual ACM SIGAda international conference on Ada, (45-50)
- Chalin P Early detection of JML specification errors using ESC/Java2 Proceedings of the 2006 conference on Specification and verification of component-based systems, (25-32)
- Heitmeyer C, Archer M, Leonard E and McLean J Formal specification and verification of data separation in a separation kernel for an embedded system Proceedings of the 13th ACM conference on Computer and communications security, (346-355)
- Leavens G, Abrial J, Batory D, Butler M, Coglio A, Fisler K, Hehner E, Jones C, Miller D, Peyton-Jones S, Sitaraman M, Smith D and Stump A Roadmap for enhanced languages and methods to aid verification Proceedings of the 5th international conference on Generative programming and component engineering, (221-236)
- Curtis D SPARK annotations within executable UML Proceedings of the 11th Ada-Europe international conference on Reliable Software Technologies, (83-93)
- Burgstaller B, Blieberger J and Mittermayr R Static detection of access anomalies in ada95 Proceedings of the 11th Ada-Europe international conference on Reliable Software Technologies, (40-55)
- Yin X The echo approach to formal verification Proceedings of the 28th international conference on Software engineering, (981-984)
- Chapman R Correctness by construction Proceedings of the 10th Australian workshop on Safety critical systems and software - Volume 55, (43-46)
- Amey P Why programming languages still matter Rigorous Development of Complex Fault-Tolerant Systems, (391-402)
- Chalin P Are practitioners writing contracts? Rigorous Development of Complex Fault-Tolerant Systems, (100-113)
- Sward R and Baird L (2005). Optimizing the SPARK program slicer, ACM SIGAda Ada Letters, XXV:4, (17-22), Online publication date: 17-Nov-2005.
- Sautejeau X (2005). Modeling SPARK systems with UML, ACM SIGAda Ada Letters, XXV:4, (11-16), Online publication date: 17-Nov-2005.
- Sward R and Baird L Optimizing the SPARK program slicer Proceedings of the 2005 annual ACM SIGAda international conference on Ada: The Engineering of Correct and Reliable Software for Real-Time & Distributed Systems using Ada and Related Technologies, (17-22)
- Sautejeau X Modeling SPARK systems with UML Proceedings of the 2005 annual ACM SIGAda international conference on Ada: The Engineering of Correct and Reliable Software for Real-Time & Distributed Systems using Ada and Related Technologies, (11-16)
- Barnett M, Chang B, DeLine R, Jacobs B and Leino K Boogie Proceedings of the 4th international conference on Formal Methods for Components and Objects, (364-387)
- Lau K, Ornaghi M and Wang Z A software component model and its preliminary formalisation Proceedings of the 4th international conference on Formal Methods for Components and Objects, (1-21)
- Chalin P Logical Foundations of Program Assertions Proceedings of the Third IEEE International Conference on Software Engineering and Formal Methods, (383-393)
- Hilton A and Hall J Developing critical systems with PLD components Proceedings of the 10th international workshop on Formal methods for industrial critical systems, (72-79)
- Strunk E, Yin X and Knight J Echo Proceedings of the 10th international workshop on Formal methods for industrial critical systems, (44-53)
- Sward R and Baird L Proving functional equivalence for program slicing in SPARKTM Proceedings of the 10th Ada-Europe international conference on Reliable Software Technologies, (105-114)
- Ruiz J GNAT pro for on-board mission-critical space applications Proceedings of the 10th Ada-Europe international conference on Reliable Software Technologies, (248-259)
- Amey P, Chapman R and White N Smart certification of mixed criticality systems Proceedings of the 10th Ada-Europe international conference on Reliable Software Technologies, (144-155)
- Lau K, Velasco Elizondo P and Wang Z Exogenous connectors for software components Proceedings of the 8th international conference on Component-Based Software Engineering, (90-106)
- Paige R, Chivers H, McDermid J and Stephenson Z High-integrity extreme programming Proceedings of the 2005 ACM symposium on Applied computing, (1518-1523)
- McCormick J We've been working on the railroad Proceedings of the 36th SIGCSE technical symposium on Computer science education, (530-534)
- McCormick J (2005). We've been working on the railroad, ACM SIGCSE Bulletin, 37:1, (530-534), Online publication date: 23-Feb-2005.
- Chapman R and Hilton A (2004). Enforcing security and safety models with an information flow analysis tool, ACM SIGAda Ada Letters, XXIV:4, (39-46), Online publication date: 1-Dec-2004.
- Sward R and Chamillard A (2004). Re-engineering global variables in Ada, ACM SIGAda Ada Letters, XXIV:4, (29-34), Online publication date: 1-Dec-2004.
- Chapman R and Hilton A Enforcing security and safety models with an information flow analysis tool Proceedings of the 2004 annual ACM SIGAda international conference on Ada: The engineering of correct and reliable software for real-time & distributed systems using Ada and related technologies, (39-46)
- Sward R and Chamillard A Re-engineering global variables in Ada Proceedings of the 2004 annual ACM SIGAda international conference on Ada: The engineering of correct and reliable software for real-time & distributed systems using Ada and related technologies, (29-34)
- Davis N, Humphrey W, Redwine Jr. S, Zibulski G and McGraw G (2004). Processes for Producing Secure Software, IEEE Security and Privacy, 2:3, (18-25), Online publication date: 1-May-2004.
- Barnett M, Leino K and Schulte W The spec# programming system Proceedings of the 2004 international conference on Construction and Analysis of Safe, Secure, and Interoperable Smart Devices, (49-69)
- Amey P and Chapman R (2003). Static verification and extreme programming, ACM SIGAda Ada Letters, XXIV:1, (4-9), Online publication date: 1-Mar-2004.
- Amey P and Chapman R Static verification and extreme programming Proceedings of the 2003 annual ACM SIGAda international conference on Ada: the engineering of correct and reliable software for real-time & distributed systems using ada and related technologies, (4-9)
- Amey P and Dobbing B (2003). Static analysis of Ravenscar programs, ACM SIGAda Ada Letters, XXIII:4, (58-64), Online publication date: 1-Dec-2003.
- Ellis B and Ireland A Automation for exception freedom proofs Proceedings of the 18th IEEE International Conference on Automated Software Engineering, (343-346)
- Amey P and Dobbing B Static analysis of Ravenscar programs Proceedings of the 12th international workshop on Real-time Ada, (58-64)
- Amey P and Dobbing B High integrity Ravenscar Proceedings of the 8th Ada-Europe international conference on Reliable software technologies, (68-79)
- Laski J, Stanley W and Hurst J (1998). Dependency analysis of Ada programs, ACM SIGAda Ada Letters, XVIII:6, (263-275), Online publication date: 1-Nov-1998.
- Laski J, Stanley W and Hurst J Dependency analysis of Ada programs Proceedings of the 1998 annual ACM SIGAda international conference on Ada, (263-275)
Index Terms
- High Integrity Software: The SPARK Approach to Safety and Security
Recommendations
Software techniques
Kolence: Thank you very much, Fran. You know, it's really a pleasure to be here; I doubt if Mr. Ramsay realizes that I'm the one that founded SIGCOSIM--back in 1960 when I was in New Jersey at RCA. I felt very deeply the need for installation management ...
Guidance for the use of the Ada programming language in high integrity systems
This paper is the current result of a study by the ISO HRG Rapporteur group which is being circulated for comment. Many people have contributed to this, but those who have either attended two recent meetings of group or have made substantial e-mail ...