WHAT IS SOFTWARE ENGINEERING?



It is a systematic and cost-effective techniques for software development. These techniques help develop software using an engineering approach.

Also, we can say

Software engineering is the systematic approach to the development, maintenance, and retirement of the software.

learn software engineering


Example 1: In the IT industry, all projects which are running, they follow the software engineering approach to produce high quality and cost-effective project to their clients. 
Example 2: If there are two people, Mr. X and Mr. Y want to build a shopping complex differently. Mr. X gave the project to the petty contractor and Mr. Y gave project to civil and architecture engineer. We can easily found that the complex made by petty contractors, building might be collapse during the construction stage itself. The analysis and building idea of Mr. Y took a long time but the building made perfect.

What are the Characteristics of software Engineering?

  • Correctness – correctness of software means that it satisfies the requirement specifications. Example: if a client wants to make software from any IT industry then he/she tells all the requirements to the industry and the industry will write the requirement specification of the client. After developing the software it must check that it matches with requirement specification or not. 
  • Reliability – Reliability is the probability that software will work properly as expected over a specified time interval. Example: software which delivered to the client should work properly if there will be any error then it will be rectified.
  • Reusability – Reusability is the ease with which software can be reused in developing other software. Example: If there will be some project came which matches some functionality with other projects then code will be reused to save time.
  • Maintainability- Maintainability is an effort required to locate and fix errors while operating the software. Example: when software has delivered or implemented at client-side then while operating the software there may be the possibility of occurrence of errors so these errors can be fixed in maintenance phase.

Emergence of Software Engineering

