Chapter 1 Notes
Chapter 1 Notes
CONTENTS:
1.1 Software, software Engineering as layered approach and its Characteristics, Types of
Software
1.2 Software Development Framework
1.3 Software Process Framework, Process models: Perspective Process Models,
Specialized Process Models
1.4 Agile Software Development: Agile Process and its importance, Extreme
Programming, Adaptive software Development, Scrum, Dynamic System Development
Method, Crystal
1.5 Selection criteria for software process model
________________________________________________________________________
Software:
The product that software professionals build and then support over the long term.
Software encompasses
1. Instructions (computer programs) that when executed provide desired function and
performance.
2. Data structures that enable the programs to adequately manipulate information.
3. Documents that describe the operation and use of the programs.
Characteristics of Software:
Software is a logical rather than a physical system element. 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:
● Although some similarities exist between software development and hardware
manufacture, the two activities are fundamentally different.
● In both activities, high quality is achieved through good design, but the
manufacturing phase for hardware can introduce quality problems that are
nonexistent (or easily corrected) for software.
● Both activities are dependent on people, but the relationship between people
applied and work accomplished is entirely different.
● Both activities require the construction of a "product" but the approaches are
different.
● Software costs are concentrated in engineering. This means that software projects
cannot be managed as if they were manufacturing projects.
2. Software doesn't "wear out."
● Above figure explains the failure rate as a function of time for hardware.
● The relationship, called the "bathtub curve," indicates that hardware exhibits
relatively high failure rates early in its life; defects are corrected and the failure
rate drops to a steady-state level, ideally, quite low for some period of time.
● With time the failure rate rises again as hardware components suffer from the
cumulative effects of dust, vibration, abuse, temperature extremes, and many other
environmental maladies.
● Stated simply, the hardware begins to wear out.
● Software is not susceptible to the environmental maladies that cause hardware to
wear out.
● Above figure shows the failure rate curve for software should take the form of the
“idealized curve”, Undiscovered defects will cause high failure rates early in the
life of a program. However, these are corrected and the curve flattens as shown.
● The idealized curve is a gross oversimplification of actual failure models for
software.
● This implies that the software doesn't wear out. But it does deteriorate.
3. Although the industry is moving toward component-based assembly, most
software continues to be custom built.
● Consider the manner in which the control hardware for a computer-based product
is designed and built.
● The design engineer draws a simple schematic of the digital circuitry, does some
fundamental analysis to assure that proper function will be achieved, and then goes
to the shelf where catalogs of digital components exist.
● Each integrated circuit (called an IC or a chip) has a part number, a defined and
validated function, a well-defined interface, and a standard set of integration
guidelines.
● After each component is selected, it can be ordered off the shelf.
● A software component should be designed and implemented so that it can be
reused in many different programs.
● In the 1960s, we built scientific subroutine libraries that were reusable in a broad
array of engineering and scientific applications.
● These subroutine libraries reused well-defined algorithms in an effective manner
but had a limited domain of application.
● Today, we have extended our view of reuse to encompass not only algorithms but
also data structure.
● Modern reusable components encapsulate both data and the processing applied to
the data, enabling the software engineer to create new applications from reusable
parts.
● For example, today's graphical user interfaces are built using reusable components
that enable the creation of graphics windows, pull-down menus, and a wide variety
of interaction mechanisms.
● The data structure and processing detail required to build the interface are
contained with a library of reusable components for interface construction
_____________________________________________________________________________________________
Types of Software:
1. System Software
● System software is a collection of programs written to service other programs.
● Few examples of system software are compilers, editors, and file management
utilities, process complex, but determinate, information structures.
● Other systems applications are operating system components, drivers, and
telecommunications.
2. Application software:
● stand-alone programs for specific needs. - As per User Requirement - directly used
by User
● Application software products are designed to satisfy a particular need of a
particular environment.
● E.g:- Railway reservation software
5. Embedded Software:
● Intelligent products have become commonplace in nearly every consumer and
industrial market.
● Embedded software resides in read-only memory and is used to control products
and systems for the consumer and industrial markets.
● Embedded software can perform very limited and esoteric functions, for example:
keypad control for a microwave oven.
● To provide significant function and control capability, for example: digital
functions in an automobile such as fuel control, dashboard displays, and braking
systems.
6. Product-line software:
● Designed to provide a specific capability for use by many different customers.
Product-line software can focus on a limited and esoteric marketplace (e.g.,
inventory control products) or address mass consumer markets (e.g., word
processing, spreadsheets, computer graphics, multimedia, entertainment, database
management, and personal and business financial applications).
7. Web applications:
● called “WebApps,” this network-centric software category spans a wide array of
applications.
● The Web pages retrieved by a browser are software that incorporates executable
instructions and data.
8. Real-time Software
● Software that monitors or analyzes or controls real-world events as they occur is
called real time.
● 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 can be maintained.
9. Artificial intelligence software
● makes use of nonnumerical algorithms to solve complex problems that are not
amenable to computation or straightforward analysis.
● Applications within this area include robotics, expert systems, pattern recognition
(image and voice), artificial neural networks, theorem proving, and game playing.
________________________________________________________________________
Software Engineering
● Software Engineering is the establishment and use of sound engineering principles
in order to obtain economically software that is reliable and works efficiently on
real machines.
● Software Engineering is the study and application of engineering to the design,
development, and maintenance of software.
● Software engineering deals with process, methods, their implementation tools and
finally the quality of the product. This is known as the layered approach of
software engineering
1. A “quality” focus:
● Any engineering approach must rest on an organizational commitment to quality.
● Total quality management and similar philosophies foster a continuous process
improvement culture, and this culture ultimately leads to the development of
increasingly more mature approaches to software engineering.
● The bedrock that supports software engineering is a quality focus.
2. Process Layer:
● The foundation for software engineering is the process layer.
● Software engineering process is the glue that holds the technology layers together
and enables rational and timely development of computer software.
● Process defines a framework for a set of key process areas that must be established
for effective delivery of software engineering technology.
● The software process forms the basis for management control of software projects
and establishes the context in which technical methods are applied, work products
(models, documents, data, reports, forms, etc.) are produced, milestones are
established, quality is ensured, and change is properly managed.
3. Method Layer:
● Software engineering methods provide the technical how-to's for building
software.
● Methods encompass a broad array of tasks that include requirements analysis,
design, program construction, testing, and support.
● Software engineering methods rely on a set of basic principles that govern each
area of the technology and include modeling activities and other descriptive
techniques.
4. Tools Layer:
● Software engineering tools provide automated or semi-automated for the process
and the methods.
● When tools are integrated so that information created by one tool can be used by
another, a system for the support of software development, called computer-aided
software engineering, is established.
● CASE combines software, hardware, and a software engineering database.
________________________________________________________________________
Umbrella Activities:
umbrella activities are applied throughout a software project and help a software team
manage and control progress, quality, change, and risk.
Typical umbrella activities include:
1. Software project tracking and control:
● allows the software team to assess progress against the project plan and take any
necessary action to maintain the schedule.
2. Risk management:
● assesses risks that may affect the outcome of the project or the quality of the
product.
3. Software quality assurance:
● defines and conducts the activities required to ensure software quality.
4. Technical reviews:
● assesses software engineering work products in an effort to uncover and remove
errors before they are propagated to the next activity.
5. Measurement:
● defines and collects process, project, and product measures that assist the team in
delivering software that meets stakeholders’ needs; can be used in conjunction
with all other framework and umbrella activities.
6. Software configuration management:
● manages the effects of change throughout the software process.
7. Reusability management:
● defines criteria for work product reuse (including software components) and
establishes mechanisms to achieve reusable components.
8. Work product preparation and production:
● encompasses the activities required to create work products such as models,
documents, logs, forms, and lists.
Waterfall Model:
● The Waterfall Model was the first Process Model to be introduced.
● It is also referred to as a linear-sequential life cycle model.
● It is very simple to understand and use. In a waterfall model, each phase must be
completed before the next phase can begin and there is no overlapping in the
phases.
Incremental Model:
● Incremental Model is a process of software development where requirements are
divided into multiple standalone modules of the software development cycle.
● In this model, each module goes through the requirements, design, implementation
and testing phases.
● Every subsequent release of the module adds function to the previous release. The
process continues until the complete system is achieved
Or
The various phases of incremental model are as follows:
1. Requirement analysis: In the first phase of the incremental model, the product
analysis expertise identifies the requirements. And the system functional requirements are
understood by the requirement analysis team. To develop the software under the
incremental model, this phase performs a crucial role.
2. Design & Development: In this phase of the Incremental model of SDLC, the design
of the system functionality and the development method are finished with success. When
software develops new practicality, the incremental model uses style and development
phase.
3. Testing: In the incremental model, the testing phase checks the performance of each
existing function as well as additional functionality. In the testing phase, the various
methods are used to test the behavior of each task.
4. Implementation: Implementation phase enables the coding phase of the development
system. It involves the final coding that design in the designing and development phase
and tests the functionality in the testing phase. After completion of this phase, the number
of the product working is enhanced and upgraded up to the final system product.
Prototyping Model:
Spiral Model:
● Using the spiral model, the software is developed in a series of incremental
releases. During the early iterations, the additional release may be a paper model
or prototype.
● During later iterations, more and more complete versions of the engineered system
are produced.
● A spiral model is divided into a number of framework activities, also called task
regions. Typically, there are between three and six task regions.
Figure shows a spiral model that contains six task regions:
1. Customer communication:tasks required to establish effective communication
between developer and customer.
2. Planning:tasks required to define resources, timelines, and other project related
information.
3. Risk analysis: tasks required to assess both technical and management risks.
4. Engineering: tasks required to build one or more representations of the application.
5. Construction and release: tasks required to construct, test, install, and provide user
support (e.g., documentation and training).
________________________________________________________________________
Specialized Process Model:
● These models tend to be applied when a specialized or narrowly defined software
engineering approach is chosen.
1. Component-Based Development
2. The Formal Methods Model
3. Aspect-Oriented Software Development
1. Component-Based Development:
● Component Based Development Commercial off-the-shelf (COTS) software
components, developed by vendors who offer them as products, provide targeted
functionality with well-defined interfaces that enable the component to be
integrated into the software that is to be built.
● The component-based development model incorporates many of the characteristics
of the spiral model.
● It is evolutionary in nature, demanding an iterative approach to the creation of
software. However, the component-based development model constructs
applications from prepackaged software components. Modeling and construction
activities begin with the identification of candidate components.
● Regardless of the technology that is used to create the components, the
component-based development model incorporates the following steps
(implemented using an evolutionary approach):
1. Available component-based products are researched and evaluated for the
application domain in question.
2. Component integration issues are considered.
3. A software architecture is designed to accommodate the components.
4. Components are integrated into the architecture.
5. Comprehensive testing is conducted to ensure proper functionality.
● The component-based development model leads to software reuse, and reusability
provides software engineers with a number of measurable benefits.
Agility Principles:
1. Our highest priority is to satisfy the customer through early and continuous delivery of
valuable software.
2. Welcome changing requirements, even late in development. Agile processes harness
change for the customer’s competitive advantage.
3. Deliver working software frequently, from a couple of weeks to a couple of months,
with a preference to the shorter timescale.
4. Business people and developers must work together daily throughout the project.
5. Build projects around motivated individuals. Give them the environment and support
they need, and trust them to get the job done.
6. The most efficient and effective method of conveying information to and within a
development team is face-to-face conversation.
7. Working software is the primary measure of progress.
8. Agile processes promote sustainable development. The sponsors, developers, and users
should be able to maintain a constant pace indefinitely
9. Continuous attention to technical excellence and good design enhances agility.
10. Simplicity—the art of maximizing the amount of work not done—is essential.
11. The best architectures, requirements, and designs emerge from self– organizing
teams.
12. At regular intervals, the team reflects on how to become more effective, then tunes
and adjusts its behavior accordingly.
Extreme Programming:
Extreme Programming (XP) takes an ‘extreme’ approach to iterative development.
1. New versions may be built several times per day;
2. Increments are delivered to customers every 2 weeks;
3. All tests must be run for every build and the build is only accepted if tests run
successfully.
4. The extreme programming release cycle
The XP Process
Extreme Programming uses an object-oriented approach as its preferred
development paradigm and encompasses a set of rules and practices that occur
within the context of four framework activities: planning, design, coding, and
testing. Figure below
XP - Planning:
1. Begins with the creation of a set of stories (also called user stories)
2. Each story is written by the customer and is placed on an index card
3. The customer assigns a value (i.e. a priority) to the story
4. Agile team assesses each story and assigns a cost
5. Stories are grouped to for a deliverable increment
6. A commitment is made on delivery date
7. After the first increment “project velocity” is used to help define
subsequent delivery dates for other increments
XP - Design:
1. Follows the KIS (keep it simple) principle
2. Encourage the use of CRC (class-responsibility-collaborator) cards
(Chapter 8)
3. For difficult design problems, suggests the creation of “spike solutions”—a
design prototype
4. Encourages “refactoring”—an iterative refinement of the internal program
design
5. Design occurs both before and after coding commences
XP - Coding:
1. Recommends the construction of a series of unit tests for each of the stories
before coding commences
2. Encourages “pair programming”
3. –Mechanism for real-time problem solving and real-time quality assurance
4. –Keeps the developers focused on the problem at hand
5. Needs continuous integration with other portions (stories) of the s/w, which
provides a “smoke testing” environment
XP - Testing:
1. Unit tests should be implemented using a framework to make testing
automated. This encourages a regression testing strategy.
2. Integration and validation testing can occur on a daily basis
3. Acceptance tests, also called customer tests, are specified by the customer
and executed to assess customer visible functionality
4. Acceptance tests are derived from user stories.
Speculation:
● The project is initiated and adaptive cycle planning is conducted.
● Adaptive cycle planning uses project initiation information—the customer’s
mission statement, project constraints (e.g., delivery dates or user descriptions),
and basic requirements—to define the set of release cycles (software increments)
that will be required for the project.
● Based on information obtained at the completion of the first cycle, the plan is
reviewed and adjusted so that planned work better fits the reality in which an ASD
team is working.
Collaboration:
● Motivated people use collaboration in a way that multiplies their talent and
creative output beyond their absolute numbers.
● This approach is a recurring theme in all agile methods.
● But collaboration is not easy. It encompasses communication and teamwork, but it
also emphasizes individualism, because individual creativity plays an important
role in collaborative thinking.
● It is, above all, a matter of trust. People working together must trust one another to
(1) Criticize without hate,
(2) Assist without anger,
(3) work as hard as or harder than they do,
(4) Have the skill set to contribute to the work at hand, and
(5) Communicate problems or concerns in a way that leads to effective action
Learning:
● The emphasis is on learning as much as it is on progress toward a completed cycle.
Learning will help them to improve their level of real understanding.
● ASD teams learn in three ways:
1. Focus groups: - Feedback from end user is obtained about the software
component being developed. Thus direct feedback about the developed
component can be obtained.
2. Technical reviews: - This review for software components is conducted for
better quality.
3. Project postmortems: - The team analyses its own performance and makes
appropriate improvements.
Scrum:
● SCRUM is an agile process model which is used for developing the complex
software system.
● It is a lightweight process framework that can be used to manage and control the
software development using an iterative and incremental approach. Here the term
lightweight means the overhead of the process is kept as small as possible in order
to maximize productive time.
● The overall flow of the Scrum process is illustrated in Figure
● Scrum emphasizes the use of a set of software process patterns that have proven
effective for projects with tight timelines, changing requirements, and business
criticality.
● Each of these process patterns defines a set of development actions:
Backlog- a prioritized list of project requirements or features that provide business
value for the customer. Items can be added to the backlog at any time (this is how
changes are introduced). The product manager assesses the backlog and updates
priorities as required.
Sprints-consist of work units that are required to achieve a requirement defined in
the backlog that must be fit into a predefined time-box (typically 30 days).
Changes (e.g., backlog work items) are not introduced during the sprint. Hence,
the sprint allows team members to work in a short-term, but stable environment.
Scrum meetings- are short (typically 15 minutes) meetings held daily by the
Scrum team.
Three key questions are asked and answered by all team members:
• What did you do since the last team meeting?
• What obstacles are you encountering?
• What do you plan to accomplish by the next team meeting?
A team leader, called a Scrum master, leads the meeting and assesses the
responses from each person. The Scrum meeting helps the team to uncover
potential problems as early as possible. Also, these daily meetings lead to
“knowledge socialization” and thereby promote a self-organizing team structure
that delivers the software increment to the customer so that functionality that has
been implemented.
Demos- deliver the software increment to the customer so that functionality that
has been implemented can be demonstrated and evaluated by the customer. It is
important to note that the demo may not contain all planned functionality, but
rather those functions that can be delivered within the time-box that was
established.
Advantages:
1. Scrum model brings transparency in project development status.
2. It provides flexibility towards the changes.
3. There is improved communication, minimum overhead in development process.
4. The productivity can be improved.
Disadvantage:
1. Some decisions are hard to track in a fixed time span.
2. There are problems to deal with non-functional requirements of the system.