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.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Notes
- 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.
Henceforth referred to as a Verification Condition (VC) generator.
- 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.
For a simple variation in which the minimal wiring needed falls within a fixed total threshold bound, consult [20].
- 5.
In design pattern parlance, this solution is a template method that invokes primary, hook methods from the interface.
- 6.
While in general there may exist many potential MSFs for a given graph, we are interested in any one.
- 7.
A string can be thought of as a sequence of values, such as \(\langle \)5, 1, 2, 3, 1\(\rangle \).
- 8.
One can safely consider ‘facility’ as a synonym for ‘factory’ in design pattern terminology.
- 9.
A multiset is an unordered collection of elements that may contain duplicates, such as
. Multiset union is \(\uplus \) and \(\lceil \ldots \rceil \) ‘tallies’ the number of times an element appears in a given multiset.
- 10.
Like Occ_Set for strings, Underln_Set maps elements of a multiset to regular set. For example:
- 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
Abrial, J.R.: Modeling in Event-B: System and Software Engineering, 1st edn. Cambridge University Press, New York (2010)
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
Cormen, T.H., Stein, C., Rivest, R.L., Leiserson, C.E.: Introduction to Algorithms, 2nd edn. McGraw-Hill Higher Education, New York (2001)
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
Frakes, W.B., Isoda, S.: Success factors of systematic reuse. IEEE Softw. 11(5), 14–19 (1994)
Harton, H.: Mechanical and modular verification condition generation for object-based software. Ph.D. thesis, Clemson University (2011)
JetBrains: IDEs. Software product line. https://www.jetbrains.com/
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
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
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)
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
Leroy, X.: Formal verification of a realistic compiler. Commun. ACM 52(7), 107–115 (2009)
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
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
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
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)
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)
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
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
Weide, B.W., Ogden, W.F., Sitaraman, M.: Recasting algorithms to encourage reuse. IEEE Softw. 11(5), 80–88 (1994)
Acknowledgments
This research is funded in part by NSF grants CCF-0811748, CCF-1161916, and DUE-1022941.
Author information
Authors and Affiliations
Corresponding author
Editor information
Editors and Affiliations
Rights 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)