In our current context software has become a vital cog in our daily routine and life and as a result of which it is of interest to a number of people. As the Information Technology interest evinces and pilfers to governments, businesses more people are now involved in building software programs that was once done by individuals. It is because of this growth that a good understanding needs to be in place before a software solution is to be developed. The reliance on software for any strategic or tactical decision making means that the software shall exhibit high quality. With this in mind let us proceed with the following details:
What is Software Engineering?
According to the comprehensive definition provided by IEEE Software Engineering it is: (1) The application of systematic, disciplined, quantifiable approach to the development, operation and maintenance of software: i.e. the application of engineering to software & (2) the study of approaches in (1)
In being ‘systematic’, ‘disciplined’ and ‘quantifiable’ the teams working shall alsobe look at being adaptable and agile. The primary focus of software engineering shall emphasise on quality aspect as well.
Software engineering is built on the foundation of process layering and it is because of this that various technologies are built and developed. The software engineering layer consists of
· Tools: Provides an automated or semi-automated support of process & methods
· Methods: This aspects encompasses a wide set of tasks like requirements analysis, communication, program construction, design modelling, testing and support
· Process: Forms the base for management control of work products like models, data, reports, forms etc., milestones and provision to manage change properly
· Quality focus: This refers to the organisation commitment to quality by focusing on methodologies like Total Quality Management, Six-Sigma and similar methodologies
With the above idea of having understood what software engineering is and the different layers involved let us deep dive more on the core activities in software engineering as a part of:
Software Engineering Process Framework
1. Communication: Before the start of any project it is very important to communicate to the stakeholders the intent of this activity for them to better collaborate. Through this communication the objectives are better put forward to the stakeholders for them to better provide requirements at the time of requirements gathering and define the software functionalities and features.
2. Planning: This is a map that simplifies the journey at the time of software development by providing details of the technical tasks that are to be conducted, work products that will be produced, the resources to be involved and the work schedule
3. Modelling: This is a sketch of one’s understanding of the bigger structure in terms of how this picture will look architecturally, the various constituents that are in it and the various other characteristics involved.
4. Construction: This activity takes into account the generation of codes and the related testing to uncover errors.
5. Deployment: This is that stage where the developed software is handed over as a product to the customer for a feedback and evaluation.
Through this generic framework simple programs, web applications can be developed either in a small or large scale.
Another aspect to be aware in software engineering is the set of principles known as
Principles of Software Engineering Practice
First Principle: Know why it exists
Software engineering exists to serve one main purpose i.e. to provide the users with a value. For this while gathering a requirement or specifying a functionality look at determining hardware platforms or the development process and then ask questions: “ Are we really adding any value to this system and if you get an answer then do not try it all. The subsequent principles that follow subsequently support this.
Second Principle: Keep it simple, sir!
One needs to keep this in mind that software building is not a very complex process. It is just that one needs to take into account a lot of factors at the time of designing. Remember design shall be simple but not simple! Simple here means the putting in a lot of thought and work iteratively to simplify software that would ultimately be more maintainable with lesser errors.
Third Principle: Maintain your vision
Vision as usual is very important in software projects as well. Through the vision the conceptual integrity is embedded leading to a better architectural vision of a software system.
Fourth Principle: Other consume your produce
Software systems are constructed not to exit in vacuum. The software systems you built will be used by someone in some way like: documentation, operation and support etc. So it is important to specify, design and implement knowing others are also going to be a part and making them understand will also be essential.
Fifth Principle: Embrace change for future
With the current scenario of dynamic changes happening in the market it becomes evident that any system or software shall need an endurance to stretch as far as it can. At the same time the software that is being developed shall embrace a change when a situation arises so that system reuse is possible on a later date.
Sixth Principle: Plan for re-use
Though the hardest goal to accomplish, reuse saves a lot and effort. So reuse increases the overall value into those components of the system into which it is to be incorporated.
Seventh Principle: Think!
The most overlooked aspect is thinking. Thinking about something invariably leads one to the right path and a side effect of thinking is learning to recognise when you don’t know something at which stage you could research to explore answers. All the above six principles prior to this requires intense thought and the rewards that follow are enoromous.