Nothing Special   »   [go: up one dir, main page]

skip to main content
Skip header Section
High Integrity Software: The SPARK Approach to Safety and SecurityJune 2003
Publisher:
  • Addison-Wesley Longman Publishing Co., Inc.
  • 75 Arlington Street, Suite 300 Boston, MA
  • United States
ISBN:978-0-321-13616-9
Published:01 June 2003
Pages:
448
Skip Bibliometrics Section
Reflects downloads up to 13 Nov 2024Bibliometrics
Skip Abstract Section
Abstract

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

  1. Luo Z and Siegel S Collective Contracts for Message-Passing Parallel Programs Computer Aided Verification, (44-68)
  2. Sritharan S and Hoang T Towards Generating SPARK from Event-B Models Integrated Formal Methods, (103-120)
  3. 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)
  4. ACM
    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)
  5. ACM
    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)
  6. 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.
  7. 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)
  8. 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)
  9. ACM
    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.
  10. 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)
  11. ACM
    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)
  12. ACM
    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.
  13. ACM
    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.
  14. ACM
    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)
  15. ACM
    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.
  16. ACM
    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)
  17. 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)
  18. ACM
    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.
  19. ACM
    Visser W, Bjørner N and Shankar N Software engineering and automated deduction Future of Software Engineering Proceedings, (155-166)
  20. ACM
    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)
  21. 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.
  22. ACM
    Logozzo F (2013). Practical specification and verification with code contracts, ACM SIGAda Ada Letters, 33:3, (7-8), Online publication date: 29-Nov-2013.
  23. ACM
    Logozzo F Practical specification and verification with code contracts Proceedings of the 2013 ACM SIGAda annual conference on High integrity language technology, (7-8)
  24. ACM
    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)
  25. 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)
  26. ACM
    Yi J, Robby , Deng X and Roychoudhury A Past expression Proceedings of the 12th annual international conference on Aspect-oriented software development, (133-144)
  27. 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.
  28. ACM
    Kanig J, Schonberg E and Dross C Hi-Lite Proceedings of the 2012 ACM conference on High integrity language technology, (27-34)
  29. ACM
    Kanig J, Schonberg E and Dross C (2012). Hi-Lite, ACM SIGAda Ada Letters, 32:3, (27-34), Online publication date: 29-Nov-2012.
  30. ACM
    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)
  31. ACM
    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.
  32. 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)
  33. 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)
  34. ACM
    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)
  35. 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)
  36. ACM
    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.
  37. ACM
    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.
  38. ACM
    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)
  39. ACM
    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)
  40. Chapman R, Botcazou E and Wallenburg A SPARKSkein Proceedings of the 14th Brazilian conference on Formal Methods: foundations and Applications, (16-27)
  41. Birgisson A and Sabelfeld A Multi-run security Proceedings of the 16th European conference on Research in computer security, (372-391)
  42. Beringer L Relational decomposition Proceedings of the Second international conference on Interactive theorem proving, (39-54)
  43. Cavalcanti A, Wellings A and Woodcock J The safety-critical Java memory model Proceedings of the 17th international conference on Formal methods, (246-261)
  44. ACM
    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)
  45. ACM
    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.
  46. 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)
  47. Wichmann B Whetstone wanderings Dependable and Historic Computing, (84-92)
  48. ACM
    Smith D and Hoebel L Derivational software engineering Proceedings of the FSE/SDP workshop on Future of software engineering research, (355-358)
  49. ACM
    Schonberg E (2010). Towards Ada 2012, ACM SIGAda Ada Letters, 30:3, (63-70), Online publication date: 5-Nov-2010.
  50. 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.
  51. ACM
    Schonberg E Towards Ada 2012 Proceedings of the ACM SIGAda annual international conference on SIGAda, (63-70)
  52. 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)
  53. 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)
  54. Lesens D Using static analysis in space Proceedings of the 17th international conference on Static analysis, (51-70)
  55. ACM
    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.
  56. 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)
  57. Schonberg E Towards ada 2012 Proceedings of the 15th Ada-Europe international conference on Reliable Software Technologies, (238-250)
  58. ACM
    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.
  59. 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.
  60. ACM
    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.
  61. ACM
    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.
  62. ACM
    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)
  63. 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)
  64. ACM
    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)
  65. 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)
  66. 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.
  67. Dévai G (2008). Programming language elements for correctness proofs, Acta Cybernetica, 18:3, (403-425), Online publication date: 1-Jan-2008.
  68. ACM
    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.
  69. ACM
    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.
  70. ACM
    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.
  71. ACM
    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)
  72. ACM
    Ireland A Cooperative reasoning for automatic software verification Proceedings of the second workshop on Automated formal methods, (51-54)
  73. ACM
    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)
  74. ACM
    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)
  75. ACM
    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)
  76. Brown A and McDermid J The art and science of software architecture Proceedings of the First European conference on Software Architecture, (237-256)
  77. Chong S, Vikram K and Myers A SIF Proceedings of 16th USENIX Security Symposium on USENIX Security Symposium, (1-16)
  78. ACM
    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.
  79. ACM
    Riehle R (2007). Designing software components to tolerances, ACM SIGSOFT Software Engineering Notes, 32:4, (7-es), Online publication date: 1-Jul-2007.
  80. 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.
  81. Chalin P A Sound Assertion Semantics for the Dependable Systems Evolution Verifying Compiler Proceedings of the 29th international conference on Software Engineering, (23-33)
  82. Brosgol B Languages for Safety-Critical Software Companion to the proceedings of the 29th International Conference on Software Engineering, (180-181)
  83. ACM
    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)
  84. ACM
    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.
  85. ACM
    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)
  86. 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.
  87. ACM
    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.
  88. ACM
    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)
  89. ACM
    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)
  90. ACM
    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)
  91. ACM
    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)
  92. Curtis D SPARK annotations within executable UML Proceedings of the 11th Ada-Europe international conference on Reliable Software Technologies, (83-93)
  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)
  94. ACM
    Yin X The echo approach to formal verification Proceedings of the 28th international conference on Software engineering, (981-984)
  95. Chapman R Correctness by construction Proceedings of the 10th Australian workshop on Safety critical systems and software - Volume 55, (43-46)
  96. Amey P Why programming languages still matter Rigorous Development of Complex Fault-Tolerant Systems, (391-402)
  97. Chalin P Are practitioners writing contracts? Rigorous Development of Complex Fault-Tolerant Systems, (100-113)
  98. ACM
    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.
  99. ACM
    Sautejeau X (2005). Modeling SPARK systems with UML, ACM SIGAda Ada Letters, XXV:4, (11-16), Online publication date: 17-Nov-2005.
  100. ACM
    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)
  101. ACM
    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)
  102. 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)
  103. 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)
  104. Chalin P Logical Foundations of Program Assertions Proceedings of the Third IEEE International Conference on Software Engineering and Formal Methods, (383-393)
  105. ACM
    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)
  106. ACM
    Strunk E, Yin X and Knight J Echo Proceedings of the 10th international workshop on Formal methods for industrial critical systems, (44-53)
  107. 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)
  108. 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)
  109. 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)
  110. 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)
  111. ACM
    Paige R, Chivers H, McDermid J and Stephenson Z High-integrity extreme programming Proceedings of the 2005 ACM symposium on Applied computing, (1518-1523)
  112. ACM
    McCormick J We've been working on the railroad Proceedings of the 36th SIGCSE technical symposium on Computer science education, (530-534)
  113. ACM
    McCormick J (2005). We've been working on the railroad, ACM SIGCSE Bulletin, 37:1, (530-534), Online publication date: 23-Feb-2005.
  114. ACM
    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.
  115. ACM
    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.
  116. ACM
    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)
  117. ACM
    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)
  118. 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.
  119. 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)
  120. ACM
    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.
  121. ACM
    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)
  122. ACM
    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.
  123. Ellis B and Ireland A Automation for exception freedom proofs Proceedings of the 18th IEEE International Conference on Automated Software Engineering, (343-346)
  124. ACM
    Amey P and Dobbing B Static analysis of Ravenscar programs Proceedings of the 12th international workshop on Real-time Ada, (58-64)
  125. Amey P and Dobbing B High integrity Ravenscar Proceedings of the 8th Ada-Europe international conference on Reliable software technologies, (68-79)
  126. ACM
    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.
  127. ACM
    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)
