Software: Directly using it and driving force to deliver the product.
Engineering: It is the process to build things.
By observing both the definitions one can come to conclusion that it is the systematic application of engineering approach to the development of software. And engineering is the process to build things. Technical definition: It is the logical thing and we cannot see the code of it.
To do a project?
One should identify domain, problem statement; clarifying objective of project to make plan; collecting requirements; Making a block diagram( rough structure); implementing- code and debugging; Testing product after completion. Doing all these things in the systematic manner is nothing but Software Engineering.
Generally Software Engineering has four phases:
1. Software Engineering
The things which comes under this category are:
The nature of the software to be used, The Software process to be followed, Engineering practice which is to be implemented, Defining the frame work activity, Identifying the task set, Extracting the patterns of the process, Assessing the process and improving them to satisfy our need. There are main Process Models, some of them are Prescriptive process models, Specialized process models, The Unified process, Personal and Team Process models.
Agility: Highly dynamic software should also be handled properly.
There are some Agile Models also which can be implemented based on the requirements like Agility and cost of change, Agile process, Extreme programming, CMMI, Agile Manifesto, Pass on the secret session, Waterfall model session.
To do this perfectly, one should
a. Have knowledge of building software projects using different process models.
b. Know how to implement agile software process model.
2. Requirement Engineering:
All the ground work should be done in this phase. Like gathering requirements they can be speaking with the client about his use cases and then identifying the required software to achieve clients demand. In order to achieve them one should develop Use cases for the problem, Building the analysis model here the main aim is to analyse the problem statement, figuring out the goods and flaws in the statement and again contacting the client to improve them. After analysing the problem one should negotiate and validate requirements. After gathering all the needs to fulfil the clients demands then we come to the main and very important phase that is Software Project Estimation. This the main important phase as this defines weather client stays with you or leave you. One should always reduce the cost of the project, because there are lot more other factors contributing the process like using resources of the factory, breakages during the process etc.
Software project estimation comprises of various things like project planning, gathering resources, checking decomposition techniques, empirical estimation models, estimation for OOP projects. After successful estimation of the Software project, one should identify Requirement Modeling. This is nothing but using the gathered resources to the utmost level for satisfying the clients requirements. Scenario based methods, class based methods, creating a behavioural model, identifying the events with use cases, state representations, these are some methods used to satisfy requirements. Irrespective of them there are other concepts like Cause effect session, project inception, collaboration with the customer, speed boat session are also some of the important phases in Requirement Engineering.
To implement this perfectly, one should :
a. Know how to dramatize activities involved in the analysis of requirements.
b. Correctly estimate LOC( lines of code) and FP( function points) based efforts in persons and months.
c. Know how to design use case, data, class and behavioural models of the software.
3. Design Engineering:
Designing is the utmost important step in Software Engineering. This is the step where we design the already existing software or a developed software to our needs. Here Design with context of software engineering is very important task. One should keep in the mind of design process, design concepts and design model. Generally, design i.e, having a rough sketch of the work should be done more precisely than doing the work itself. Because, if there is a problem in the base of the project then the entire project will be a problem and that is very difficult to rectify as the time taken to complete the project and the budget increases rapidly.
Architecture Design plays the key role in Design Engineering. It comprises of software architecture, architectural genres, architectural styles, architectural considerations, architectural decisions and lot more. Other than them it also have representing system in the context, defining the archetypes, refining the architecture into components and also describing the instantiations of the system. Component Design which is the integral part of architecture design is like the heart of the entire software development model. One should take lot of care in designing the components. This design can be done in many ways. Some of them are traditional, object oriented, process related view of the components, designing class based components, conducting component level design and component based development. After designing the components next task is to design the user interface. It should be very minimalistic and also understandable by almost everyone on how to operate it. User interface is the one which is seen by everyone. So, it should be clean without any errors.
To design User Interface, one should keep the following this in mind. They are the golden rules, analysing the user interface, design how to analyse the interface, design steps and the last and not least one is design evaluation.
For perfect implementation of this, one should:
a. Correctly illustrating architectural and component model.
b. Know how to create effective user interfaces.
This is the place where the code is tested and debugged. This state should be handled very carefully as some small mistakes leads to huge errors. It can be problem to client or sometimes it can be the biggest problem to the company. Normally this state is performed by the highly intellectual people in the country. Though this is the least time spent state compared to all three but it is also the most important state.
So, to test a software there are many pre defined methods and one should choose any one of them based on their requirements. Testing comprises of testing the strategies, discussing the approach of the strategy, issues related to strategies, testing strategies for conventional and object oriented software, checking the validation of testing, testing the system and also checking the debugging state.
As mentioned above Conventional Testing can be done by testing the white box, basis path testing, testing the control structure, model based testing and testing the real time systems. Object Oriented (OO) Testing can be done by testing OOA and OOD models, OO testing strategies, understanding OO testing methods, testing methods applicable at class level, identifying interclass test case design.
To implement testing of software correctly, one should:
a. Know how to test code based on functional and non-functional aspects of the software.
b. Able to prepare test plans and strategies for conventional and Object Oriented software.
To do all these above mentioned four things perfectly, The following things should be handled perfectly:
a. Select an appropriate process model for software product requests.
b. Implement agile software process models for given scenario.
c. Identify the stakeholders requirements and employ the models for analysing there requirement.
d. Estimate software cost and efforts in person and months.
e. Construct use cases, activity, collaboration and state transition diagrams that maps software requirements.
f. Design architecture for developing a project based on user requirements.
g. Create test plans and employ testing strategies for verifying functional and non functional requirements of the project.
On following above mentioned properties correctly one can successfully design a software and can implement them effectively. So, One should go through all these things before entering into Software Engineering (tip for newbies).