Skip to main content

Engineering and Employing Reusable Software Components for Modular Verification

  • Conference paper
  • First Online:
Mastering Scale and Complexity in Software Reuse (ICSR 2017)

Part of the book series: Lecture Notes in Computer Science ((LNPSE,volume 10221))

Included in the following conference series:

Abstract

The aim of this paper is to illustrate the central role of reusable software components in developing high assurance software systems and a practical framework and environment for building such systems. The paper presents in detail elements of an actual implementation of a component-based system wherein all components are engineered for reuse and are equipped with interface contracts formalized via mathematical models so that they are amenable to automated verification. The components in the system themselves are built reusing other components, and for scalability, can be verified in a modular fashion one component at a time, using only the interface contracts of reused components. While building such components is necessarily expensive, reuse has the power to amortize the costs. Specification, research, development, verification, and reuse of components in this paper have been performed in the context of an experimental, desktop-based IDE we have built.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 39.99
Price excludes VAT (USA)
  • Available as EPUB and PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 54.99
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Notes

  1. 1.

    Though not a focus of this paper, the conceptual models presented can be extended to specify non-functional performance behaviors of alternative component implementations.

  2. 2.

    Henceforth referred to as a Verification Condition (VC) generator.

  3. 3.

    Informally, a minimum spanning tree is defined to be a subset of a graph’s weighted-edges such that all vertices are connected with minimum total weight.

  4. 4.

    For a simple variation in which the minimal wiring needed falls within a fixed total threshold bound, consult [20].

  5. 5.

    In design pattern parlance, this solution is a template method that invokes primary, hook methods from the interface.

  6. 6.

    While in general there may exist many potential MSFs for a given graph, we are interested in any one.

  7. 7.

    A string can be thought of as a sequence of values, such as \(\langle \)5, 1, 2, 3, 1\(\rangle \).

  8. 8.

    One can safely consider ‘facility’ as a synonym for ‘factory’ in design pattern terminology.

  9. 9.

    A multiset is an unordered collection of elements that may contain duplicates, such as

    figure d

    . Multiset union is \(\uplus \) and \(\lceil \ldots \rceil \) ‘tallies’ the number of times an element appears in a given multiset.

  10. 10.

    Like Occ_Set for strings, Underln_Set maps elements of a multiset to regular set. For example:

    figure e
  11. 11.

    In the future, we also aim to offer researchers the ability to view and export VC derivation details for specified blocks of code—this feature is forthcoming.