Early Computer Programming 
As we know that in the early 1950s, computers were slow and expensive. Though the programs at that time were very small in size, these computers took considerable time to process them. They relied on assembly language which was specific to computer architecture. Thus, developing a program required a lot of effort. Every programmer used his own style to develop the programs.
High-Level Language Programming 
With the introduction of semiconductor technology, the computers became smaller, faster, cheaper, and reliable than their predecessors. One of the major developments includes the progress from assembly language to high-level languages. Early high-level programming languages such as COBOL and FORTRAN came into existence. As a result, the programming became easier and thus, increased the productivity of the programmers. However, still, the programs were limited in size and the programmers developed programs using their own style and experience. 
Control Flow Based Design 
With the advent of powerful machines and high-level languages, the usage of computers grew rapidly: In addition, the nature of programs also changed from simple to complex. The increased size and complexity could not be managed by individual style. It was analyzed that clarity of control flow (the sequence in which the program's instructions are executed) is of great importance. To help the programmer to design programs having good control flow structure, flowcharting technique was developed. In the flowcharting technique, the algorithm is represented using flowcharts. A flowchart is a graphical representation that depicts the sequence of operations to be carried out to solve a given problem. Note that having more GOTO constructs in the flowchart makes the control flow messy, which makes it difficult to understand and debug. In order to provide clarity of control flow, the use of GOTO constructs in flowcharts should be avoided and structured constructs-decision, sequence, and loop-should be used to develop structured flowcharts. The decision structures are used for conditional execution of statements (for example, if statement). The sequence structures are used for the sequentially executed statements. The loop structures are used for performing some repetitive tasks in the program. The use of structured constructs formed the basis of the structured programming methodology. Structured programming became a powerful tool that allowed programmers to write moderately complex programs easily. It forces a logical structure in the program to be written in an efficient and understandable manner. The purpose of structured programming is to make the software code easy to modify when required. Some languages such as Ada, Pascal, and dBase are designed with features that implement the logical program structure in the software code.
Data-Flow Oriented Design 
With the introduction of very Large Scale Integrated circuits (VLSI), the computers became more powerful and faster. As a result, various significant developments like networking and GUIs came into being. Clearly, the complexity of software could not be dealt with using a control flow-based design. Thus, a new technique, namely, data-flow-oriented technique came into existence. In this technique, the flow of data through business functions or processes is represented using a Data-flow diagram (DFD). IEEE defines a data-flow diagram (also known as bubble chart and work-flow diagram) as 'a diagram that depicts data sources, data sinks, data storage, and processes performed on data as nodes, and logical flow of data as links between the nodes.' 
Object-Oriented Design 
The object-oriented design technique has revolutionized the process of software development. It not only includes the best features of structured programming but also some new and powerful features such as encapsulation, abstraction, inheritance, and polymorphism. These new features have tremendously helped in the development of well-designed and high-quality software. Object-oriented techniques are widely used these days as they allow the reusability of the code. They lead to faster software development and high-quality programs. Moreover, they are easier to adapt and scale, that is, large systems can be created by assembling reusable subsystems. 

What are Software metrics

The software metric is a measure of software characteristics that are countable. Software metrics are important for many reasons, including measuring software performance, planning work items, measuring productivity, and many other uses. Software metrics can be classified into three categories: product metrics, process metrics, and project metrics.

What are Product metrics

Product metrics describe the characteristics of the product such as size, complexity, design
features, performance, and quality level.

what are Process metrics

Process metrics can be used to improve software development and maintenance. Examples
include the effectiveness of defect removal during development, the pattern of testing defect
arrival, and the response time of the fix process.

What are Project metrics

Project metrics describe the project characteristics and execution. Examples include the number
of software developers, the staffing pattern over the life cycle of the software, cost, schedule, and
productivity. Some metrics belong to multiple categories. For example, the in-process quality
metrics of a project are both process metrics and project metrics.

Software Process Model

A software process model is a simplified representation of a software process. Each
model represents a process from a specific perspective. In software engineering, there are many
models like waterfall, prototype, and spiral, etc.

Software Life Cycle Model

The life cycle of software represents the series of identifiable stages through which it
evolves during its life cycle.
Example: In this world, human, tree, and animal has its own biological life cycle similarly while
developing any software, software undergone from different stages.

Software development life cycle (SDLC) model

An SDLC graphically represents the different phases through which software develops. It
describes all the activities from the requirement analysis to maintenance in its life cycle.

Waterfall model

There are two types of waterfall model, one is the classical waterfall model and the other one is iterative waterfall model.

Classical waterfall model

classical waterfall model


Feasibility study –

The main focus of the feasibility study stage is to determine whether it would be financially and technically feasible to develop the software. In this phase, basic information relating to the software carried out such as the different data items that would be input to the system, the processing required to be carried out on these data, the output data required to produce by the system as well as various constraint on the development.
Example: if we develop software for library then in the feasibility study, we have to gather information that what book details will be entered, what student information to be entered in the system and after that what data will process and what different output should be displayed.

Requirement analysis and specification – 

In this phase, the client requirements will be properly understand and document it.
• Requirements gathering and analysis- in this, the analyst will clearly understand the requirement of the client and after that, it will gather all the relevant information related to software development. The gathered information will be analysis by analysts.
• Requirements Specification – after the requirement gathering and analysis are completed, the identified requirements are documented. This is called a software requirements specification (SRS) document. The SRS document normally serves as a contract between the development team and the client. User manual and system test plans are prepared directly based on requirement specifications.
Example: the meeting held between analyst and client to gather relevant information to develop the software.
Design – the goal of the design phase is to transform the requirements specified in the SRS document into implementation using some programming language. There are two distinctly different design approaches that are popularly being used at present – the procedural and object-oriented design approaches.
• Procedural design approach –this design technique is based on the data flow oriented design approach.
• Object-oriented approach –
Example: In the design phase, as per the requirement whether a procedural or object-oriented approach will be decided and then coding will start.

Coding and Unit testing

The purpose of the coding and unit testing phase is to translate a software design into source code and to ensure that individually each function is working correctly. The coding phase is also sometimes called the implementation phase.
Example: after the designing part is completed, the developer starts coding for each module given to them. After developing each module get tested by the developer itself that the module is working fine or not.

Integration and System testing – 

In integration, various modules are normally carried out incrementally over a number of steps. After each module integrated integration testing will be done. After all the modules integrated successfully, system testing will be performed to test the performance of the whole system.
Example: The integration team will integrate each module one by one. After successfully integration, the integration team handover the integrated system to the testing to test the whole system.

Maintenance – 

The total effort spent on maintenance of typical software during its operation phase is much more than the required for developing the software itself. Maintenance is required in the following three types of situations.
• Corrective maintenance – correct errors that were not discovered during the product development phase.
• Perfective maintenance – improve the performance of the system or enhance the functionality of the system based on the client’s request.
• Adaptive maintenance – it is required for porting the software to work in a new environment.

Note: For more notes comment below I will provide the download link of pdf created by our Teachers.