0% found this document useful (0 votes)
187 views115 pages

Se Unit2

An agile process is needed to manage unpredictability in software development. It must be adaptable through incremental delivery of software in short periods, allowing for feedback and adaptations. Extreme Programming (XP) is a widely used agile approach defined by values of communication, simplicity, feedback, courage, and respect. It uses an object-oriented paradigm and defines planning, design, coding, and testing activities in each iteration.

Uploaded by

kishore
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
187 views115 pages

Se Unit2

An agile process is needed to manage unpredictability in software development. It must be adaptable through incremental delivery of software in short periods, allowing for feedback and adaptations. Extreme Programming (XP) is a widely used agile approach defined by values of communication, simplicity, feedback, courage, and respect. It uses an object-oriented paradigm and defines planning, design, coding, and testing activities in each iteration.

Uploaded by

kishore
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 115

UNIT-II

Agile Development: What is Agility, Agility and the cost of change, What
is an Agile Process, Agile Process Extreme programming, SCRUM,
Dynamic Systems Development Method, Agile Unified Process.

Requirements Engineering: Establishing the ground work, Eliciting


requirements, Developing use cases, Building the Analysis model,
Negotiating Requirements, Requirement Monitoring, Validating
Requirements.

Design concepts: The Design Process, Design Concepts, The Design


Model.
Agile Software Development

•In the modern economy, it is often difficult or impossible to predict


how a software system will evolve as time passes.

•Market conditions change rapidly, end-user needs evolve, and new


competitive threats emerge without warning.

•In many situations, you won’t be able to define requirements fully


before the project begins.
•You must be agile enough to respond to a changing business
environment And change is expensive.Particularly if it is
uncontrolled or poorly managed.

•One of the most compelling characteristics of the agile approach is its


ability to reduce the costs of change throughout the software process.
What is Agility?

• Effective response to change.

• Effective communication among all stakeholders

• Drawing the customer onto the team;eliminate the “us and


them” attitude.
• Organizing a team so that it is in control of the work performed.

• Rapid, incremental delivery of software holders


What is “Agility”?
•In Jacobson’s view, the pervasiveness of change is the primary driver for
agility.

•Software engineers must be quick on their feet if they are to


accommodate the rapid changes that Jacobson describes.

•An agile process reduces the cost of change because software is released in
increments and change can be better controlled within an increment

•“Agility is dynamic, content specific, aggressively change embracing, and


growth oriented.”
Agility and the Cost of Change
•A well-designed agile process “flattens” the cost of change curve

•Allowing a software team to accommodate changes late in a


software project without dramatic cost and time impact.

•You’ve already learned that the agile process


encompasses incremental delivery.

•When incremental delivery is coupled with other agile practices


such as continuous unit testing and pair programming the cost
of making a change is attenuated.
Agility and the Cost of Change
An Agile Process
• It is difficult to predict in advance which software
requirements will persist and which will change. It is equally
difficult to predict how customer priorities will change as
the project proceeds.

• For many types of software, design and construction are


interleaved. That is, both activities should be performed in
tandem so that design models are proven as they are
created. It is difficult to predict how much design is
necessary before construction is used to prove the design.

• Analysis, design, construction, and testing are not as


predictable (from a planning point of view) as we might like
• How do we create a process that can manage
unpredictability?

An agile process, therefore, must be adaptable.


An agile software process must adapt incrementally

• Software increments (executable prototypes or portions of an


operational system) must be delivered in short time periods so
that adaptation keeps pace with change (unpredictability).

• This iterative approach enables the customer to evaluate the


software increment regularly, provide necessary feedback to
the software team, and influence the process adaptations that
are made to accommodate the feedback
1.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.

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.
2.The Politics of Agile Development

• Traditional methodologists are a bunch of stick-in-the-muds who’d


rather produce flawless documentation than a working system that
meets business needs.”

• Even within the agile school itself, there are many proposed process
models each with a subtly different approach to the agility problem.

• Within each model there is a set of “ideas” (agilists are loath to call
them “work tasks”) that represent a significant departure from
traditional software engineering.
• And yet, many agile concepts are simply adaptations of good software
engineering concepts.

• Bottom line: there is much that can be gained by considering the best
of both schools and virtually nothing to be gained by denigrating either
approach.
3.Human Factors
• Competence - encompasses innate talent, specific software-related
skills, and overall knowledge of the process that the team has chosen
to apply. Skill and knowledge of process can and should be taught to all
people who serve as agile team members.

