Unit 2
Unit 2
Unit 2
UNIT-II
School of CSA
Dr.Hemanth.K.S
UNIT -2: [13 HOURS]
1. What are some common misconceptions about software development and how
have they impacted the software engineering discipline?
2. How has the software development process evolved over time, and what factors
have driven these changes?
3. What are the key components of a software process model, and how can these
models be customized for specific types of projects or industries?
4. How can software engineers balance the need for structure and discipline in the
development process with the need for creativity and innovation?
5. What are some emerging trends in software engineering, and how are these
trends likely to impact the future of the industry?
SOFTWARE REQUIREMENT
How to gathered
Requirement ?
SOFTWARE REQUIREMENT
Non-functional requirements cover all the remaining requirements which are not
covered by the functional requirements.
SOFTWARE REQUIREMENT
Understanding the requirements of a problem is among the most difficult tasks that
face a software engineer.
When you first think about it, developing a clear understanding of requirements
doesn’t seem that hard. After all, doesn’t the customer know what is required?
Shouldn’t the end users have a good understanding of the features and functions that
will provide benefit?
UNDERSTANDING THE REQUIREMENTS
Why is it important?
Designing and building an elegant computer program that solves the wrong problem
serves no one’s needs. That’s why it’s important to understand what the customer
wants before you begin to design and build a computer-based system.
UNDERSTANDING THE REQUIREMENTS
Inception
At project inception,you establish 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.
REQUIREMENTS ENGINEERING
Elicitation
Identify a number of problems that are encountered as elicitation
occurs.
Problems of scope.
Problems of understanding
Problems of volatility
REQUIREMENTS ENGINEERING
Elaboration
Elaboration in requirement engineering refers to the process of adding more detail
to the requirements to ensure that they are complete, unambiguous, and
consistent.
By taking the time to refine and elaborate the requirements, project teams can
avoid costly mistakes and deliver a successful system that meets the needs of all
stakeholders.
REQUIREMENTS ENGINEERING
Negotiation.
Negotiation in requirement engineering refers to the process of resolving conflicts
and finding common ground among stakeholders with differing requirements,
expectations, and priorities.
Specification.
specification means different things to different people. 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
REQUIREMENTS ENGINEERING
Validation
The work products produced as a consequence of requirements engineering are
assessed for quality during a validation step.
Stakeholders and software engineers work together on the same team. In such
cases, requirements engineering is simply a matter of conducting meaningful
conversations with colleagues who are well-known members of the team. But
reality is often quite different.
Identifying Stakeholders
Business operations managers, product managers, marketing people, internal and external
customers, end users, consultants, product engineers, software engineers, support and
maintenance engineers, and others. Each stakeholder has a different view of the system,
achieves different benefits when the system is successfully developed, and is open to
different risks if the development effort should fail. In an ideal setting, stakeholders and
software engineers
ESTABLISHING THE GROUNDWORK
Because many different stakeholders exist, the requirements of the system will be
explored from many different points of view
Questions asked at the inception of the project should be “context free”. The first
set of context-free questions focuses on the customer and other stakeholders, the
overall project goals and benefits. For example, you might ask:
Quality function deployment (QFD) is a quality management technique that translates the
needs of the customer into technical requirements for software. QFD “concentrates on
maximizing customer satisfaction from the software engineering process”.
Normal requirements: The objectives and goals that are stated for a product or system
during meetings with the customer.
Expected requirements: These requirements are implicit to the product or system and
may be so fundamental that the customer does not explicitly state them.
Exciting requirements. These features go beyond the customer’s expectations and prove
to be very satisfying when present.
ELICITING REQUIREMENTS
Usage Scenarios
• As requirements are gathered, an overall vision of system functions and features
begins to materialize.
• However, it is difficult to move into more technical software engineering activities
until you understand how these functions and features will be used by different
classes of end users.
• To accomplish this, 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.
ELICITING REQUIREMENTS
The work products produced as a consequence of requirements elicitation will vary depending
on the size of the system or product to be built.
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.
The intent of the analysis model is to provide a description of the required informational,
functional, and behavioral domains for a computer-based system.
The model changes dynamically as you learn more about the system to be built, and
other stakeholders understand more about what they really require.
“A compromise is the art of dividing a cake in such a way that everyone believes
he has the biggest piece.”
That is, stakeholders win by getting the system or product that satisfies the majority of
their needs and you (as a member of the software team) win by working to realistic
and achievable budgets and deadlines.
VALIDATING REQUIREMENTS
• 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?
REQUIREMENTS MODELING (SCENARIO-BASED & CLASS-
BASED METHODS)
At a technical level, software engineering begins with a series of modeling tasks that
lead to a specification of requirements and a design representation for the software to
be built.
The requirements model— actually a set of models—is the first technical representation
of a system.
Why is it important?
REQUIREMENTS ANALYSIS
Requirements analysis results in the specification of software’s operational
characteristics, indicates software’s interface with other system elements, and
establishes constraints that software must meet.
REQUIREMENTS ANALYSIS
The requirements modeling action results in one or more of the following types of
models:
REQUIREMENTS ANALYSIS
• Class-oriented models that represent object-oriented classes (attributes and
operations) and the manner in which classes collaborate to achieve system
requirements
• Flow-oriented models that represent the functional elements of the system and how
they transform data as it moves through the system
• Behavioral models that depict how the software behaves as a consequence of
external “events”
REQUIREMENTS MODELING (SCENARIO-BASED & CLASS-
BASED METHODS)
REQUIREMENTS ANALYSIS
REQUIREMENTS MODELING (SCENARIO-BASED & CLASS-
BASED METHODS)
SCENARIO-BASED MODELING
The success of a computer-based system or product is measured in many
ways, user satisfaction resides at the top of the list.
If you understand how end users (and other actors) want to interact with a system, your
software team will be better able to properly characterize requirements and build
meaningful analysis and design model.
REQUIREMENTS MODELING (SCENARIO-BASED & CLASS-
BASED METHODS)
SCENARIO-BASED MODELING
SCENARIO-BASED MODELING
Refining a Preliminary Use Case
Description of alternative interactions is essential for a complete understanding of
the function that is being described by a use case. Therefore, each step in the primary
scenario is evaluated by asking the following questions:
• Can the actor take some other action at this point?
• Is it possible that the actor will encounter some error condition at this point? If
so, what might it be?
• Is it possible that the actor will encounter some other behavior at this point (e.g.,
behavior that is invoked by some event outside the actor’s control)? If so, what
might it be?
REQUIREMENTS MODELING (SCENARIO-BASED & CLASS-
BASED METHODS)
SCENARIO-BASED MODELING
Scenario-based requirements modeling involves the following steps:
1.Identify the users: Identify the different types of users who will interact with the
system. This includes end-users, administrators, managers, etc.
2.Define the scenarios: Identify the different scenarios or use cases that the users will
encounter while interacting with the system. A scenario is a sequence of actions that a
user performs to achieve a specific goal.
REQUIREMENTS MODELING (SCENARIO-BASED & CLASS-
BASED METHODS)
SCENARIO-BASED MODELING
Scenario-based requirements modeling involves the following steps:
1.Describe the scenarios: Describe each scenario in detail, including the steps involved,
inputs required, and the expected outputs.
2.Identify the requirements: Identify the requirements that are necessary to fulfill
each scenario. These requirements may include functional requirements, non-
functional requirements, performance requirements, etc.
SCENARIO-BASED MODELING
1.Prioritize the requirements: Prioritize the requirements based on their importance
and feasibility.
SCENARIO-
BASED
MODELING
REQUIREMENTS MODELING (SCENARIO-BASED & CLASS-
BASED METHODS)
CLASS-BASED MODELING
CLASS-BASED MODELING
Specifying Attributes
Attributes describe a class that has been selected for inclusion in the requirements
Model.
To develop a meaningful set of attributes for an analysis class, you should study each use
case and select those “things” that reasonably “belong” to the class
REQUIREMENTS MODELING (SCENARIO-BASED & CLASS-
BASED METHODS)
CLASS-BASED MODELING
Defining Operations
Operations define the behavior of an object. Although many different types of
operations exist, they can generally be divided into four broad categories:
(1)operations that manipulate data in some way (e.g., adding, deleting, reformatting,
selecting),
(2)operations that perform a computation,
(3)operations that inquire about the state of an object, and
(4)operations that monitor an object for the occurrence of a controlling event.
REQUIREMENTS MODELING (SCENARIO-BASED & CLASS-
BASED METHODS)
CLASS-BASED MODELING
Class-Responsibility-Collaborator (CRC) Modeling
CLASS-BASED MODELING
Associations and Dependencies
In many instances, two analysis classes are related to one another in some fashion,
much like two data objects may be related to one another (Section 6.4.3). In UML
these relationships are called associations.
REQUIREMENTS MODELING (SCENARIO-BASED & CLASS-
BASED METHODS)
CLASS-BASED MODELING
1.Identify the objects: Identify the different objects that will be involved in the system.
Objects are entities that have specific attributes and behaviors.
2.Define the classes: Define the classes that will be required to represent the objects in
the system. Classes are templates or blueprints that define the attributes and behaviors
of objects.
REQUIREMENTS MODELING (SCENARIO-BASED & CLASS-
BASED METHODS)
CLASS-BASED MODELING
1.Identify the relationships: Identify the relationships between the classes.
Relationships describe how the classes interact with each other.
2.Define the attributes: Define the attributes of each class. Attributes are the
characteristics or properties of an object that are relevant to the system.
3.Define the behaviors: Define the behaviors of each class. Behaviors are the actions or
operations that the objects can perform.
CLASS-BASED MODELING
1.Prioritize the requirements: Prioritize the requirements based on their importance
and feasibility.
CLASS-BASED MODELING
DESIGN CONCEPT
What is it?
Design is what almost every engineer wants to do. It is the place where creativity
rules—where stakeholder requirements, business needs, and technical
considerations all come together in the formulation of a product or system.
Design creates a representation or model of the software, but unlike the
requirements model (that focuses on describing required data, function, and
behavior), the design model provides detail about software architecture, data
structures, interfaces, and components that are necessary to implement the
system
DESIGN CONCEPT
Why is it important?
Design allows you to model the system or product that is to be built. This model can be
assessed for quality and improved before code is generated, tests are conducted, and
end users become involved in large numbers. Design is the place where software quality
is established.
DESIGN CONCEPT
Design depicts the software in a number of different ways. First, the architecture of the
system or product must be represented. Then, the interfaces that connect the software
to end users, to other systems and devices, and to its own constituent components are
modeled. Finally, the software components that are used to construct the system are
designed. Each of these views represents a different design action, but all must conform
to a set of basic design concepts that guide software design work.
DESIGN CONCEPT
The design model is assessed by the software team in an effort to determine whether it
contains errors, inconsistencies, or omissions; whether better alternatives exist; and
whether the model can be implemented within the constraints, schedule, and cost that
have been established.
THE DESIGN PROCESS
Software design is an iterative process through which requirements are translated into a
“blueprint” for constructing the software.
the quality of the evolving design is assessed with a series of technical reviews.
• 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.
THE DESIGN PROCESS
Quality Attributes
Hewlett-Packard {Gra87] developed a set of software quality attributes that has been given
the acronym FURPS—functionality, usability, reliability, performance, and supportability.
Functionality is assessed by evaluating the feature set and capabilities of the program, the
generality of the functions that are delivered, and the security of the overall system.
THE DESIGN PROCESS
Quality Attributes
• Reliability is evaluated by measuring the frequency and severity of failure, the accuracy of
output results, the mean-time-to-failure (MTTF), the ability to recover from failure, and the
predictability of the program.
THE DESIGN PROCESS
Quality Attributes
DESIGN CONCEPTS
A set of fundamental software design concepts has evolved over the history of software
Engineering.
DESIGN CONCEPTS
Abstraction
DESIGN CONCEPTS
Abstraction
A procedural abstraction
A procedural abstraction refers to a sequence of instructions that have a specific
and limited function.
DESIGN CONCEPTS
Architecture
Software architecture alludes to “the overall structure of the software and the ways in
which that structure provides conceptual integrity for a system.
DESIGN CONCEPTS
Architecture
Set of properties that should be specified as part of an architectural design.
• Structural properties.
• Extra-functional properties
• Families of related systems
“A software architecture is the development work product that gives the highest
return on investment with respect to quality, schedule, and cost.”
Len Bass et al.
THE DESIGN PROCESS
DESIGN CONCEPTS
Patterns
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.”
“Each pattern describes a problem which occurs over and over again in our environment,
and then describes the core of the solution to that problem, in such a way that you can
use this solution a million times over, without ever doing it the same way twice.”
Christopher
Alexander
THE DESIGN PROCESS
DESIGN CONCEPTS
Separation of Concerns
Separation of concerns is a design concept that suggests that 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.
THE DESIGN PROCESS
DESIGN CONCEPTS
Modularity
It has been stated that “modularity is the single attribute of software that allows a
program to be intellectually manageable” .
THE DESIGN PROCESS
DESIGN CONCEPTS
Information Hiding
The intent of information hiding is to hide the details of data structures and procedural
processing behind a module interface. Knowledge of the details need not be known by
users of the module.
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.
THE DESIGN PROCESS
DESIGN CONCEPTS
Functional Independence
Functional independence is achieved by developing modules with “singleminded”
function and an “aversion” to excessive interaction with other modules.
DESIGN CONCEPTS
Refinement
Refinement is actually a process of elaboration. You begin with a statement of
function (or description of information) that is defined at a high level of abstraction.
That is, the statement describes function or information conceptually but provides
no information about the internal workings of the function or the internal structure
of the information.
You then elaborate on the original statement, providing more and more detail as
each successive refinement (elaboration) occurs.
THE DESIGN PROCESS
DESIGN CONCEPTS
Aspects
It is important to identify aspects so that the design can properly accommodate them
as refinement and modularization occur.
In an ideal context, an aspect is implemented as a separate module (component)
rather than as software fragments that are “scattered” or “tangled” throughout many
components .
To accomplish this, the design architecture should support a mechanism for defining
an aspect—a module that enable the concern to be implemented across all other
concerns that it crosscuts.
THE DESIGN PROCESS
DESIGN CONCEPTS
Refactoring
“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.
THE DESIGN PROCESS
DESIGN CONCEPTS
As the design model evolves, you will define a set of design classes that refine the analysis
classes by providing design detail that will enable the classes to be implemented, and
implement a software infrastructure that supports the business solution.
THE DESIGN PROCESS
DESIGN CONCEPTS
Object-Oriented Design Concepts
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 human computer
interaction (HCI).
• Business domain classes: The classes identify the attributes and services (methods) that are
required to implement some element of the business domain.
THE DESIGN PROCESS
DESIGN CONCEPTS
• Process classes implement lower-level business abstractions required to fully manage the
business domain classes.
• 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 world.
ARCHITECTURAL DESIGN
What is it?
Architectural design represents the structure of data and program components that
are required to build a computer-based system. It considers the architectural style
that the system will take, the structure and properties of the components that
constitute the system, and the interrelationships that occur among all architectural
components of a system.
Architectural design in software design refers to the process of designing the overall
structure and organization of a software system.
ARCHITECTURAL DESIGN
“A database or data warehouse designer creates the data architecture for a system”.
ARCHITECTURAL DESIGN
Architectural Descriptions
Architectural Descriptions
Architectural Decisions
Architectural decisions are the key design choices that shape the overall structure
and organization of a software system. These decisions have a significant impact on
the software's functionality, performance, maintainability, and other important
characteristics.
Making effective architectural decisions requires careful consideration of a range of
factors, including the project's goals, the available resources, the technical
capabilities of the development team, and the constraints of the development
environment
ARCHITECTURAL DESIGN
Architectural Styles
Architectural styles refer to the fundamental principles or patterns that guide the
organization of software systems.
Here are some of the most common architectural styles in software design:
• Monolithic Architecture
• Client-Server Architecture
• Microservices Architecture
• Service-Oriented Architecture (SOA)
• Event-Driven Architecture
• Layered Architecture
• Domain-Driven Design
Each of these architectural styles has its own strengths and weaknesses, and the choice of
style depends on the requirements of the project and the goals of the development team.
ARCHITECTURAL DESIGN
Architectural Design
Architectural design is the process of creating plans, drawings, and models for
buildings, structures, and landscapes. It involves the planning, design, and
coordination of various elements such as site selection, building systems, aesthetics,
and functionality.
Overall, architectural mapping using data flow is a powerful technique that can help you understand
the behavior of a software system and identify areas for improvement.
ARCHITECTURAL DESIGN WEBAPP
ARCHITECTURAL DESIGN
MOBILEAPP