21.08.2013 Views

Software Engineering for Students A Programming Approach

Software Engineering for Students A Programming Approach

Software Engineering for Students A Programming Approach

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Formal methods<br />

32.7 Future methods and tools 399<br />

Formal (mathematical) methods are beginning to be used and may become popular, particularly<br />

<strong>for</strong> safety-critical systems. There are two related techniques – <strong>for</strong>mal specification<br />

and <strong>for</strong>mal verification. These methods offer the promise of completely reliable software<br />

– software that has been proved to meet its specification.<br />

These approaches begin by documenting the users requirements in a <strong>for</strong>mal mathematically<br />

based language such as Z.<br />

Two factors seem to have inhibited the take-up of these methods: one is the problem<br />

of communication with the user, when the specification is expressed in a specialist<br />

language such as Z. The second problem is the training of developers in the non-trivial<br />

methods used to trans<strong>for</strong>m the specification into an implementation.<br />

Declarative programming languages<br />

Logic programming languages, such as Prolog, are used in developing expert systems.<br />

Functional programming languages such as LISP and Haskell, offer the promise of<br />

directly expressing what a program should do rather than how it should do it. These<br />

languages exist and have an excellent pedigree, but there are problems with executing<br />

the programs at an acceptable speed. Their acceptance into mainstream software development<br />

there<strong>for</strong>e remains speculative.<br />

UML<br />

After years of rivalry with competing notations, the “three amigos”, Ivar Jacobson,<br />

Grady Booch and James Rumbaugh, came together with the single diagrammatic notation<br />

UML. It is now the prevalent notation <strong>for</strong> describing software, but it is only a documentation<br />

notation, not a method or a technique. The unified process, suggested by<br />

the same authors, came along soon afterwards.<br />

There can be no doubt that UML will continue to be important and, indeed, dominate<br />

the scene <strong>for</strong> some time. There are, however, problems with UML. First, it is a<br />

graphical notation and there<strong>for</strong>e there are limitations on the ease with which diagrams<br />

can be processed using a software tool. For example, it is desirable to convert<br />

diagrams into code and to check <strong>for</strong> consistency between diagrams. Second, the<br />

semantics – the real meaning – of UML has not been defined with the same thoroughness<br />

that the semantics of programming languages has been analyzed. This limits<br />

any fundamental understanding of the meaning of UML diagrams. Third, while<br />

UML is a large and comprehensive notation, there are some things it cannot describe.<br />

For example, data flow diagrams are not a part of UML, and the in<strong>for</strong>mation in a data<br />

flow diagram cannot be described in UML. Now it may be that diagrams such as<br />

dataflow are redundant, but alternatively it may be that they still have a useful role in<br />

design.<br />

Components and reuse<br />

If only complex software could be constructed by simply taking existing components<br />

off the shelf and combining them. This is the aim of component-based software

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!