• Common focus. Although members of the agile team may perform


different tasks and bring different skills to the project, all should be
focused on one goal—to deliver a working software increment to the
customer within the time promised.

• Collaboration. Software engineering (regardless of process) is about


assessing, analyzing, and using information that is communicated to
the software team; To accomplish these tasks, team members must
collaborate—with one another and all other stakeholders.
• Decision-making ability. Any good software team (including agile
teams) must be allowed the freedom to control its own destiny. This
implies that the team is given autonomy—decision-making authority
for both technical and project issues.

• Fuzzy problem-solving ability. Software managers must recognize


that the agile team will continually have to deal with ambiguity and
will continually be buffeted by change. In some cases, the team must
accept the fact that the problem they are solving today may not be the
problem that needs to be solved tomorrow. However, lessons learned
from any problem-solving
• Mutual trust and respect. The agile team must become what
DeMarco and Lister [DeM98] call a “jelled” team . A jelled team exhibits
the trust and respect that are necessary to make them “so strongly knit
that the whole is greater than the sum of the parts.”

• Self-organization. In the context of agile development, self-


organization implies three things:

(1) the agile team organizes itself for the work to be done,
(2) the team organizes the process to best accommodate its local environment,
(3) the team organizes the work schedule to best achieve delivery of the software
increment
Extreme Programming (XP)
The most widely used approach to agile software development is
Extreme Programming, the seminal work on the subject has been written
by Kent Beck.

• XP values

• The XP Process

• Industrial XP

• The XP Debate
XP values

Beck defines a set of five values that establish a foundation for all work
performed as part of XP, Each of these values is used as a driver for
specific XP activities, actions, and tasks.

1. communication,
2. Simplicity-Refactoring allows a software engineer to improve the
internal structure of a design (or source code) without changing its
external functionality or behavior. In essence, refactoring can be used to
improve the efficiency, readability, or performance of a design or the
code that implements a design
3. feedback,
4. courage, and
5. respect.
The XP Process
• XP uses an object-oriented approach as its preferred development
paradigm,defines four (4) framework activities

1. Planning
2. Design
3. Coding
4. Testing
simple design spike solutions
CRC cards prototypes
user stories
values
acceptance test criteria
iteration plan
n
desig

ing
plann g
codin
refactoring

pair programming
test
Release
unit test
software increment continuous integration
project velocity computed

acceptance testing
Industrial XP

• Joshua Kerievsky [Ker05] describes Industrial Extreme Programming


(IXP) in the following manner: “IXP is an organic evolution of XP. It is
imbued with XP’s minimalist, customer-centric, test-driven spirit.

• IXP differs most from the original XP in its greater inclusion of


management, its expanded role for customers, and its upgraded
technical practices.”

• IXP incorporates six new practices that are designed to help ensure
that an XP project works successfully for significant projects within a
large organization
1. Readiness assessment

2. Project community.

3. Project chartering

4. Test-driven management

5. Retrospectives

6. Continuous learning
The XP Debate
• Stephens and Rosenberg argue that many XP practices are worthwhile,
but others have been overhyped, and a few are problematic.

• The authors suggest that the co dependent nature of XP practices are


both its strength and its weakness.

• Because many organizations adopt only a subset of XP practices, they


weaken the efficacy of the entire process. Among the issues that
continue to trouble some critics of XP are

– Requirements volatility.
– Conflicting customer needs.
– Requirements are expressed informally
– Lack of formal design
Scrum
• Scrum is an agile software development method that was conceived by
Jeff Sutherland and his development team in the early 1990s.

• In recent years, further development on the Scrum methods has been


performed by Schwaber and Beedle .

• Scrum principles are consistent with the agile manifesto and are used
to guide development activities within a process that incorporates the
following framework activities: requirements, analysis, design,
evolution, and delivery.
• Scrum incorporates a set of process patterns that emphasize project
priorities, compartmentalized work units, communication, and
frequent customer feedback.

• Backlog—a prioritized list of project requirements or features that provide


business value for the customer.

• 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.

• Demos—deliver the software increment to the customer so that


functionality that has been implemented can be demonstrated and
evaluated by the customer.
Scrum meetings
• 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
The Dynamic Systems Development Method

