In 1968, and long before the modern software engineering practices such as Agile methodology, the title ‘Software Engineering’ was first brought to the world by NATO to declare that the software which was starting to be larger and more complex needs a standard to prevent the unreliable and over-budget crisis of software.
Software engineering is a leading science in the IT field; its philosophy is to manage the unmanageable: managing a non-physical product’s functionality, quality, progress and resources.
Some can argue that software engineering slows down the production, as stated by Sommerville “There are still many reports of software projects going wrong and ‘software failures’. Software engineering is criticized as inadequate for modern software development.”. This can be partially – and relatively – correct for the individuals’ projects, where the project is opened between the software engineer and the client until the project is done according to the client requirements – changed or not – and where the timeframe is not as important as meeting the client requirements.
What needs to be evolved in Software Engineering?
To answer that question ‘What needs to be evolved in Software Engineering’ we have to look at what we already have at the moment. For example, the modern trends in software engineering are the collaboration between software systems, pervasive computing in everyday life, Cloud computing and Software as a Service. Therefore, these trends are going to expand to cover more of the market share.
The ‘Agility’ in the future, is Agile inevitable?
The most important part in the evolution of Software Engineering in my opinion can be concluded from the following quote by Mantle and Lichty: “Our boss needs to know you are taking care of stuff without distracting him.”, sounds Agile, isn’t it?
One of the important roles of Software Engineering is to provide a standard way of managing the entire programming process, starting from the system pre-design phases of problem identification and requirement gathering to the test and validation phases. The best way of managing projects is by the self-managed tasks which are merely supervised by managers and the need of interference is in the minimum levels. One of the indications for the future software engineering is the Agile based methodologies methodologies which are relatively new.
The reason why this relatively new methodology is becoming more popular is that it makes every single task clear to the management, easy to monitor and evaluate, and in most cases even easier to modify without affecting the rest of the software. According to Alok Mishra and Deepti Mishra “The quality of a software product is dependent on the manner in which the project is completed, and if the software is designed in a hasty manner this will, in due course, create chaos in maintenance and future extensions”. Agile methodology achieves this level that ensures better maintainability and extension-ability.
As the software applications size and complexity is expanding, the core factor that will affect the shaping of Software Engineering in the future is how Software Engineering can help to manage the software system development.
The Software Engineering has standard processes of Software specification, software development, software validation and software evolution, but how to implement these processes can be evolved by the evolution of project and task management methodologies and tools. From other perspective, the software are going to be involved in the daily people activities and shapes the life for the human being.
I would like to recommend a great book Software Engineering by Sommerville, which provides extensive details about software engineering with case-studies and seamless way of explaining best practices.