References

  1. Abrial, J.R.: Modeling in Event-B: System and Software Engineering, 1st edn. Cambridge University Press, New York (2010)

    Book  MATH  Google Scholar 

  2. Cook, C.T., Harton, H., Smith, H., Sitaraman, M.: Specification engineering and modular verification using a web-integrated verifying compiler. In: 2012 34th International Conference on Software Engineering (ICSE), pp. 1379–1382, June 2012

    Google Scholar 

  3. Cormen, T.H., Stein, C., Rivest, R.L., Leiserson, C.E.: Introduction to Algorithms, 2nd edn. McGraw-Hill Higher Education, New York (2001)

    MATH  Google Scholar 

  4. Filliâtre, J.-C., Paskevich, A.: Why3 — Where programs meet provers. In: Felleisen, M., Gardner, P. (eds.) ESOP 2013. LNCS, vol. 7792, pp. 125–128. Springer, Heidelberg (2013). doi:10.1007/978-3-642-37036-6_8

    Chapter  Google Scholar 

  5. Frakes, W.B., Isoda, S.: Success factors of systematic reuse. IEEE Softw. 11(5), 14–19 (1994)

    Article  Google Scholar 

  6. Harton, H.: Mechanical and modular verification condition generation for object-based software. Ph.D. thesis, Clemson University (2011)

    Google Scholar 

  7. JetBrains: IDEs. Software product line. https://www.jetbrains.com/

  8. Kirschenbaum, J., Adcock, B., Bronish, D., Smith, H., Harton, H., Sitaraman, M., Weide, B.W.: Verifying component-based software: deep mathematics or simple bookkeeping? In: Edwards, S.H., Kulczycki, G. (eds.) ICSR 2009. LNCS, vol. 5791, pp. 31–40. Springer, Heidelberg (2009). doi:10.1007/978-3-642-04211-9_4

    Chapter  Google Scholar 

  9. Klebanov, V., et al.: The 1st verified software competition: experience report. In: Butler, M., Schulte, W. (eds.) FM 2011. LNCS, vol. 6664, pp. 154–168. Springer, Heidelberg (2011). doi:10.1007/978-3-642-21437-0_14

    Chapter  Google Scholar 

  10. Leavens, G.: JML: expressive contracts, specification inheritance, and behavioral subtyping. In: Proceedings of the Principles and Practices of Programming on the Java Platform, PPPJ 2015, p. 1. ACM, New York (2015)

    Google Scholar 

  11. Leino, K.R.M.: Dafny: an automatic program verifier for functional correctness. In: Clarke, E.M., Voronkov, A. (eds.) LPAR 2010. LNCS (LNAI), vol. 6355, pp. 348–370. Springer, Heidelberg (2010). doi:10.1007/978-3-642-17511-4_20

    Chapter  Google Scholar 

  12. Leroy, X.: Formal verification of a realistic compiler. Commun. ACM 52(7), 107–115 (2009)

    Article  Google Scholar 

  13. Li, J., Sun, X., Xie, F., Song, X.: Component-based abstraction and refinement. In: Mei, H. (ed.) ICSR 2008. LNCS, vol. 5030, pp. 39–51. Springer, Heidelberg (2008). doi:10.1007/978-3-540-68073-4_4

    Chapter  Google Scholar 

  14. Penzenstadler, B., Koss, D.: High confidence subsystem modelling for reuse. In: Mei, H. (ed.) ICSR 2008. LNCS, vol. 5030, pp. 52–63. Springer, Heidelberg (2008). doi:10.1007/978-3-540-68073-4_5

    Chapter  Google Scholar 

  15. Priester, C., Sun, Y.S., Sitaraman, M.: Tool-assisted loop invariant development and analysis. In: 2016 IEEE 29th International Conference on Software Engineering Education and Training (CSEET), pp. 66–70, April 2016

    Google Scholar 

  16. Sitaraman, M., Adcock, B.M., Avigad, J., Bronish, D., Bucci, P., Frazier, D., Friedman, H.M., Harton, H.K., Heym, W.D., Kirschenbaum, J., Krone, J., Smith, H., Weide, B.W.: Building a push-button RESOLVE verifier: progress and challenges. Formal Aspects Comput. 23(5), 607–626 (2011)

    Article  Google Scholar 

  17. Sitaraman, M., Weide, B.W., Ogden, W.F.: On the practical need for abstraction relations to verify abstract data type representations. IEEE Trans. Softw. Eng. 23(3), 157–170 (1997)

    Article  Google Scholar 

  18. Smith, H., Harton, H., Frazier, D., Mohan, R., Sitaraman, M.: Generating verified Java components through RESOLVE. In: Edwards, S.H., Kulczycki, G. (eds.) ICSR 2009. LNCS, vol. 5791, pp. 11–20. Springer, Heidelberg (2009). doi:10.1007/978-3-642-04211-9_2

    Chapter  Google Scholar 

  19. Tankink, C., Kaliszyk, C., Urban, J., Geuvers, H.: Formal mathematics on display: a wiki for Flyspeck. In: Carette, J., Aspinall, D., Lange, C., Sojka, P., Windsteiger, W. (eds.) CICM 2013. LNCS (LNAI), vol. 7961, pp. 152–167. Springer, Heidelberg (2013). doi:10.1007/978-3-642-39320-4_10

    Chapter  Google Scholar 

  20. Weide, B.W., Ogden, W.F., Sitaraman, M.: Recasting algorithms to encourage reuse. IEEE Softw. 11(5), 80–88 (1994)

    Article  Google Scholar 

Download references

Acknowledgments

This research is funded in part by NSF grants CCF-0811748, CCF-1161916, and DUE-1022941.

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Daniel Welch .

Editor information

Editors and Affiliations

Rights and permissions

Reprints and permissions

Copyright information

© 2017 Springer International Publishing AG

About this paper

Cite this paper

Welch, D., Sitaraman, M. (2017). Engineering and Employing Reusable Software Components for Modular Verification. In: Botterweck, G., Werner, C. (eds) Mastering Scale and Complexity in Software Reuse. ICSR 2017. Lecture Notes in Computer Science(), vol 10221. Springer, Cham. https://doi.org/10.1007/978-3-319-56856-0_10

Download citation

  • DOI: https://doi.org/10.1007/978-3-319-56856-0_10

  • Published:

  • Publisher Name: Springer, Cham

  • Print ISBN: 978-3-319-56855-3

  • Online ISBN: 978-3-319-56856-0

  • eBook Packages: Computer ScienceComputer Science (R0)

Publish with us

Policies and ethics