• The Dynamic Systems Development Method (DSDM) [Sta97] is an agile


software development approach that “provides a framework for
building and maintaining systems which meet tight time constraints
through the use of incremental prototyping in a controlled project
environment” .

• The consortium has defined an agile process model, called the DSDM life
cycle that defines three different iterative cycles, preceded by two
additional life cycle activities.
• Feasibility study —establishes the basic business requirements and constraint

• Business study —establishes the functional and information requirements

• Functional model iteration- produces a set of incremental prototypes that


demonstrate functionality for the customer

• Design and build iteration —revisits prototypes built during functional model
iteration to ensure that each has been engineered in a manner that will enable it to
provide operational business value for end users.

• Implementation—It should be noted that


– (1) the increment may not be 100 percent complete or
– (2) changes may be requested as the increment is put into place.
• In either case, DSDM development work continues by returning to the
functional model iteration activity.

• DSDM can be combined with XP to provide a combination approach that


defines a solid process model (the DSDM life cycle) with the nuts and bolts
practices (XP) that are required to build software increments.
Agile Unified Process (AUP)
• The Agile Unified Process (AUP) adopts a “serial in the large” and
“iterative in the small” philosophy for building computer-based
systems. By adopting the classic UP phased activities—
– inception,
– elaboration,
– construction, and
– transition—AUP

• Each AUP iteration addresses the following activities


1. Modeling- UML representations of the business and problem
domains are created.

2. Implementation-Models are translated into source code.

3. Testing-Like XP, the team designs and executes a series of tests to


uncover errors and ensure that the source code meets its
requirements.

4. Deployment-focuses on the delivery of a software increment and the


acquisition of feedback from end users.
5. Configuration and project management-In the context of AUP,
configuration management addresses change management, risk
management ,and the control of any persistent work. Project
management tracks and controls the progress of the team and
coordinates team activities.

6. Environment management- Environment management co


ordinates a process infrastructure that includes standards, tools, and
other support technology available to the team.
Requirements Engineering:

• Establishing the ground work,


• Eliciting requirements,
• Developing use cases,
• Building the Analysis model,
• Negotiating Requirements,
• Requirement Monitoring,
• Validating Requirements.
1.Requirements Engineering
• The broad spectrum of tasks and techniques that lead to an
understanding of requirements is called requirements engineering.

• From a software process perspective, requirements engineering is a


major software engineering action that begins during the
communication activity and continues into the modeling activity.

• Requirements engineering builds a bridge to design and


construction.

• Requirements engineering provides the appropriate mechanism for


understanding what the customer wants, analyzing need, assessing
feasibility, negotiating a reasonable solution, specifying the solution
unambiguously, validating the specification, and managing the
requirements .
Tasks involved

• Inception
• Elicitation
• Elaboration
• Negotiation
• Specification
• Validation
• Requirements Management
Inception (Beginning)
•Most projects begin when a business need is identified or a potential
new market or service is discovered.

•Stakeholders from the business community (e.g., business managers,


marketing people, product managers) define a business case for the
idea, try to identify the breadth and depth of the market, do a rough
feasibility analysis, and identify a working description of the project’s
scope.

•At project inception, a basic understanding of the problem, the people


who want a solution, the nature of the solution that is desired, and the
effectiveness of preliminary communication and collaboration
between the other stakeholders and the software team.
.
Elicitation: (Extraction)
• Eliciting requirements is difficult because of

• Problems of scope-Identify the boundaries of the system.


• Problems of understanding -Domain , computing environment.
• Problems of Volatility -Requirements may change over time.

• Elicitation may be accomplished through two activities:

 Collaborative Requirements Gathering


 Quality Function Deployment.
Elaboration (explanation)
•The information obtained from the customer during inception
and elicitation is expanded and refined during elaboration.

•This task focuses on developing a refined requirements model


that identifies various aspects of software function, behavior, and
information.

•Elaboration is a good thing, but you have to know when to stop.


The key is to describe the problem in a way that establishes a firm
base for design. If you work beyond that point, you’re doing design
Negotiation (Cooperation)

•Customers, users, and other stakeholders are asked to rank


requirements and then discuss conflicts in priority.

•Using an iterative approach that prioritizes requirements, assesses


their cost and risk, and addresses internal conflicts, requirements
are eliminated, combined, and/or modified so that each party
achieves some measure of satisfaction.

