Saturday, January 15, 2011

Software Engineering: The First Forty Years

The phrase ‘software engineering’ was first used in a public discourse at a NATO Science Committee sponsored conference, held at Garmisch, Germany, from 7th to 11th October, 1968. More than forty years hence, there is still not much unanimity on a definition of software engineering.

According to Boehm, software engineering involves the application of science and mathematics through which the facilities of computer equipment are made useful to human beings via computer programs, procedures, and associated documentation. Pfleeger identifies software engineering with the utilization of tools, techniques, procedures, and paradigms toward quality improvement of the software product. Naur and Randall see software engineering in terms of establishing and using sound engineering principles to obtain economically effective and reliable software that can work efficiently on real machines. According to Freeman and Von Staa, software engineering involves the organized application of methods, tools, and knowledge towards fulfilling stated technical, economic, and human goals for a software-intensive system. Kacmar says simply applying engineering principles to designing and constructing computer software can be termed software engineering. To Schach, software engineering is the discipline that aims at producing fault-free software, to be delivered on time and within budget, which satisfies the user’s needs. Whitmire describes software engineering as a ‘slippery’ term, and says for some it is something that can only be applied to a large project, while to others it is just a ‘figment of collective imaginations’. He gives a working definition as, ‘Software engineering is the science and art of designing and building, with economy and elegance, software systems and applications so they can fill the uses to which they may be subjected’

Many views and much variety!

However, there seems to be little room for debate on Brooks’ characterization of software - software is inherently complex; software must be made to conform to existing interfaces; software is constantly subject to change; and software is invisible and unvisualizable.

Software engineering can be viewed as an organized response to the challenges these very characteristics of software engenders. Software engineering is concerned with the problem of change and the problem of complexity.

Between change and complexity, does one necessarily insinuate the other?

What do you think?

12 comments:

Rohit Jain said...

Brooks definition is a superset..ironically it covers nature and universe too ..these 2 are changing ,are complex, and invisible too...and in fact this means we can visualize human being as a visible software rest else is same..complex and always changing and adapting to our surroundings(interface)

Unknown said...

According to Brooks sw is invisible and unvisualisable I dont think this characterisation suits sw as sw is visible in terms of set of programs,and with out visiualisation we cant build any thing their will be a hidden visualisation definetly so,I think rather it can be "sw cannot be touched,but can we can feel,use,change".

Asha Kiran B said...

MT2010017,Asha Kiran B

'Insinuate'!
I can't think of a word that ties up complexity and change in the Software Engineering context so precisely! Hats off Sir!

Change is what often brings the most complex things into the picture. Scalability for example? An application's magnitude could change in short spans of time! Facebook is the first thing that comes to my mind!

But, change is not all that bad either? A problem that is more complex only ends up being more useful after it is solved?

M Bharath said...

Hello sir,
This might be an irrelevant question but i just want to know it.When linux has developed very well over the years why was windows not able to??? i mean it could have used linux as a tool to improve its OS

Unknown said...

Nilesh Inamdar
(MT2010050)
Change and complexity can be considered differently.Software Engineering challenge is to deal with software that are subjected to change or the software that are too complex at high level.Most of the software are subjected to change but that does not mean that it is complex.Also a software may be very complex at high level but that may undergo very less change.Software Engineering is to ensure that if there are changes in a software at any stage of development or after development then changes can be done smoothly.Also if a problem looks very complex then it must be broken down into smaller problems and dealt with separately thus reducing the complexity.

Gajendra (MT2010040) said...

Since Brooks Definition give overall idea of software engineering since most important and for anyone to think over is before the development of any system people might be knowing what is the end product but in the case of software development they don't even know what would be the end product would be and since in current days customer requirement changes day by day so visualize the system that is extensible and apply technique so that it will be fault tolerant and bug free and develop it would really great task..

Skanda Kumar (MT2010143) said...

Software engineering is concerned with the theories, methods and tools which are needed to develop the software for a computing device. Software engineers model parts of the real world in software. These models are large, abstract and complex so they must be made visible in the form of documentation, user manuals, and so on. As the real world changes, so must the software too. Therefore software engineering is also concerned with evolving these models to meet changing needs and requirements.

Gaurav Ranjan(MT2010045) said...

incredible! you have way with words. that was one deftly curated article.

ashrith kulai said...

Between change and complexity, does one necessarily insinuate the other?

Let us consider those days when the web pages were only accessible from a computer. It had its own software architecture.

Then came the days of internet on Handheld devices. We could access webpages on a small mobile screen. The whole Software architecture for Web changed. The Website had to be redesigned to make the pages mobile screen friendly.Aalso the slower connectivity speeds of these devices also had to be taken into consideration. So these were few of the changes that the mobile internet technology introduced, which inherently lead to complexity of design. We can also remember that it lead to a technology called WAP. It was essentially designed to address the complexities that the designers faced.

But change doesn't always mean it gets complex. Consider HTML5. It has inbuilt support for AJAX. This implies some complexities that existed in the previous HTML versions are removed. So using AJAX becomes easier than before.

Now lets examine how complexity introduces change:
let us consider Flipkart. Assume it goes international. Then imagine what sort of traffic the website will face? obviously to handle the huge traffic and also database explosion, the software architecture (hardware too) of the website has to be changed. Thus the new complexity of handling huge users will result in some change.

so Change introducing complexity- Depends.
Complexity introducing change- Definately yes.

-Ashrith Kulai
MT2011022

Utsav Patel said...

Change may invite the complexity, because whenever any software get updated , it provides new facilities to user which make software more user friendly but internally design of software become complex and complex with the updates.

Amudheesan said...

Compared to the olden days, today we are much more sophisticated. In today's scenario, ironically, sophistication demands for more sophistication. We demand changes in anything and everything we use. This is true with regards to software also.

As is the case with so many other things, initially when we start using a software we are amazed by the service it offers. Then gradually, we get bored of it and find faults with it. We begin to demand more features from the people who built it. In order to stay in the market, the developers come with a more sophisticated version of their product. And in most cases, it is much more complex than its earlier version.

Consider the Windows Operating System. When Microsoft came up with Windows xp more than 10 years ago, people were satisfied with it. Then slowly, as the demand for visual appeal and other features grew, Microsoft came up with Windows Vista five years ago. Vista was heavier than xp. In order to introduce sophisticated changes in the software, the complexity had to be compromised.

Change does lead to increase in complexity. This is from the view of a developer. A common man might say Windows 7 is much more user friendly than Windows xp. According to him, this change has lead to reduction in complexity (of using the software).

In my view, change comes with a tag around it: Complexity. A change in a software may lead to increase in complexity of the architecture of the system itself, but the reason behind it is to reduce the complexity in using it.

-
Amudheesan @ Aadhithan N
MT2011011

Nitish Sharma said...

Schach says that soft engg aims at producing a software in time,under budget which satisfies user needs,now i have a doubt,if a software is made by
using proper principles of soft engg.say analysis,design,coding and testing and models also taken into consideration,for example lets say projects in IIITB,now since they donot satisfies the users
need as of now,should such projects be considered under soft engg.So,soft engg focusses on time,budget and user needs,if any of this is not important for some project should
it be considered to be under soft engg discipline??

NITISH SHARMA
MT2011094