mohamedrashad
mohamedrashad

Reputation: 65

State-of-The-art & Industrial Formal/Rigorous Methods of Software Development

I'm a software engineer/architect, focusing on AI & Distributed Systems, and I come from an electronics & communications engineering background.

with my journey in software, I was always wondering why this branch of engineering lacks the formal design methods like the ones available in electronics (mathematical modelling & realization) and also in the design of optimum communication systems with many constraints, most of these systems are much more complex than the most complex software on earth (like the ICs that run the software we use and develop), and the only software related field that had formal methods was Hardware Description Languages.

I learned recently that there exists formal methods for design, specification and verification of software, like the Z notation & language, vienna development method and the b language.

but what is the state of the art in this field, and how is it possibly be used by the average engineer (for example in my team) ?

Upvotes: 0

Views: 159

Answers (2)

John Carter
John Carter

Reputation: 7005

The "state of the art" for formal specification and verification methods (FM) is sufficient to vastly improve the quality of systems being developed, however the biggest roadblock is not technological (in most cases), but rather a business decision -- this usually boils down to time & money.

The average software developer is not trained to make effective use of FM and project schedules are (generally) not such that you could inject a lot of modelling activities without affecting deadlines.

This added time/money is acceptable in higher stakes endeavours like "mission critical systems" where a cost of failure is injury, death or huge financial loss but not as palatable for teams developing systems where the cost of failure is somewhere along a "spectrum of nuisance" (restart application, restore backup, etc.)

In my view, the real outstanding challenge for FM practitioners has to do with usability of methods, and their integration into more agile (or just less 'big design up front') development processes.

Lastly, as a discipline we are very accustomed to empirical testing/verification -- the notion of rigorously proving a system to be correct is not often thought or discussed in contemporary development shops (outside the aforementioned "mission critical" teams).

Upvotes: 1

Gerd
Gerd

Reputation: 2813

I absolutely agree with you that there are very few formal methods used in software development today. The methods that you have mentioned seem not to have a large impact on the work in the software industry (as far as I can tell).

Some methods for ensuring the fulfillment of the requirements for a software product which I have seen so far:

For each of these activities, there are many tools available for supporting the development.

Typical problems:

This is in fact quite different to the methods used in other engineering disciplines, but hopefully gives you an idea of what you can take a closer look at.

Upvotes: 2

Related Questions