•There should be no winner and no loser in an effective negotiation.


Both sides win, because a “deal” that both can live with is solidified
Specifications
1. 1. A specification can be a written document, a set of graphical
models, a formal mathematical model, a collection of usage
scenarios, a prototype, or any combination of these.

2. 2. For large systems, a written document, combining natural


language descriptions and graphical models may be the best
approach.

3. 3. However, usage scenarios may be all that are required for smaller
products.
Validation
1. 1. The work products produced as a consequence of
requirements engineering are assessed for quality during a
validation step.

2. 2. Requirements validation examines the specification to ensure


that all software requirements have been stated unambiguously;
that inconsistencies, omissions, and errors have been detected and
corrected; and that the work products conform to the standards
established for the process, the project, and the product.
Requirements management
1. 1. Requirements management is a set of activities that help the
project team identify, control, and track requirements and changes
to requirements at any time as the project proceeds.

2. 2. Many of these activities are identical to the software


configuration management (SCM).
2.Ground Work Establishment
Ground Work for Requirement Analysis consist of

1.Identifying stakeholders-“anyone who benefits in a direct or


indirect way from the system which is being developed.”

• Project Manager
• Team Members
• Team Leads
• Project Resource Manager
• Senior Managers
• Executives or Sponsors
2. Recognizing viewpoints-“Put three stakeholders in a room and ask
them what kind of system they want. You’re likely to get four or more
different opinions.

•Marketing group is interested in functions and features that will


excite the potential market, making the new system easy to sell.

• Business managers are interested in a feature set that can be built


within budget and that will be ready to meet defined market windows.

•End users may want features that are familiar to them and that are
easy to learn and use.

•Software engineers may be concerned with functions that are


