The software has become critical to advancement in almost all areas of human endeavor. The art of programming is no longer enough to construct large programs. There are serious problems with the cost, timeliness, maintenance, and quality of many software products.
Software engineering aims to solve these problems by producing good quality software that is in budget and maintained on time. We must focus on the quality of the product and the process used to produce the product decently.
What is Software Engineering?
The term Software Engineering consists of two words, "Software" and "Engineering."
The term Software means the collection of programs.
Engineering is the application of science. It helps in developing products using scientific principles and methods.
Software engineering is the complete study for the design, development, and maintenance of the software.
A methodology that aims to produce quality software which is delivered on time within budget and that meets the requirements.
Why is Software Engineering required?
Software Engineering required for the following reasons:-
- For managing large software.
- To improve scalability.
- To control the software's dynamic nature.
- for better management of performance
The need for Software Engineering
The need for software engineering arises because of the higher rate of user requirement progress and the environment in which the program operates:-
- Large software - It is easier to make a wall than a house or building because the measure of programming is extensive, and engineering requires a step to give it a scientific process.
- Cost - As the hardware industry has proven its skills and large manufacturing has reduced the cost of hardware for computers. However, the cost of programming remains high if the proper process is not adapted.
- Dynamic nature - The constant and scalable nature of programming is highly dependent on the environment in which the client is working. If the quality of the software is constantly changing, new upgrades to existing ones must be made.
- Quality management - A better software development procedure provides a better quality software product.
- Adaptability - If the software process is not followed by science and engineering, it will be easier to create new software than current software.
Importance of software engineering
There are some importance of software engineering given below:
- Reduces complexity - Big software is always complex and challenging to make a progress. To reduce the complication of any project, software engineering has a great solution. Software engineering breaks big problems into different small issues. And then continue to solve one by one each minor issue. All these small issues are addressed separately.
- To minimize software cost - Software takes a lot of hard work and software engineers to develop the program with a large number of codes. In software engineering, programmers project everything and eliminate all unnecessary things. On the other hand, the cost of software production is lower compared to any software that does not use the software engineering method.
- To decrease time - If you are making software, then you need to run multiple codes to get a specific code. This is a very time-consuming process if it is not handled well. So if you are developing software according to the software engineering method, then it will take less time.
- Handling big projects - Large projects are not completed in a few days and require a lot of patience, planning, and management. The company has provided many resources with the plan and needs to be completed. Therefore, to handle a large project smoothly, the company needs to look for a software engineering method.
- Reliable software - The software must be secure. That is, if you have provided the software, it must function for a specific time. And if there are any errors in the software, the company is responsible for solving all these errors. The company will deal with the testing and maintenance process.
- Effectiveness -Effectiveness occurs when something has been achieved in accordance with the norm. Technology specifications are the main objective of organizations to make them more efficient. So, with the aid of software engineering, software becomes more successful.
Some essential characteristics of software are given below:-
1) The software does not wear out - There are three phases for the life of a hardware product.
- Initial phase – The initial phase is the burn-in phase, where failure intensity is high. The product will be tested in the industry before delivery. Due to testing and fixing faults, failure intensity will come down initially and may stabilize after a specific time.
- The second phase - The second phase is the useful life phase, where failure intensity is approximately constant and is called the helpful life of a product.
- Wear-out phase - After a few years again, failure intensity will increase due to wearing out of components. This phase is called the wear-out phase. The important point is that the software becomes reliable over time instead of wearing out. It becomes no longer in use, if the environment for which it was developed, changes. Hence, the software may be retired due to environmental changes, new requirements, new expectations, etc.
2) Software is not manufactured - The life of the computer software goes from discovery of the idea to the retirement of the software product. It is a one-time development effort and continuous maintenance effort in order to keep it operational. Making a thousand copies is not a matter of concern and does not require any expense. In the case of hardware products, every product costs us due to raw material and other processing expenses. We do not have to assemble line in software development. It is, therefore, not generated in the classical sense.
3) Reusability of components - If we have to manufacture something, we may have standard quality guidelines and effective processes to produce a good quality product. In terms of technology, each project is a new project. We start from scratch and design every unit of the software product. Huge efforts are required to develop software which further increases the cost of a software product. However, the effort has been made to design standard components that may be used in new projects. Software reusability has added another area and is known as component-based software engineering.
4) The flexibility of software - We all feel that software is flexible. The software can be configured to do almost anything. Sometimes, these characteristics may be the best and may help us to accommodate any kind of change. However, most of the time, this "almost anything" characteristic has made software development difficult to plan, monitor, and control. This unpredictability is the basis of what has been remarked for the past thirty years because of the computer code crisis.
Classification of software
The software has become an integral part in most of the fields of human life. Software applications are divided into eight areas.
1) System software - This type of software that manages and controls the internal functions of a computer system. It is a set of programs that provide service to other programs to use it effectively, for example, drivers, compilers, operating systems, etc.
2) Embedded software - This type of software is placed in the "Read-only memory (ROM)" of the product and controls the various functions of the product. The outcome could be an aircraft, automobile, security system, signaling system, the control unit of power plants, etc. Embedded software supervises hardware components. It is also known as intelligent software.
3) Business Software - This type of software is widely used in areas where managerial and control of financial activities has the highest priority. The main component of a business system is payroll, inventory, and accounting software, which allows the user to access relevant data from the database. These activities usually operated with the help of particular business software, which provides an efficient framework in business operations and management decisions.
4) Personal computer software - This software is used for official and personal use. The PC software market has grown over the past two decades, from the simple text editor to the standard word processor. This software is used mostly in almost every field, whether it is a database management system, financial accounting package, or multimedia-based software. It turned out to be a versatile tool for routine applications.
5) Real time software – This type of software observes, analyzes, and controls real-world events as they occur. In general, a real-time system ensures a response to an external event within a defined period. An example of real-time software is the weather forecasting software that collects and processes parameters such as temperature and humidity of the outdoor environment to forecast the weather. Mostly defense organizations worldwide use real-time software to control their military hardware.
6) Artificial intelligence software - This type of software is used when the problem-solving technique is not algorithmic. Solutions to such problems generally do not agree with simple calculations or analyzes. Instead, these problems require specific troubleshooting strategies, which include expert systems, pattern recognition, etc. In addition, these are different types of research techniques that include the use of heuristics. The role of artificial intelligence software is to add certain degrees of intelligence to mechanical hardware to get the job done quickly.
7) Web-based software – This type of software serves as an interface between the user and the Internet. Data on the Internet is in the form of a text, audio, or video format linked to hyperlinks. The web browser is software that retrieves web pages. The software incorporates operating instructions written in specialized scripting languages such as CGI or ASP. In addition to provide Internet browsing, this software also supports other useful features when browsing the Internet.
8) Engineering and scientific software - This kind of software has emerged as a powerful tool for research and development of the next generation of technology. This software is designed to make accurate calculations of complex numerical data obtained in a real-time environment.
Program versus Software
Software is more than a program. The software contains programs, documentation, and procedures used to set up and implement the software system. Program is a subset of software, and it can only become software if documentation and operating procedure manuals are prepared. The program is a combination of source code and object code.
- Agile Model
- Big-bang Model
- Incremental Model
- Iterative Model
- Prototype Model
- RAD Model
- Spiral Model
- Waterfall Model
- Software Metrics
- Size Oriented Metrics
- Software Quality Metrics
- Halstead's Software Metrics
- Functional Point (FP) Analysis
- Object Oriented Metrices
- Extended Function Point (EFP) Metrics
- Data Structure Metrics
- Information Flow Metrics
- Cyclomatic Complexity
- Case Tools For Software Metrics
- Overall Equipment Effectiveness
- Some Important Quality Metrics
- Software project planning
- Cost Estimation
- Cost Estimation Model (COCOMO)
- Putnam Resource Allocation Model
- Risk management
- Risk management Activities
- Software Requirement Specification
- Requirement Analysis
- Data Flow Diagram
- Data Dictionaries
- Entity-Relationship Diagram
- Software Configuration Management
- SCM Process
- Software Quality
- Project Monitoring and Control
- Software Quality
- ISO 9000 Certification
- Six Sigma
- Software Design
- Software Design Principles
- Coupling and Cohesion
- Function Oriented Design
- Object Oriented Design
- User Interface Design
- Programming Style
- Structured Programming
- Software Reliability
- Software Failure Mechanism
- Software Reliability Measurement Techniques
- Software Reliability Metrics
- Software Fault Tolerance
- Software Reliability Models
- Jelinski and Moranda Model
- Basic Execution Time Model
- GO Model
- Musa-Okumoto Logarithmic Model
- Software Maintenance
- Cause of Software Maintenance Problems
- Software Maintenance Cost Factors
- Strategies for System Design
- Caching in System Design
- Load Balancer – System Design
- Dropbox - System Design
- Netflix - System Design
- Twitter - System Design