[SystemSafety] The Fosse of Babel

Olwen Morgan olwen.morgan at btinternet.com
Fri Sep 21 16:25:22 CEST 2018


" ...  let us go down, and there confound their language, that they may 
not understand one another's speech.^So the Lord scattered them abroad 
from thence upon the face of all the earth ..."

Genesis 11:7-8


(No, by quoting part of the Tower of Babel story I've not suddenly gone 
all god-bothering - I'm more of a Buddhist than anything else). But this 
serves to introduce an idea:


Ask around and I expect you'd find a reasonable consensus that 
mathematics is the hardest thing in the sciences and translation is the 
hardest thing in the humanities. (As an occasional translator, FR-EN and 
DE-EN, I can certainly vouch for this as regards translation.)


Now, by the standards of hard mathematics, the kind of mathematics that 
you need to do software engineering rigorously isn't particularly hard. 
On the other hand something that is done in every software process I've 
seen is translation. We start with requirements in natural language, we 
do design in another formalism, programming in another and testing using 
yet further formalisms. Much of the use of mathematics in software 
engineering is to provide a lingua-franca that allows us to reason about 
whether a description of something in one kind of formalism is actually 
consistent with its description in a different formalism.


This makes pertinent the question of WHY the software engineering 
process is one of successive translations between different formalisms. 
Are we not asking for trouble if we have to use the most difficult thing 
in the sciences to keep us afloat because we're doing the most difficult 
thing in the humanities?


I posit that, if we ever get a firm grip on software quality, it will be 
because we have developed what I call, "end-to-end" languages - call 
them EELs for short. An EEL is a language into which we translate 
natural language requirements such that thereafter, all tasks in the 
software lifecycle can be supported directly by the EEL.

That means that an EEL must support:

1.    Statements of requirements

2.    Description of designs

3.    Low-level processing

4.    Unit and integration testing

5.    System testing

6.    Proof of correctness conditions at all life cycle stages

7.    Identification of configuration items (COBOL's Identification 
Division was prescient here - three cheers for Auntie Grace)

... and generally any other task in the life cycle related to product 
quality.


An obvious thing to do is to start designing languages that include 
annotations for; proofs, testing, configuration control, etc. Proof 
annotation are well established in SPARK Ada and within the Frama C 
project. It would be no great task to include proof annotations in a 
language itself. Proof annotations could also support automatic test 
generation.


Yet, looking at current programming languages, it's quite clear that 
we're NOT EVEN TRYING to design EELs - when the state of knowledge in 
computer science is almost certainly capable of giving an EEL suitable 
semantics and making compilers for it. What software engineering needs 
more than anything else is not new research but better application of 
what we already know.


O



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.techfak.uni-bielefeld.de/mailman/private/systemsafety/attachments/20180921/ea179f99/attachment-0001.html>


More information about the systemsafety mailing list