Fundamentals of Software Engineering
As you read this article, consider the various types and classes of software. What are some of the crises and myths of software development? How did those indicate the need for software engineering?
Unit I. Fundamentals of Software Engineering
The unit starts by explaining what software is and its types. It describes the crisis and myths of software development. The unit introduces the need of software engineering and Software development process or software development life cycle will be explained. Generic process models, Waterfall and evolutionary are included.
Upon completion of this unit you should be able to:
- Describe the term software and its types
- Define Software Engineering and explain why engineering is being employed in software development
- Illustrate phases involved in software development process, i.e. Software development Life Cycle
- Describe generic process models of the software development
|Software: Software is a set of instructions with all associated documentation and configuration data used to acquire inputs and to manipulate them to produce the desired output in terms of functions and performance as determined by the user of the software.|
|Software Engineering: Software engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches|
|Software Product: Software products are software systems delivered to a customer with the documentation which describes how to install and use the system|
|SDLC: System development life cycle (SDLC) means combination of various activities. In other words we can say that various activities put together are referred as system development life cycle|
|Process: Process defines a framework for a set of key process areas that must be established for effective delivery of software engineering technology|
Activity 1 - Software
In this activity, the definition of software, types and classes of software, software crisis and software myths are presented.
What is Software
Software is not just the program but also with all associated documentation and configuration data which is needed to make these programs operate correctly. As defined by Agarwal et al, software is a set of instructions used to acquire inputs and to manipulate them to produce the desired output in terms of functions and performance as determined by the user of the software. It also includes a set of documents, such as the software manual, meant to help users understand the software system. Today’s software is comprised of Source Code, Executables, Design Documents, Operations, and System Installation and Implementation Manuals. In other words a software system consists of:
Instructions (a number of separate computer programs) that when executed provide desired functions and performance
Configuration files which are used to set up these programs and data structures that enables the programs to adequately manipulate information
System documentation which describes the structure of the system and
User documentation which explains the use the programs and the system
Why software projects are not delivering the promised products according to the specifications, on time, within budget and to the quality specified?
Software development was in crisis (disaster) because the methods (if there were any) used were not good enough:
Techniques applicable to small systems could not be scaled up
Major projects were sometimes years late, they cost much more that originally predicted
Software developed were unreliable, performed poorly and were difficult to maintain
During software development, many problems are raised and that set of problems is known as the software crisis. When software is being developed, problems are encountered associated with the development steps.
Problems encountered include:
- Schedule and cost estimates are often grossly inaccurate.
- The "productivity” of software people hasn’t kept pace with the demand for their services.
- The quality of software is sometimes less than adequate.
- With no solid indication of productivity, we can’t accurately evaluate the efficiency of new, tools, methods, or standards. Communication between the customer and software developer is often poor.
- Software maintenance tasks overwhelm the majority of all software funds.
Causes of the problems include:
- The quality of the software is not good because most developers use historical data to develop the software.
- If there is delay in any process or stage (i.e., analysis, design, coding & testing) then scheduling does not match with actual timing.
- Communication between managers and customers, software developers, support staff, etc., can break down because the special characteristics of software and the problems associated with its development are misunderstood.
- The software people responsible for tapping the potential often change when it is discussed and resist change when it is introduced.
Software Crisis from the Programmer’s Point-of-View
From Programmers’ point of view problems include: Problem of compatibility, Problem of portability, Problem in documentation, Problem of piracy of software, Problem in coordination of work of different people, Problem of proper maintenance of piracy of software, Problem in coordination of work of different people, Problem of proper maintenance.
Software Crisis from the User’s Point-of-View
From the User’s Point-of-View problems include: high costs of software, deterioration of Hardware, lack of specialization in development, problem of different versions of software, problem of views, and problem of bugs.
Many causes of a software difficulty can be traced to a mythology - Myths (tradition way) that arose during the early history of software development, some being:
- We already have a book that’s full of standards and procedures for building software, won’t that provide my people with everything they need to know?
- "A general statement of objectives” is all I need to begin writing programs; we can fill in the details later.
- If we get behind schedule, we can add more programmers and catch up.
- I have got to begin coding because we are already late!
- Project requirement continuously changes, but changes can be easily accommodated because software is flexible.
- It is impossible to assess the quality of a program until after it is written and working.
- Any competent engineer can write programs.
- Let us run a few test cases and then we’ll be finished!
- I know what the program does, I don’t have time to document it. The only deliverable work product for a successful project is the working program.
- My people do have state-of-art software development tools. After all, we buy them the newest computers
- Working on programs that were written 30 years ago. How can I use modern software engineering techniques?
The solution to problems raised during software development can be done by applying an engineering approach to software development, which includes procedures for Planning, Development, Quality control, Validation and Maintenance. The approach has to be applied consistently, across all types of software, hence the name "Software Engineering”.
Activity 2 - What is Software Engineering
This sub-unit provides the concept of applying engineering norms in software development, hence the name "Software Engineering”
As defined by Pollice and IEEE,
Software engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches.
The key criteria for SE are: a well-defined methodology, Predictable milestones, traceability among steps, documentation and control that is maintainability. SE is concerned with the theories, methods and tools which are needed to develop software. A SE is not to produce a working software system only, but also documents such as system design, user manual, etc.
Software engineering deals with both the process of software engineering and the final product. The right process will help produce the right product, but the desired product will also affect the choice of which process to use. A traditional problem in software engineering has been the emphasis on either the process or the product to the exclusion of the other.
Software-engineering principles deal with both the process of software engineering and the final product.
The right process will help produce the right product, but the desired product will also affect the choice of which process to use. A traditional problem in software engineering has been the emphasis on either the process or the product to the exclusion of the other. Both are important. To apply principles, the software engineer should be equipped with appropriate methods (general guidelines that govern the execution of some activity; they are accurate, systematic, and disciplined approaches.) and specific techniques that help incorporate the desired properties into processes and products.
Software products are software systems delivered to a customer with the documentation which describes how to install and use the system. The critical characteristics of a software product include:
Usability: must be useful and usable to improve people’s lives.
Software is flexible. A program can be developed to do almost anything. A program can be developed to do almost anything. The characteristic may help to accommodate any kind of change.
Maintainability: should be possible to evolve software to meet the changing needs of customers
Dependability: includes a range of characteristics; reliability, security and safety. Dependable software should not cause physical or economic damage in the event of system failure.
Efficiency: should not make wasteful use of system resources such as memory and processor cycles
To build good systems, we need a well defined development process with clear phases of activities, each of which has an end product, methods and techniques for conducting the phases of activities and for modeling their products and tools for generating the products. The importance of software product characteristics varies from system to system, and optimizing all the characteristics is difficult as some are exclusive.
As software becomes more pervasive, risks to the public (due to faulty programs) become an increasingly significant concern. Develop a realistic doomsday scenario (other than Y2K) where the failure of a computer program could do great harm (either economic or human).
Activity 3 – Software Applications
Areas of Software Applications
Software applications are grouped into eight areas for convenience as shown in Figure 1.1.
A collection of programs used to run the system as assistance to other software programs. Examples are compliers, editors, utilities, operating system components, drivers, and interfaces. This software resides in the computer system and consumes its resources.
Deals with a changing environment. First, it collects the input and converts it from analog to a digital, control component that responds to the external environment and performs the action. The software is used to monitor, control, and analyze real-world events as they occur. Elements of real-time software include a data gathering component that collects and formats information from an external environment, an analysis component that transforms information as required by the application, a control/output component that responds to the external environment, and a monitoring component that coordinates all other components so that real-time response (typically ranging from 1 millisecond to 1 second) can be maintained.
Software, when written to perform certain functions under control conditions and is further embedded into hardware as a part of large systems, is called embedded software. The software resides in the Read-Only-Memory (ROM) and is used to control the various functions of the resident products. The products could be a car, washing machine, microwave oven, industrial processing products, gas stations, satellites, and a host of other products, where the need is to acquire input, analyze, identify status, and decide and take action that allows the product to perform in a predetermined manner.
Software designed to process business applications is called business software. Business software can be a data- and information processing application. It can drive the business process through transaction processing in on-line or in real-time mode. This software is used for specific operations, such as accounting packages, management information systems, payroll packages, and inventory management.
Personal Computer Software
Word processing, spreadsheets, computer graphics, multimedia, entertainment, database management, personal and business financial applications, external networks, or database access are only a few of hundreds of applications.
Artificial-intelligence software uses non-numerical algorithms, which use the data and information generated in the system to solve complex problems. These problem scenarios are not generally amenable to problem-solving procedures, and require specific analysis and interpretation of the problem to solve it. Expert systems, also called knowledge-based systems, pattern recognition (image and voice), artificial neural networks, theorem proving, and game playing are representative of applications within this category.
Web-based software includes the languages by which web pages are processed, i.e., HTML, Java, CGI, Perl, DHTML, etc.
Engineering and Scientific Software
The design and engineering of scientific software deals with processing requirements in their specific fields. They are written for specific applications using the principles and formulae of each field.
Software is important because it affects nearly every aspect of our lives and has become pervasive in our commerce, our culture, and our everyday activities. With Software engineering, any type of software system, including complex systems can be build in timely manner and with high quality
Source: Ellen Ambakisye Kalinga, https://oer.avu.org/bitstream/handle/123456789/519/CSI%204105_EN%20Software%20Engineering.pdf
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 License.