Monday, November 15, 2010

Software engineering fundamental

Introduction:

To understand the necessity for web engineering, we must pause briefly to look back at the recent history of computing. This history will help us to understand the problems that started to become obvious in the late sixties and early seventies, and the solutions that have led to the creation of the field of software & web engineering. These problems were referred to by some as "The software Crisis," so named for the symptoms of the problem. The situation might also been called "The Complexity Barrier," so named for the primary cause of the problems. Some refer to the software crisis in the past tense. The crisis is far from over, but thanks to the development of many new techniques that are now included under the title of software engineering, we have made and are continuing to make progress.
Although the topic I have written on is about very tiresome, even thought the importance of web/software engineering is very essential in all parts development life cycle. It's all about making your development process more sophisticated and well documented.
Let me first of all outline you the agenda which I am going to explain in this article.
  • Nature of web/software project
  • Engineering approach
  • Software/web process
  • A process steps
  • Characteristics of a good process
  • Role of waterfull model in the development
  • Project planning
First of all we will see the different kind of software or web. How they affect in the day to day life of human being. It may be different complexity, from the different domain.
Next we will examine the different engineering approach that we can apply on our development process. Generally we understand the engineering is of field civil, mechanical, architectural etc. But engineering approaches can also be used in the development process to make it more simpler.
Then after we will take a look at the different software engineering process models available. We will then define the a practical software process steps and then we will also examine the characteristics of a good software process.
Nature of web/software project
We encounter may software or web application in the our day to day life. It may be of different domain, it may be simple, it can a large enterprise portal or can be a scientific for purpose.
Typically the nature of a software system can be:
  1. Ubiquitous, used in variety of area
    Business, engineering etc.
  2. It can be simple to complex, internal or public, one location centric or distributed, real time, information purpose, help desk etc.
Now there are many major challenges in the life of development process. Our main intension in this article is to outline the different kind of hurdles that a software developer or manager encounter in the development. They are as per below:
  1. Effort intensive
  2. High cost
  3. Continuous and log development
  4. User requirements frequently changes
  5. Risk of failure that can be performance issue, unable to accept response of user, maintainability of project etc.
Some time web projects or say any software project involves the high cost. The software analyzers sometime fail to identify software cost properly. Sometime the development get so stretch that it start becoming very costly. The management is mostly always concern with the quick and cheap solution. Due to the more and more money invested in development and the outcome is not produces or is not upto to satisfaction as it should be.
Personally I feel that in most of development of either a web based project or enterprise application, the user's continues changing requirement never ends. In any project, the end user is the one who is going to give final review. Software engineers do make requirement engineering, but the due to many factor user's requirement keep on changing. Those factory may be managerial, market competition, changing in the government laws, marketing strategy etc. Because of these the user's requirement get changed.
Sometime everything goes well but when the final outcome of software/web project get released, it does not satisfy the user. The performance may not be upto the mark. The end user is not concern with the technical issue involved in development. They only concern for the quick and accurate output.
So these are the few hurdles that any software engineer or manager face in his past experience life.
So when can we say that software is successful:
  • Software project have not always been successful.
  • When do we consider a project is successful
    • Development completed
    • It is useful
    • It is usable
    • It is used
  • Software should be cost effective & maintainable
To be build up any successful software, it need to under go many engineering process. I don't mean to say that the engineering process of big science/construction engineering. Engineering Is a set up well defined process steps. By following those well defined projects you can build up successful software.
Now lets consider what are the reason of failure for making this project successful.
  • Schedule slippage
  • Cost goes over
  • Does not fulfill user's requirement
  • Poor quality
So this are the basic criteria which lead a project toward unsuccessful.
Now let's consider that what are the reasons that lead to such failure.
  • Unplanned development
  • The milestones and deliverables are not identified
  • User requirement changing/poor understanding user's requirement.
  • No review control
  • Technically the team is not matured
  • Unsuccessful planning of cost by user & developer.
If you can't plan, you can't reach to success. I personally feel during my experience life time that the unplanned work is always been major factory in the failure of software. The unplanned development may include anything from un proper utilization of human resources, the developer are forced to keep on changing on different projects, client's continues changing in requirement etc. These all and in fact many other unplanned factors lead to software failure.
Let's think that you are a smart developer who plan for all his work before he actually going to implement. Then in that case the if the deliverables or milestones are not defined, we would not be able to judges the progress of development. Milestones/deliverables are most important in the development cycle. They tells about the progress of development. It help you to identify set up next goal in development.
Requirement engineering is one of the most crucial part in development life cycle. It is always been hard to identify and model user's requirement. If the user's requirement is not identified properly then the development can't proceed further.
Constant review or control is also important part of development. The inspection and review is heart in the quality assurance. The development need to be monitored by the supervisor so that we can actually come to know how the development is going.
The developer need to be constantly updated with the latest tools and technology. Sometime the company have the projects, but they do not have such experienced or skilled resource, due to which they postpone their effort in getting such projects. Nowadays the technology is keep on changing. So many tools and technology are emerging which can really solve your many development issues. The open source platform is one of the great example. There are thousand of scripts and tools are available over the internet that a developer can learn and implement. The developer need to be in touch with different community sites and build up their knowledge bank.
So these is what I want to tell about why we engineer the web/software. If we want to overcome those issue we really need to implement those software engineering and development process in our development.
So you will say that this is the end of my talk. No, I further want to tell you something regarding the engineering terms. After reading that much, you are really free to go by leaving your seat J.
"Engineering" a solution:
According to the definition given by the professor Sarda(IIT Bombay) a engineering is: To design, develop an artifact that meets specification efficiently, cost-effective and ensure quality.
Why the other engineering projects are successful than the software?
So to understand the reason of that, lets first go through what a large engineering project is made up of.
  • Involve different type of peoples
    Building project: civil engineers, electrical engineer, architects, workers etc.
  • Continuous supervision for the quality assurance.
    On site supervisor
  • Many deliverables: architecture plan, model, structure diagrams, electric cabling etc.
  • Standards need to be followed
  • Steps and milestone are defined, reviewed and we proceed further. So the visibility of development is important aspect.
But the software engineering approach is somewhat different than these. Software architecture and planning is not same as the other engineering projects.
I will make you introduce with rest of discussion in my next series of articles.
So have a good time and have a productive coding.

No comments: