This tutorial introduces you to Software Engineering and helps you understand its various fundamentals in detail with examples. Here, we will study the objective and need for Software Engineering along with its different attributes.
Before proceeding to the concept of software engineering, I assume that you are aware of the basics of computer fundamentals. Let’s first understand the meaning of the terms ‘software’ and ‘engineering’.
What is a Software?
Software is defined as the set of instructions or programs that are used by a computer for performing specific tasks. With these sets of instructions, we can create different software applications like – calculators, web browsers, operating systems, etc.
Let’s quickly check the difference between a Program and Software.
Difference between Program and Software
|A set of instructions is called a program.||A set of programs to create an application is called software.|
|A program is smaller in size.||The software is larger in size.|
|It lacks a proper interface.||It has a well-defined interface.|
|It lacks proper documentation.||It is well documented.|
|It is normally designed by a single developer.||A proper team of developers is required to design the software.|
Now that we have studied about Software and Programs, let’s understand the term ‘Engineering’.
Engineering is a scientific field that involves taking the scientific understanding of the natural world and using it to invent, design, and build things to solve problems and achieve practical goals.Study.com
We are good to go with Software Engineering now.
What is Software Engineering?
According to IEEE, Software engineering is the systematic design and development of software products and the management of the software process. Software engineering has as one of its primary objectives the production of programs that meet specifications, and are demonstrably accurate, produced on time, and within budget.IEEE
Software Engineering – A Layered Technology
Software engineering, basically, comprises a process, a set of methods, and a collection of tools for managing and developing a software system.
- Quality – Quality focus is an organization’s goal that aims at improving software engineering processes.
- Process – A framework that must be established for the effective delivery of software that includes the timely development of the software, management, and control of software projects.
- Methods – Methods provide technical aspects i.e. “how-to” for building software e.g. requirement analysis, testing support, maintainability, etc.
- Tools – Tools provide automated/semi-automated support for the implementation of ‘process’ and ‘methods’. Simply put, tools help in developing software applications e.g. Adobe Creative Cloud helps in Graphics designing or animation
What are the Software Crisis?
Software crisis is referred to as the inability to write efficient software programs within the required time-frame. These crises occur when proper software engineering concepts are not employed in the development of a software application.
Some of the examples of software crisis are given below-
- Software projects running over-time and not getting delivered within the specified time.
- Projects getting late, over budget and providing unreliable software that is expensive to maintain.
- Software applications becoming obsolete.
- Software becoming more complex when trying to scale them.
To overcome the above-mentioned software crisis, software engineering is required.
Why is Software Engineering required?
- Changes in requirement – With frequent changes in the business requirements and the environment, a properly documented and well-defined system of software development is required which makes it eminent to use Software Engineering.
- Large and complex software – With large and complex software, it becomes difficult to handle the software product but with the concept of software engineering, it is comparatively easier to build and manage them.
- Scalability – Scalability is used to describe the ability of the software to grow and manage according to the increasing demand of the market. With the software engineering concept, we can create scalable software.
- Adaptability – Software engineering also helps in creating software that is adaptable to the changing needs of software usage efficiently.
- To reduce the time – More often than not software product development exceeds the time this can be because of various reasons, some of which can be avoidable. When software engineering concepts are employed, proper development process and tools are used that makes it possible to develop the software within the time-lines.
Attributes of Software Engineering
- Maintainability – Maintainability is the ability of the software to be modified, repaired or enhanced easily with the changing needs.
- Reliability – It is an attribute of software quality that provides the assurance that a product will produce the same results when used in a similar operational environment.
- Efficiency – Efficiency attribute provides a measure of the resource requirement of a software product in an efficient way. More the efficiency of the software, lesser will be the resource requirement which will, in turn, lead to lesser cost of development and operation.
- Reusability – Software engineering methods provide the feature of reusability through which a module can be used in multiple applications.
- Flexibility – Flexibility refers to the ability of a software product to adapt to the changing requirement and environment in which it is going to be used.
- Portability – Portability refers to the ability of the software to be platform-independent so that it can be used in a different environment.
- Correctness – The ability of software to adhere to its requirement specifications.
- Testability – It is simply referred to as how software can be tested easily. It checks whether the software operates properly or not.
- Effectiveness – Effectiveness refers to doing the right things. In terms of software engineering, effectiveness refers to the process followed in software development to meet its requirements.
- Modularity – It refers to the extent to which the software may be divided into smaller modules which in turn, enhances the design, implementation, debugging, testing, documentation, and maintenance of the software product.
I hope this article helps you in understanding the core concepts of software engineering. The understanding of these concepts will help you in both the developments of quality software products as well as testing the software to make sure it follows all the quality attributes of software engineering described in this post.
Software Engineering Tutorial Series
Chapter-1. What is Software Engineering?
Chapter-2. SDLC and SDLC Models
Chapter-3. Waterfall Model
Chapter-4. V Model
Chapter-5. Spiral Model
Chapter-6. Iterative Model
Chapter-7. Prototype Model
Chapter-8. RAD Model
Chapter-9. Agile Methodology
Chapter-10. SRS – Software Requirement Specifications
Chapter-11. DFD – Data Flow Diagram
Chapter-12. Software Engineering Interview Questions
Kuldeep is the founder and lead author of ArtOfTesting. He is skilled in test automation, performance testing, big data, and CI-CD. He brings his decade of experience to his current role where he is dedicated to educating the QA professionals. You can connect with him on LinkedIn.