Introduction to Software Engineering
What is Software?
Many people equate the term software with computer programs. In fact, this is too restrictive a view. Software is not just the programs but also all associated documentation and configuration data that is needed to make these programs operate correctly.
A software system usually consists of a number of separate programs, configuration files that are used to set up these programs, systems, and user documentation that explains how to use the system.
Individuals who develop software are termed, software engineers. Software engineers are concerned with developing software products, i.e. software that can be sold to a customer. There are two categories of software products :
1. Generic products
These are stand-alone systems that are produced by a development organization and sold on the open market to any customer who is able to buy them.
Examples: Word processors, Databases, Drawing Packages, and Project management tools.
2. Bespoke ( or customized ) products
These are systems that are commissioned by a particular customer. The software is developed especially for that customer by a software contractor.
Example: Software written to support a business process
Types of Software
Based on its use and purpose there are different types of software that are available in the real world :
System Software – Systems software is a collection of programs written to service other programs. They directly control the hardware resources and support the operation of application software.
Examples of System software are :
- Operating Systems – Windows, UNIX, Linux
- Program Translators – Compilers, Interpreters
- Utility Software – Merging, Sorting
Application Software – Application software serves the user requirements in a particular application domain. They can be categorized as follows:
- Real-time software – Software that monitors/analyze/controls real-world events as they occur is called real-time software. Elements of real-time software include data gathering. the component that collects data, transformer, and respondent.
- Business software – these are information systems that are used in many general business applications. Examples are general TPS, MIS, etc.
- Engineering and Scientific software – these include applications ranging from astronomy to volcanology, for Example, space shuttle orbital dynamics, molecular biology … etc
- Embedded software – intelligent products include these types of software and are very commonly used nowadays. Embedded software resides in the read-only memory of the product. Example: microwave ovens, vehicle dashboard displays … etc…
- Personal computer software – this includes word processing software, spreadsheets … etc
- Web-based software – web pages retrieved by a browser are software that incorporates executable instructions. Example CGI, HTML, Perl … etc.
Artificial Intelligence software ( Al ) complex problems that are not amenable to computation or straightforward analysis. Example: pattern recognition, neural networks, etc.
Software Engineering Approach
The need for an engineering approach
The software development process is the set of activities and associated results which produce a software product. In the early days, these activities were not distinctly identified and organized. Therefore in the late 1960s, there was a huge setback in the software industry with the introduction of third-generation computers which was then called a ” Software crisis “. The main reasons for the crisis were:
- Existing software development methods were not good enough to build large software systems
- Software costs were rising and usually over-budgeted
- The software release failed to meet the deadlines
- Expected requirements were not completely fulfilled
- Software maintenance absorbed an increasing proportion of software effort
At this point, the need for a more systematic approach to software development was raised and it was called ” Software Engineering “. Software engineering has come far in its short life but it still has far to go. Despite this, a set of software-related problems has persisted throughout the evolution of computer-based systems and these problems continue to intensify. Therefore there are several reasons why software must be engineered rather than only developed as mentioned below:
Hardware advances continue to outpace our ability to build software.
Our ability to build software cannot keep pace with the demand for new programs, nor can we build programs rapidly enough to meet business and market trends.
The widespread use of computers has made society dependent on the reliable operation of the software.
Our ability to support and enhance existing programs is threatened by poor design and inadequate resources.
Definition of Software Engineering
Software engineering is an engineering discipline that is concerned with all aspects of software production from the early stages of system specification through to maintaining the system after it has gone into use. In this definition there are two key phases:
” Engineering discipline’- Engineers make things work. They apply theories, methods, and tools where these are appropriate but they use them selectively and always try to discover solutions to problems even when there are no applicable theories and methods to support them.
Engineers also recognize that they must work to organizational and financial constraints, so they look for solutions within these constraints.
All aspects of software production Software engineering is not just concerned with the technical processes of software development but also with activities such as software project management and with the development of tools, methods, and theories to support software production.
As well to the services which they provide, software products have a number of other associated attributes which reflect the quality of that software. These attributes are not directly concerned with what the software does, rather they reflect its behavior while it is executing and the structure and organization of the source program and associated documentation.
The specific set of attributes that you might expect from a software system obviously depends on its application. Therefore, a banking system must be secure an interactive game must be responsive … etc.
Essential attributes of good software
|Maintainability||Software should be written in such a way that it may evolve to meet the changing needs of customers. This is a critical attribute because software change is an inevitable consequence of a changing business environment.|
|Dependability||Software dependability has a range of characteristics, including reliability, security, and safety. Dependable software should not cause physical or economic damage in the event of system failure.|
|Efficiency||Software should not make wasteful use of system resources such as memory and processor cycles. Efficiency, therefore, includes responsiveness, processing time, memory utilization, etc.|
|Usability||Software must be usable, without undue effort, by the type of user for whom it is designed. This means that it should have an appropriate user interface and adequate documentation.|
A software process is a set of activities and associated results which lead to the production of a software product. These may involve the development of software from scratch although it is increasingly the case that new software is developed by extending and modifying existing systems.
There is no ideal process and different organizations have developed completely different approaches to software development. Processes have evolved to exploit the capabilities of the people in an organization and the specific characteristics of the systems which are being developed. Therefore, even within the same company, there may be many different processes used for software development.
Although there are many different software processes, there are fundamental activities that are common to all software processes. These are :
Software specification – The functionality of the software and the constraints on its operations must be defined
Software design and implementation – The software to meet the specification must be produced.
Software validation – The software must be validated to ensure that it does what the customer wants.
Software evolution – The software must evolve to meet changing customer needs