Chapter 1. Introduction To Software and Software Engineering
Chapter 1. Introduction To Software and Software Engineering
Software has characteristics that are considerably different than those of hardware:
1. Software is developed or engineered; it is not manufactured in the classical sense.
2. Software doesn’t wear out, but it does deteriorate.
3. Although the industry is moving toward component-based construction, most software
continues to be custom built.
System Software: It helps in running computer hardware and the computer system.
System software refers to the operating systems; device drivers, servers, windowing
systems and utilities (e.g. anti-virus software, firewalls, disk defragmenters).
Utility Software: Small software that usually performs some useful tasks is known as utility
software. Example: Win Zip, JPEG Compressor, PDF Merger, PDF to Word Converter etc.
The term ‘Software’ is more than just a program code. A program is an executable code, which
serves some computational purpose. Software is considered to be collection of executable
programming code, associated libraries and documentations. Software, when made for a specific
requirement is called software product.
The other term ‘Engineering’ is all about developing some quality products by using some well-
defined, scientific principles and standard within the specified budget and time.
Hence, Software engineering is defined as: It is a branch of computer science which is associated
with development of quality software product using well-defined scientific principles, methods
and procedures.
The outcome of software engineering is an efficient and reliable software product that support
over the long term.
The prime objective of software engineering develop methods for large systems, which produce
quality software at low cost and in reasonable time.
So it is essential to perform software development in phases. This phased development of
software is often referred to as software development life cycle (SDLC) or software process and
the models used to achieve these goals are termed as Software Process Models.
i. Prototyping Model
Prototyping Model is a software development model in which prototype is built, tested,
and reworked until an acceptable prototype is achieved. It also creates base to produce the
final system or software. It works best in scenarios where the project’s requirements are
not known in detail. It is an iterative, trial and error method which takes place between
developer and client.
Phases of Prototyping Models
a. Requirements gathering and analysis: A prototyping model starts with requirement analysis. In
this phase, the requirements of the system are defined in detail. During the process, the users of
the system are interviewed to know what their expectation from the system is.
b. Quick design: The second phase is a preliminary design or a quick design. In this stage, a simple
design of the system is created. However, it is not a complete design. It gives a brief idea of the
system to the user. The quick design helps in developing the prototype.
c. Build a Prototype: In this phase, an actual prototype is designed based on the information
gathered from quick design. It is a small working model of the required system.
d. Initial user evaluation: In this stage, the proposed system is presented to the client for an initial
evaluation. It helps to find out the strength and weakness of the working model. Comment and
suggestion are collected from the customer and provided to the developer.
e. Refining prototype: If the user is not happy with the current prototype, you need to refine the
prototype according to the user’s feedback and suggestions. This phase will not over until all the
requirements specified by the user are met. Once the user is satisfied with the developed
prototype, a final system is developed based on the approved final prototype.
f. Implement Product and Maintain: Once the final system is developed based on the final
prototype, it is thoroughly tested and deployed to production. The system undergoes routine
maintenance for minimizing downtime and prevent large-scale failures.
Planning: The objectives, alternatives and constraints of the project are determined and are
documented.
Risk Analysis: All possible alternatives which can help in developing a cost effective project are
analyzed. This phase identify and resolve all the possible risks in the project management.
Engineering (Development and validation): It includes testing, coding and deploying software
at the customer site. The actual development of the project is carried out. The output of this phase
is passed through all the phases iteratively in order to obtain improvements in the same.
Evaluation: Review the results achieved so far with the customer and plan the next iteration
around the spiral. Progressively more complete version of the software gets built with each
iteration around the spiral.
• We have trouble understanding the requirements that we do acquire from the customer
• We often record requirements in a disorganized manner
• We spend far too little time verifying what we do record
• We allow change to control us, rather than establishing mechanisms to control change
• Most importantly, we fail to establish a solid foundation for the system or software that the user wants
built
• Begins during the communication activity and continues into the modeling activity
• Builds a bridge from the system requirements into software design and construction
• Allows the requirements engineer to examine
– The context of the software work to be performed
– The specific needs that design and construction must address
– The priorities that guide the order in which work is to be completed
– The information, function, and behavior that will have a profound impact on the resultant design
Requirement Engineering
– It is the process of defining, documenting, and maintaining requirements in the engineering design
process.
– It helps software engineer to better understand the problem they will work to solve.
– Requirement engineering provides the appropriate mechanism to understand what the customer desires,
analyzing the need, and assessing feasibility, negotiating a reasonable solution, specifying the solution
clearly, validating the specifications and managing the requirements as they are transformed into a
working system.
– Participant: Software Engineers, managers, customers and end users
– It is a software engineering action that begin during the communication activity and continues into the
modeling activity
– Requirement Engineering provides the appropriate mechanism for
• Understanding what the customer want
• Analyzing need
• Assessing feasibility
• Negotiating a reasonable solution
• Specifying a solution unambiguously
• Validating the specification
• Managing the requirement as they are transformed into an operational system
fe
Feasibility study
Requirements
elicitation &analysis
Requirement
specification
Requirement
validation
Feasibility report
System model
User and system
requirement
Requirement
documentation
Types of Feasibility:
a. Technical Feasibility - Technical feasibility evaluates the current technologies, which are needed
to accomplish customer requirements within the time and budget.
b. Operational Feasibility - Operational feasibility assesses the range in which the required
software performs a series of levels to solve business problems and customer requirements.
c. Economic Feasibility - Economic feasibility decides whether the necessary software can generate
financial profits for an organization.
4. Requirement validation:
The process of checking the requirements define the system that the customer really wants.
Checks the realism, consistency, completeness of requirements.
Errors in the requirements are discovered & modified to correct these problems.
It overlaps with elicitation and analysis as it is concerned with finding problems with the
requirements.
It is critically important because errors in a requirement document can lead to extensive rework
costs when these problems are discovered during development or after system is in service.
Dissatisfaction with the overheads involved in software design methods of the 1980s and 1990s
led to the creation of agile methods. (Plan-driven approaches involve a significant overhead in
planning, designing, and documenting the system.). These methods:
- Focus on the code/software itself rather than the design and documentation.
- Are based on an iterative approach to software development.
- Are intended to deliver working software quickly and evolve this quickly to meet changing
requirements.
The aim of agile methods is to reduce overheads in the software process (e.g. by limiting
documentation) and to be able to respond quickly to changing requirements without excessive
rework.
We are uncovering better ways of developing software by doing it and helping others do it. Through this
work we have come to value:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
That is, while there is value in the items on the right, we value the items on the left more.
Scrum:
It is an agile development method which concentrates specifically on how to manage tasks within
a team-based development environment.
It is a combination of both Incremental and Iterative model for managing product development.
There are three roles in it, and their responsibilities are:
- Scrum Master: The scrum can set up the master team, arrange the meeting and remove
obstacles for the process
- Product owner: The Product Owner usually represents the Client and acts as a point of
contact from the Client side. The one who prioritizes the list of Product Backlogs that Scrum
Team should finish and release.
- Scrum Team: The team manages its work and organizes the work to complete the sprint or
cycle. A cross-functional, self-organizing group of dedicated people (Group of Product
Owner, Business Analyst, Developer’s and QA’s). The recommended size of a scrum team is
7 plus or minus 2 (i.e., between 5 to 9 members in a team).
Software Prototyping:
Prototyping is the rapid development of a system. In the past, the prototype was normally thought
of as inferior in some way to the required system, so further development was required.
Now, the boundary between prototyping and normal system development is blurred and many
systems are developed using an evolutionary approach.
The principal use is to help customers and developers understand the requirements for the system.
- Requirements elicitation: Users can experiment with a prototype to see how the system
supports their work
- Requirements validation: The prototype can reveal errors and omissions in the requirements.
Prototyping can be a risk reduction activity that reduces requirements risks.
Prototyping benefits
Misunderstandings between software users and developers are exposed.
Missing services may be detected and confusing services may be identified.
A working system is available early in the process.
The prototype may serve as a basis for deriving a system specification.
The system can support user training and system testing.
Improved system usability
Closer match to the system needed
Improved design quality
Improved maintainability
Reduced overall development effort
Prototyping objectives
To demonstrate that the prototype has been developed according to the specification and that the
final specification is appropriate.
To collect information about errors or other problems in the system such as user interface
problems that need to be addressed in the intermediate prototype stage.
To give management and everyone connected with the project the first glimpse of what the
technology can provide.