Why Programming Must Be Supported by Modeling and How

The development of code for software intensive systems involves numerous levels of abstraction, leading from requirements to code. Having abstract modeling concepts available as high-level programming constructs helps to define the code and to make sure t

  • PDF / 407,746 Bytes
  • 22 Pages / 439.37 x 666.142 pts Page_size
  • 74 Downloads / 229 Views

DOWNLOAD

REPORT


Abstract. The development of code for software intensive systems involves numerous levels of abstraction, leading from requirements to code. Having abstract modeling concepts available as high-level programming constructs helps to define the code and to make sure that when the system runs with the software executed by machines, the software components behave in the expected way. We explain in this paper that nevertheless, there remains a gap, which cannot be closed by mere programming methods, but which can be closed if programming is supported by an appropriate modeling framework (a design and analysis method and a language).

1

Introduction

The title of this paper is a shorthand. Since (the meaning of) every program is a model of a part of the real world, programming is a form of modeling. Therefore, a more explicit formulation of the title is: Why and how much of programming in today’s programming languages must be supported by modeling at higher levels of abstraction than that of the programming language. We use the term programming as short hand for programming reliable complex systems. So we speak about the development of code for complex software systems or for software intensive systems where it is critical that the software components do what they are supposed to do. Software intensive systems comprise systems where the software and the machines which execute it are only a part of the overall system, where for the code executing computer(s) the other parts appear as environment—technical equipment, physical surrounding, information systems, communication devices, external actors, humans—upon which the behavior of the software components depends and which they affect. It is characteristic for the development of code for software intensive systems to involve descriptions at numerous levels of abstraction, leading from requirements through high-level design to machine executable code. For such descriptions, besides natural language (which is normally used to describe the requirements) a huge variety of dedicated (often ad hoc) languages and frameworks are available, covering the wide spectrum from direct coding in a programming language to pictorial (as such possibly not executable, ‘abstract’) models, consisting essentially of visual (graphical) descriptions which are then c Springer Nature Switzerland AG 2018  T. Margaria and B. Steffen (Eds.): ISoLA 2018, LNCS 11244, pp. 89–110, 2018. https://doi.org/10.1007/978-3-030-03418-4_6

90

E. B¨ orger

transformed into more detailed textually described models and finally executable code. Well known examples of such graphical language constructs can be found, for example, in the OMG-languages UML, BPMN, SysML. In between one finds a myriad of textual, logic-based, formal specification languages, but also domainspecific languages and the interesting development of programming languages which directly offer constructs to express frequently occurring abstract modeling concepts. High-level programming constructs, like data types, collections, etc. clearly help to define the