invisible to nontechnical stakeholders but that enable an
infrastructure that supports more marketable function
3.Working towards collaboration-The job of a requirements
engineer is to identify areas of commonality (i.e., requirements on
which all stakeholders agree) and areas of conflict or
inconsistency (i.e., requirements that are desired by one
stakeholder but conflict with the needs of another stakeholder

•A strong “project champion”(e.g., a business manager or a senior


technologist) may make the final decision about which
requirements make the cut.
4.Asking the First Questions

•Who is behind the request for this work?


• Who will use the solution?
• What will be the economic benefit of a successful solution?
• Is there another source for the solution that you need?
• How would you characterize “good” output that would be
generated by a successful solution?
• What problem(s) will this solution address?
• Can you show me (or describe) the business environment in which
the solution will be used?
• Will special performance issues or constraints affect the way the
solution is approached
3. Eliciting requirements
•Requirements elicitation (also called requirements gathering)
combines elements of problem solving, elaboration, negotiation, and
specification.

1.Collaborative Requirements Gathering

•Meetings are conducted and attended by both software engineers


and other stakeholders.

• Rules for preparation and participation are established.

• An agenda is suggested that is formal enough to cover all


important points but informal enough to encourage the free flow of
ideas.
• A “facilitator” (can be a customer, a developer, or an outsider)
controls the meeting.

. • A “definition mechanism” (can be work sheets, flip charts, or wall


stickers or an electronic bulletin board, chat room, or virtual forum)
is used
2. Quality Function Deployment-Quality function deployment
(QFD) is a quality management technique that translates the needs
of the customer into technical requirements for software.QFD
identifies three types of requirements.

1. Normal requirements

2. Expected requirements

3. Exciting requirements
3 .Usage Scenarios -developers and users can create a set of
scenarios that identify a thread of usage for the system to be
constructed.

The scenarios, often called use cases, provide a description of how


the system will be used.
4. Elicitation Work Products –a consequence of requirements
elicitation

• A statement of need and feasibility.

• A bounded statement of scope for the system or product.

• A list of stakeholders who participated in requirements


elicitation.

• A description of the system’s technical environment.

• A list of requirements and the domain constraints.

• A set of usage scenarios that provide insight.

• Any prototypes developed to better define requirements


3. Building Use Cases
•Use cases are defined from an actor’s point of view. An actor is a
role that people (users) or devices play as they interact with the
software.

•It is important to note that an actor and an end user are not
necessarily the same thing. A typical user may play a number of
different roles when using a system,

• whereas an actor represents a class of external entities (often, but


not always, people) that play just one role in the context of the use
case.
Once actors have been identified, use cases can be developed. Jacobson
suggests a number of questions should be answered by a use case:

• Who is the primary actor, the secondary actor(s)?

• What are the actor’s goals?

• What preconditions should exist before the story begins?

• What main tasks or functions are performed by the actor?

• What exceptions might be considered as the story is described?


• What variations in the actor’s interaction are possible?

• What system information will the actor acquire, produce, or change?

• Will the actor have to inform the system about changes in the
external environment?

• What information does the actor desire from the system?

• Does the actor wish to be informed about unexpected changes


Sample Use case Diagram
4.Building the Analysis model
The intent of the analysis model is to provide a description of the
required informational, functional, and behavioral domains for a
computer-based system.

1.Elements of the Requirements Model

Different modes of representation force you to consider


requirements from different viewpoints—an approach that has a
higher probability of uncovering omissions, inconsistencies, and
ambiguity
•Scenario-based elements
Class-based elements

•The system is described from the user’s point of view using a


scenario-based approach

•Scenario-based elements of the requirements model are often


the first part of the model that is developed.

•Each usage scenario implies a set of objects that are


manipulated as an actor interacts with the system. These
objects are categorized into classes—a collection of things that
have similar attributes and common behaviors.
•It is always a good idea to get stakeholders involved.

•One of the best ways to do this is to have each stakeholder


write use cases that describe how the software will be used
•Behavioral elements

•The behavior of a computer-based system can have a profound


effect on the design that is chosen and the implementation
approach that is applied.

•The state diagram is one method for representing the behavior of a


system by depicting its states and the events that cause the system to
change state.

• A state is any externally observable mode of behavior. In addition,


the state diagram indicates actions (e.g., process activation) taken as a
consequence of a particular event.
Flow-oriented elements

•Information is transformed as it flows through a computer-based


system. The system accepts input in a variety of forms, applies
functions to transform it, and produces output in a variety of forms.

• Input may be a control signal transmitted by a transducer, a series


of numbers typed by a human operator, packet of information
transmitted on a network link, or a voluminous data file retrieved
from secondary storage.

•The transform(s) may comprise a single logical comparison, a


complex numerical algorithm, or a rule-inference approach of an
expert system. Output may light a single LED or produce a 200-
page report
2.Analysis Patterns

•First, analysis patterns speed up the development of abstract analysis


models that capture the main requirements of the concrete problem
by providing reusable analysis models with examples as well as a
description of advantages and limitations.

• Second, analysis patterns facilitate the transformation of the analysis


model into a design model by suggesting design patterns and reliable
solutions for common problems.

•suggest solutions (e.g., a class, a function, a behavior) within the


application domain that can be reused when modeling many
applications
5.Negotiating Requirements
•A compromise is the art of dividing a cake in such a way that
everyone believes he has the biggest piece.

•The intent of this negotiation is to develop a project plan that meets


stakeholder needs while at the same time reflecting the real-world
constraints (e.g., time, people, budget) that have been placed on the
software team.
The Art of Negotiation
Learning how to negotiate effectively can serve you well throughout
your personal and technical life.

1.Recognize that it’s not a competition. To be successful, both


parties have to feel they’ve won or achieved something. Both
will have to compromise.

2. Map out a strategy. Decide what you’d like to achieve; what the
other party wants to achieve, and how you’ll go about making
both happen.

3. Listen actively. Don’t work on formulating your response while


the other party is talking. Listen to her. It’s likely you’ll gain
knowledge that will help you to better negotiate your position.
4. Focus on the other party’s interests. Don’t take hard positions if
you want to avoid conflict.

5. Don’t let it get personal. Focus on the problem that needs to be


solved.

6. Be creative. Don’t be afraid to think out of the box if you’re at an


impasse.

7. Be ready to commit. Once an agreement has been reached, don’t


waffle; commit to it and move on.
6.Validating Requirements
As each element of the requirements model is created, it is
examined for inconsistency, omissions, and ambiguity.

• Is each requirement consistent with the overall objectives for the


system/product?

• Have all requirements been specified at the proper level of


abstraction? That is, do some requirements provide a level of
technical detail that is inappropriate at this stage?

• Is the requirement really necessary or does it represent an add-


on feature that may not be essential to the objective of the
system?

• Is each requirement bounded and unambiguous?


• Does each requirement have attribution? That is, is a source
(generally, a specific individual) noted for each requirement?

• Do any requirements conflict with other requirements?

• Is each requirement achievable in the technical environment that


will house the system or product?

• Is each requirement testable, once implemented?

• Does the requirements model properly reflect the information,


function, and behavior of the system to be built?
DESIGN CONCEPTS

•The design process


•Design Concepts
•The design model
Introduction
Mitch Kapor, the creator of Lotus 1-2-3, presented a “software design
manifesto” in Dr. Dobbs Journal. He said: Good software design should
exhibit:

 Firmness: A program should not have any bugs that inhibit its
function.
 Commodity: A program should be suitable for the purposes for which
it
was intended.

 Delight: The experience of using the program should be pleasurable


one
DESIGN WITH THE CONTEXT OF SE
• “The most common miracle of software engineering is the transition
from analysis to design and design to code.”

• Software design sits at the technical kernel of software engineering


and is applied regardless of the software process model that is used.

• Beginning once software requirements have been analyzed and


modeled, software design is the last software engineering action
within the modeling activity and sets the stage for construction(code
generation and testing).
Translating the requirements model into the design model
• The data/class design transforms class models into design class
realizations and the requisite data structures required to implement
the software.

• The architectural design defines the relationship between major


structural elements of the software, the architectural styles and design
patterns that can be used to achieve the requirements defined for the
system, and the constraints that affect the way in which architecture
can be implemented.
• The interface design describes how the software communicates with
systems that interoperate with it, and with humans who use it. An
interface implies a flow of information (e.g., data and/or control) and a
specific type of behavior.

• The component-level design transforms structural elements of the


software architecture into a procedural description of software
components.
DESIGN PROCESS
•Software design is an iterative process through which
requirements are translated into a “blueprint” for constructing the
software.

•The blueprint depicts a holistic view of software.


1.Software Quality Guidelines and Attributes
• The design must implement all of the explicit
requirements contained in the requirements model, and it must
accommodate all of the implicit requirements desired by
stakeholders.

• The design must be a readable, understandable guide for


those who generate code and for those who test and
subsequently support the software.

• The design should provide a complete picture of the


software, addressing the data, functional, and behavioral
domains from an implementation perspective.
Software Quality Guidelines
 A design should exhibit an architecture that

(1)has been created using recognizable architectural styles or


patterns,
(2)is composed of components that exhibit good design
characteristics and
(3) can be implemented in an evolutionary fashion

For smaller systems, design can sometimes be developed linearly.

 A design should be modular; that is, the software should be logically


partitioned into elements or subsystems

 A design should contain distinct representations of data,


architecture, interfaces, and components.
 A design should lead to data structures that are appropriate for the
classes to be implemented and are drawn from recognizable data
patterns.

 A design should lead to components that exhibit independent


functional characteristics.

 A design should lead to interfaces that reduce the complexity of


connections between components and with the external
environment.

 A design should be derived using a repeatable method that is driven


by information obtained during software requirements analysis.

 A design should be represented using a notation that effectively


communicates its meaning.
Software Quality Attributes
• Functionality- assessed by evaluating the feature set and capabilities of
the program.

• Usability- assessed by considering human factors overall aesthetics,


consistency, and documentation.

• Reliability- evaluated by measuring the frequency and severity of failure.

• Performance- measured by considering processing speed, response time,


resource consumption, throughput, and efficiency.

• Supportablity- combines the ability to extend the program (extensibility),


adaptability, serviceability
2.The Evolution of Software Design
• Procedural aspects of design definition evolved into a philosophy called
structured programming .

• Newer design approaches proposed an object-oriented approach to


design derivation.

• Growing emphasis on aspect-oriented methods model-driven


development and test-driven development emphasize techniques for
achieving more effective modularity and architectural structure in the
designs that are created.
• All of these methods have a number of common characteristics:

(1) a mechanism for the translation of the requirements model into a


design representation,

(2) a notation for representing functional components and their


interfaces,

(3) heuristics for refinement and partitioning, and

(4) guidelines for quality assessment


2.Design Concepts
• A set of fundamental software design concepts has evolved over the
history of software engineering.

• Each provides the software designer with a foundation from which


more sophisticated design methods can be applied. Each helps you
answer the following questions:

– What criteria can be used to partition software into individual


components?
– How is function or data structure detail separated from a
conceptual representation of the software?
– What uniform criteria define the technical quality of a software
design?
• M. A. Jackson [Jac75] once said: “The beginning of wisdom for a
[software engineer] is to recognize the difference between
getting a program to work, and getting it right.”

• Fundamental software design concepts provide the necessary


framework for “getting it right.”
 Abstraction—data, procedure, control

 Architecture—the overall structure of the software

 Patterns—”conveys the essence” of a proven design solution

 Separation of concerns—any complex problem can be more easily


handled if it is subdivided into pieces

 Modularity—compartmentalization of data and function

 Hiding—controlled interfaces

7
 Functional independence—single-minded function and low coupling

 Refinement—elaboration of detail for all abstractions


 Aspects—a mechanism for understanding how global requirements
affect design
 Refactoring—a reorganization technique that simplifies the design

 OO design concepts—OO design concepts such as classes and


objects, inheritance, messages, and polymor phism, among others.
 Design Classes—provide design detail that will enable analysis
classes to be implemented

7
1.A data abstraction is a named collection of data that describes a data
object.

8
A procedural abstraction refers to a sequence of instructions that
have a specific and limited function.

details of
enter
algorithm

implemented with a "knowledge" of


the object that is associated with enter

9
2.Architecture
“The overall structure of the software and the ways in which that
structure provides conceptual integrity for a system.”

Structural properties. This aspect of the architectural design


representation defines the components of a system (e.g., modules,
objects, filters) and the manner in which those components are
packaged and interact with one another.

Extra-functional properties. The architectural design description


should address how the design architecture achieves requirements for
performance, capacity, reliability, security, adaptability, and other
system characteristics.

Families of related systems. The architectural design should draw


upon repeatable patterns that are commonly encountered in the design
of families of similar systems. In essence, the design should have the
ability to reuse architectural building blocks.
10
3.Patterns
Design Pattern Template

• Pattern name—describes the essence of the pattern in a short but


expressive name
• Intent—describes the pattern and what it does
• Also-known-as—lists any synonyms for the pattern
• Motivation—provides an example of the problem
• Applicability—notes specific design situations in which the pattern is
applicable
• Structure—describes the classes that are required to implement the pattern
• Participants—describes the responsibilities of the classes that are
• required to implement the pattern
• Collaborations—describes how the participants collaborate to carry out their
responsibilities
• Consequences—describes the “design forces” that affect the pattern and the
potential trade-offs that must be considered when the pattern is implemented
• Related patterns—cross-references related design patterns
11
• Design pattern describes a design structure that solves a particular
design problem within a specific context and amid “forces” that may
have an impact on the manner in which the pattern is applied and used.

• The intent of each design pattern is to provide a description that


enables a designer to determine
(1) whether the pattern is applicable to the current work,
(2) whether the pattern can be reused (hence, saving design time), and
(3) whether the pattern can serve as a guide for developing a similar, but
functionally or structurally different pattern
4.Separation of Concerns

 Any complex problem can be more easily handled if it is


subdivided into pieces that can each be solved and/or optimized
independently

 A concern is a feature or behavior that is specified as part of the


requirements model for the software

 By separating concerns into smaller, and therefore more


manageable pieces, a problem takes less effort and time to solve.

1
5.Modularity

 "modularity is the single attribute of software that allows a program


to be intellectually manageable" .
 Monolithic software (i.e., a large program composed of a single
module) cannot be easily grasped by a software engineer.
 The number of control paths, span of reference, number of
variables, and overall complexity would make understanding close
to impossible.
 In almost all instances, you should break the design into many
modules, hoping to make understanding easier and as a consequence,
reduce the cost required to build the software.

13
Cost
of
Total software cost

effort Cost to integrate

Region of minimum cost


M

Number of modules
6.Information Hiding

•Hiding implies that effective modularity can be achieved by


defining a set of independent modules that communicate with one
another only that information necessary to achieve software
function.

•The use of information hiding as a design criterion for modular


systems provides the greatest benefits when modifications are
required during testing and later during software maintenance
7.Functional Independence
 Functional independence is achieved by developing modules with
"single-minded" function and an "aversion" to excessive
interaction with other modules.

 Cohesion is an indication of the relative functional strength


of a module.A cohesive module performs a single task,
requiring little interaction with other components in other
parts of a program. Stated simply, a cohesive module should
(ideally) do just one thing.

 Coupling is an indication of the relative interdependence among


modules.Coupling depends on the interface complexity between
modules, the point at which entry or reference is made to a
module, and what data pass across the interface.

19
8.Refinement
• Refinement is actually a process of elaboration.

• Abstraction and refinement are complementary concepts. Abstraction


enables you to specify procedure and data internally but suppress the
need for “outsiders” to have knowledge of low-level details.

• Refinement helps you to reveal low-level details as design progresses.


Stepwise Refinement
open

walk to door;
reach for
knob;
open door; repeat until door opens

walk if knob doesn't turn,


through; then
find correct
key; insert in
lock;
endif
pull/push door
move out of
way; end repeat

17
9.Aspects
 Consider two requirements, A and B. Requirement A crosscuts
requirement B “if a software decomposition [refinement] has
been chosen in which B cannot be satisfied without taking A
into account.

 An aspect is a representation of a cross-cutting concern.

 Cross-cutting concerns are parts of a program that rely on or must


affect many other parts of the system. They form the basis for the
development of aspects. Such cross-cutting concerns do not fit cleanly
into object-oriented programming or procedural programming.

20
10.Refactoring
 Fowler [FOW99] defines refactoring in the following manner:
 "Refactoring is the process of changing a software system in such
a way that it does not alter the external behavior of the code
[design] yet improves its internal structure.”

 When software is refactored, the existing design is examined for


 Redundancy
 unused design elements
 inefficient or unnecessary algorithms
 poorly constructed or inappropriate data structures
 or any other design failure that can be corrected to yield a better
design.

22
11.OO Design Concepts

 Inheritance—all responsibilities of a superclass is


immediately inherited by all subclasses

 Messages—stimulate some behavior to occur in the receiving


object

 Polymorphism—a characteristic that greatly reduces the effort


required to extend the design

23
12.Design Classes
Five different types of design classes, each representing a different layer
of the design architecture.

• User interface classes define all abstractions that are necessary for
humancomputer interaction (HCI).

• Business domain classes are often refinements of the analysis

• Process classes implement lower-level business abstractions

• Persistent classes represent data stores (e.g., a database) that will


persist beyond the execution of the software.

• System classes implement software management and control functions


that enable the system to operate and communicate within its
computing environment and with the outside
24
3.Design Model
• The process dimension indicates the evolution of the design
model as design tasks are executed as part of the software
process.

• The abstraction dimension represents the level of detail as each


element of the analysis model is transformed into a design
equivalent and then refined iteratively.

26
1.Data Design Element
• Data design (sometimes referred to as data architecting) creates a model of data
and/or information that is represented at a high level of abstraction (the
customer/user’s view of data).

• This data model is then refined into progressively more implementation-specific


representations that can be processed by the computer-based system.

• At the program component level, the design of data structures and the associated
algorithms required to manipulate them is essential to the creation of high-quality
applications.

• At the application level, the translation of a data model (derived as part of requirements
engineering) into a database is pivotal to achieving the business objectives of a system.

• At the business level, the collection of information stored in disparate databases and
reorganized into a “data warehouse” enables data mining or knowledge discovery that
can have an impact on the success of the business itself.
2.Architectural Elements
 The Architectural design elements give us an overall view of the
software,architectural model is derived from three sources:

 information about the application domain for the


software to be built;

 specific requirements model elements such as data flow


diagrams or analysis classes, their relationships and
collaborations for the problem at hand, and

 the availability of architectural patterns and styles

27
3.Interface Design Elements
• The interface design elements for software depict information flows
into and out of the system and how it is communicated among the
components defined as part of the architecture. There are three
important elements of interface design:

• (1) the user interface (UI);

• (2) external interfaces to other systems, devices, networks, or other


producers or consumers of information; and

• (3) internal interfaces between various design components.


4.Component-Level Design Elements
• The component-level design for software fully describes the internal
detail of each software component.

• To accomplish this, the component-level design defines data structures


for all local data objects and algorithmic detail for all processing that
occurs within a component and an interface that allows access to all
component operations (behaviors)
5.Deployment-Level Design Element
• Deployment-level design elements indicate how software functionality
and subsystems will be allocated within the physical computing
environment that will support the software.
Thank you
.

You might also like