Contributors
  • Honeywell International Inc.

Reviews

Janusz Zalewski

Initially I thought this was a book, as the title suggests, on high integrity software, but it is not. It is a book about SPARK. SPARK stands for SPADE Ada Kernel, and is a subset of Ada, enhanced with embedded annotations providing additional information about the program. SPADE is an historical term dating back to the 1970s when it started, and means "Southampton program analysis development environment." Although SPADE was originally based on Pascal, it was soon realized that this language was inconvenient for verification due to the lack of separate compilation and information hiding features. Therefore, a switch to Ada occurred. SPARK was first defined informally in 1988, and then, more formally, with a variant of Z, in 1994. Since then, it has undergone several modifications, and a British company named Praxis Critical Systems maintains the current version. As stated in the introduction, this book provides an overall description of the use of SPARK for writing reliable software. It is composed of three basic parts. In the first part (chapters 1 through 3), most of the principles of SPARK and corresponding tools are introduced and overviewed. This includes language support for abstraction, program units, abstract data types and type extension, refinement, and program composition. Although the language is based on Ada, it seems like no prior knowledge of Ada is needed, since the author tries to introduce related language concepts independently. For those fluent in Ada, there are numerous remarks comparing certain features and capabilities of both languages. The primary SPARK tool, the examiner, is also discussed in this part of the book. It works on compilation units, such as Ada compilers, and allows for three different levels of program analysis, depending on program criticality. The examiner processes the text by analyzing assertions stated as typical before and after conditions, and generates so called conjectures (theorems to be proved). Two other tools take care of the actual proofs: the simplifier, which carries out some routine simplifications using a number of predefined rules, and the proof checker, which helps users explore a problem and construct a valid proof. The second part of the book discusses the core SPARK language, including its structure, the type model, control and data flow, packages and visibility, and interfacing to other languages and packages. It is interesting to see the differences between SPARK and Ada listed after each chapter. Certain natural Ada features are not present in SPARK at all, including access types, exceptions, and use package clauses. The primary assumption is that tasking is not allowed at all, and that is because "in order to prove that the program is correct, it is necessary that dynamic flexibility be kept to a minimum." What is most interesting to me in this part of the book is the chapter on interfacing, since it describes hooks in the language allowing connections to other software. This feature is extremely useful, since SPARK has been deliberately designed as a rather simple language in order to enable programs to be proved. As a consequence, it has a limited proof capability and can be effectively applied only to relatively straightforward programs. The third part of the book presents an extensive discussion of the use of SPARK tools. The examiner tool is covered first. Examples discussed here, and the tool itself, are included in the CD attached to the book so the reader can actually learn to use SPARK on his own. The proof checker, however, which is a very sophisticated program written in Prolog (like the simplifier), is not included on the CD. The case studies are the most interesting part of this section. The author discusses programs for a lift controller, an autopilot, and a sorting algorithm, and, to some extent, presents their proofs. The discussion is rather academic, and deeper insight into the technique requires the use of actual tools. Real applications of SPARK, in industrial software development, are presented very briefly, which is a real disappointment. Maybe that was not the objective of this book, since such serious uses are still very scarce. Overall, the book is a very professional description of the SPARK language, done by one of its definitive experts. I would certainly recommend it for all those who are seriously interested in software development for safety critical systems. Online Computing Reviews Service

Access critical reviews of Computing literature here

Become a reviewer for Computing Reviews.

Please enable JavaScript to view thecomments powered by Disqus.

Recommendations