0% found this document useful (0 votes)
2 views

Software Engineering Unit-5

The document discusses formal software specifications, emphasizing the need for mathematically defined languages to enhance understanding, debugging, and testing of software. It outlines the software design process, including objectives, concepts, and various design strategies like top-down and bottom-up approaches, highlighting their advantages and disadvantages. Additionally, it covers the importance of user interface design and the overall impact of a well-structured system design on software quality and maintainability.

Uploaded by

rkrathore35046
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

Software Engineering Unit-5

The document discusses formal software specifications, emphasizing the need for mathematically defined languages to enhance understanding, debugging, and testing of software. It outlines the software design process, including objectives, concepts, and various design strategies like top-down and bottom-up approaches, highlighting their advantages and disadvantages. Additionally, it covers the importance of user interface design and the overall impact of a well-structured system design on software quality and maintainability.

Uploaded by

rkrathore35046
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 29

1

FORMAL SPECIFICATION

A formal software specification is a statement expressed in a language whose vocabulary,


syntax, and semantics are formally defined. The need for a formal semantic definition means that
the specification languages cannot be based on natural language; it must be based on
mathematics.

The advantages of a formal language are:

• The development of a formal specification provides insights and understanding of the software
requirements and the software design.

• Given a formal system specification and a complete formal programming language definition,
it may be possible to prove that a program conforms to its specifications.

• Formal specification may be automatically processed. Software tools can be built to assist with
their development, understanding, and debugging.

• Depending on the formal specification language being used, it may be possible to animate a
formal system specification to provide a prototype system.

• Formal specifications are mathematical entities and may be studied and analyzed using
mathematical methods.

• Formal specifications may be used as a guide to the tester of a component in identifying


appropriate test cases.

Formal specifications sometimes are not used because:

• Software management is conservative and unwilling to adopt new techniques whose payoff is
not immediately obvious.

• Most software engineers have not been trained in formal specification techniques.

• Some classes of systems are difficult to specify using existing specification techniques.
Interactive and interrupt driven systems might be examples.

1
2

Specification with pre & post conditions

Set out the pre-conditions

A statement about the function parameters stating what is invariably true before the function is
executed

Set out the post-conditions

A statement about the function parameters stating what is invariably true after the function has
executed

The difference between the pre & post conditions is due to the application of the function to its
parameters. Together the pre and post conditions are a function specification

2
3

3
4

Software design

Software design is a mechanism to transform user requirements into some suitable form, which
helps the programmer in software coding and implementation. It deals with representing the
client's requirement, as described in SRS (Software Requirement Specification) document, into a
form, i.e., easily implementable using programming language.

The software design phase is the first step in SDLC (Software Design Life Cycle), which moves
the concentration from the problem domain to the solution domain. In software design, we
consider the system to be a set of components or modules with clearly defined behaviors &
boundaries.

Objectives of Software Design

Following are the purposes of Software design:

1. Correctness:Software design should be correct as per requirement.


2. Completeness:The design should have all components like data structures, modules, and
external interfaces, etc.
3. Efficiency:Resources should be used efficiently by the program.
4. Flexibility:Able to modify on changing needs.
5. Consistency:There should not be any inconsistency in the design.
6. Maintainability: The design should be so simple so that it can be easily maintainable by
other designers.

4
5

Software Design Concepts:

Concepts are defined as a principal idea or invention that comes into our mind or in thought to
understand something. The software design concept simply means the idea or principle
behind the design. It describes how you plan to solve the problem of designing software, the
logic, or thinking behind how you will design software. It allows the software engineer to
create the model of the system or software or product that is to be developed or built. The
software design concept provides a supporting and essential structure or model for developing
the right software. There are many concepts of software design and some of them are given
below:

The following points should be considered while designing Software:

1. Abstraction- hide Irrelevant data


Abstraction simply means to hide the details to reduce complexity and increases efficiency
or quality. Different levels of Abstraction are necessary and must be applied at each stage of
the design process so that any error that is present can be removed to increase the efficiency
of the software solution and to refine the software solution. The solution should be
described in broad ways that cover a wide range of different things at a higher level of
abstraction and a more detailed description of a solution of software should be given at the
lower level of abstraction.
2. Modularity- subdivide the system
Modularity simply means dividing the system or project into smaller parts to reduce the
complexity of the system or project. In the same way, modularity in design means
subdividing a system into smaller parts so that these parts can be created independently and

5
6

then use these parts in different systems to perform different functions. It is necessary to
divide the software into components known as modules because nowadays there are
different software available like Monolithic software that is hard to grasp for software
engineers. So, modularity in design has now become a trend and is also important. If the
system contains fewer components then it would mean the system is complex which
requires a lot of effort (cost) but if we are able to divide the system into components then
the cost would be small.
3. Architecture- design a structure of something
Architecture simply means a technique to design a structure of something. Architecture in
designing software is a concept that focuses on various elements and the data of the
structure. These components interact with each other and use the data of the structure in
architecture.
4. Refinement- removes impurities
Refinement simply means to refine something to remove any impurities if present and
increase the quality. The refinement concept of software design is actually a process of
developing or presenting the software or system in a detailed manner that means to
elaborate a system or software. Refinement is very necessary to find out any error if present
and then to reduce it.
5. Pattern- a repeated form
The pattern simply means a repeated form or design in which the same shape is repeated
several times to form a pattern. The pattern in the design process means the repetition of a
solution to a common recurring problem within a certain context.
6. Information Hiding- hide the information
Information hiding simply means to hide the information so that it cannot be accessed by an
unwanted party. In software design, information hiding is achieved by designing the
modules in a manner that the information gathered or contained in one module is hidden
and can’t be accessed by any other modules.
7. Refactoring- reconstruct something
Refactoring simply means reconstructing something in such a way that it does not affect the
behavior of any other features. Refactoring in software design means reconstructing the
design to reduce complexity and simplify it without affecting the behavior or its functions.
Fowler has defined refactoring as “the process of changing a software system in a way that
it won’t affect the behavior of the design and improves the internal structure”.
Different levels of Software Design:
There are three different levels of software design. They are:
1. Interface Design
2. Architectural Design
3. Detailed Design

Interface Design: Interface design is the specification of the interaction between a system and its
environment. this phase proceeds at a high level of abstraction with respect to the inner workings
of the system i.e, during interface design, the internal of the systems are completely ignored and
the system is treated as a black box. Attention is focussed on the dialogue between the target
system and the users, devices, and other systems with which it interacts. The design problem

6
7

statement produced during the problem analysis step should identify the people, other systems,
and devices which are collectively called agents.
Interface design should include the following details:

Precise description of events in the environment, or messages from agents to which the system
must respond.
Precise description of the events or messages that the system must produce.
Specification on the data, and the formats of the data coming into and going out of the
system.
Specification of the ordering and timing relationships between incoming events or messages,
and outgoing events or outputs.

Architectural Design: Architectural design is the specification of the major components of a


system, their responsibilities, properties, interfaces, and the relationships and interactions
between them. In architectural design, the overall structure of the system is chosen, but the
internal details of major components are ignored.
Issues in architectural design includes:
Gross decomposition of the systems into major components.
Allocation of functional responsibilities to components.
 Component Interfaces
 Component scaling and performance properties, resource consumption properties, reliability
properties, and so forth.
 Communication and interaction between components.

The architectural design adds important details ignored during the interface design. Design of the
internals of the major components is ignored until the last phase of the design

Detailed Design: Design is the specification of the internal elements of all major system
components, their properties, relationships, processing, and often their algorithms and the data
structures. The detailed design may include:

 Decomposition of major system components into program units.


Allocation of functional responsibilities to units.
 User interfaces
 Unit states and state changes
 Data and control interaction between units
 Data packaging and implementation, including issues of scope and visibility of program
elements .
 Algorithms and data structures

7
8

Software quality guidelines

 A design is generated using the recognizable architectural styles and compose a good design
characteristic of components and it is implemented in evolutionary manner for testing.
 A design of the software must be modular i.e the software must be logically partitioned into
elements.
 In design, the representation of data , architecture, interface and components should be distinct.
 A design must carry appropriate data structure and recognizable data patterns.
 Design components must show the independent functional characteristic.
 A design creates an interface that reduce the complexity of connections between the
components.
 A design must be derived using the repeatable method.
 The notations should be use in design which can effectively communicates its meaning.

What is Topdown Approach in SDLC?

The top-down approach in software development is a method of designing and building a


system by starting with a high-level design and then progressively refining the design with
increasing levels of detail. It is also known as the stepwise refinement approach.

Top-down and bottom-up are both strategies of information processing and knowledge
ordering, used in a variety of fields including software, humanistic and scientific theories , and
management and organization. In practice, they can be seen as a style of thinking, teaching, or
leadership.
A top-down approach is essentially the breaking down of a system to gain insight into its
compositional sub-systems in a reverse engineering fashion. In a top-down approach an
overview of the system is formulated, specifying, but not detailing, any first-level subsystems.
Each subsystem is then refined in yet greater detail, sometimes in many additional subsystem
levels, until the entire specification is reduced to base elements. A top-down model is often
specified with the assistance of "black boxes", which makes it easier to manipulate. However,
black boxes may fail to clarify elementary mechanisms or be detailed enough to realistically
validate the model. Top down approach starts with the big picture, then breaks down from there
into smaller segments.[1]
A bottom-up approach is the piecing together of systems to give rise to more complex systems,
thus making the original systems sub-systems of the emergent system.In a bottom-up approach
the individual base elements of the system are first specified in great detail. These elements are
then linked together to form larger subsystems, which then in turn are linked, sometimes in many
levels, until a complete top-level system is formed. This strategy often resembles a "seed" model,
by which the beginnings are small but eventually grow in complexity and completeness.

8
9

However, "organic strategies" may result in a tangle of elements and subsystems, developed in
isolation and subject to local optimization as opposed to meeting a global purpose.

A good system design is to organize the program modules in such a way that are easy to
develop and change. Structured design techniques help developers to deal with the size and
complexity of programs. Analysts create instructions for the developers about how code should
be written and how pieces of code should fit together to form a program.
Software Engineering is the process of designing, building, testing, and maintaining software.
The goal of software engineering is to create software that is reliable, efficient, and easy to
maintain. System design is a critical component of software engineering and involves making
decisions about the architecture, components, modules, interfaces, and data for a software
system.
System Design Strategy refers to the approach that is taken to design a software system.
There are several strategies that can be used to design software systems, including the
following:
1. Top-Down Design: This strategy starts with a high-level view of the system and gradually
breaks it down into smaller, more manageable components.
2. Bottom-Up Design: This strategy starts with individual components and builds the system
up, piece by piece.
3. Iterative Design: This strategy involves designing and implementing the system in stages,
with each stage building on the results of the previous stage.
4. Incremental Design: This strategy involves designing and implementing a small part of the
system at a time, adding more functionality with each iteration.
5. Agile Design: This strategy involves a flexible, iterative approach to design, where
requirements and design evolve through collaboration between self-organizing and cross-
functional teams.

here are many strategies or techniques for performing system design. They are:
 Bottom-up approach:
The design starts with the lowest level components and subsystems. By using these
components, the next immediate higher-level components and subsystems are created or
composed. The process is continued till all the components and subsystems are composed
into a single component, which is considered as the complete system. The amount of
abstraction grows high as the design moves to more high levels.
By using the basic information existing system, when a new system needs to be created, the
bottom-up strategy suits the purpose.

9
10

Advantages:
 The economics can result when general solutions can be reused.
 It can be used to hide the low-level details of implementation and be merged with the top-
down technique.
Disadvantages:
 It is not so closely related to the structure of the problem.
 High-quality bottom-up solutions are very hard to construct.
 It leads to the proliferation of ‘potentially useful’ functions rather than the most appropriate
ones.
Top-down approach: Each system is divided into several subsystems and components. Each
of the subsystems is further divided into a set of subsystems and components. This process of
division facilitates forming a system hierarchy structure. The complete software system is
considered a single entity and in relation to the characteristics, the system is split into sub-
systems and components. The same is done with each of the sub-systems.
This process is continued until the lowest level of the system is reached. The design is started
initially by defining the system as a whole and then keeps on adding definitions of the
subsystems and components. When all the definitions are combined together, it turns out to be
a complete system.
For the solutions of the software that need to be developed from the ground level, a top-down
design best suits the purpose.

10
11

Advantages:
 The main advantage of the top-down approach is that its strong focus on requirements helps
to make a design responsive according to its requirements.
Disadvantages:
 Project and system boundaries tend to be application specification-oriented. Thus it is more
likely that the advantages of component reuse will be missed.
 The system is likely to miss, the benefits of a well-structured, simple architecture.
 Hybrid Design:
It is a combination of both top-down and bottom-up design strategies. In this, we can reuse
the modules.
Advantages of using a System Design Strategy:
1. Improved quality: A well-designed system can improve the overall quality of the software,
as it provides a clear and organized structure for the software.
2. Ease of maintenance: A well-designed system can make it easier to maintain and update the
software, as the design provides a clear and organized structure for the software.
3. Improved efficiency: A well-designed system can make the software more efficient, as it
provides a clear and organized structure for the software that reduces the complexity of the
code.
4. Better communication: A well-designed system can improve communication between
stakeholders, as it provides a clear and organized structure for the software that makes it
easier for stakeholders to understand and agree on the design of the software.
5. Faster development: A well-designed system can speed up the development process, as it
provides a clear and organized structure for the software that makes it easier for developers
to understand the requirements and implement the software.

Disadvantages of using a System Design Strategy:

1. Time-consuming: Designing a system can be time-consuming, especially for large and


complex systems, as it requires a significant amount of documentation and analysis.

11
12

2. Inflexibility: Once a system has been designed, it can be difficult to make changes to the
design, as the process is often highly structured and documentation-intensive.

User interface is the front-end application view to which user interacts in order to use the
software. The software becomes more popular if its user interface is:
 Attractive
 Simple to use
 Responsive in short time
 Clear to understand
 Consistent on all interface screens
There are two types of User Interface:
1. Command Line Interface: Command Line Interface provides a command prompt, where
the user types the command and feeds to the system. The user needs to remember the syntax
of the command and its use.
2. Graphical User Interface: Graphical User Interface provides the simple interactive
interface to interact with the system. GUI can be a combination of both hardware and
software. Using GUI, user interprets the software.

The analysis and design process of user interface consists of four framework activities.
1. User, task, environmental analysis, and modeling: Initially, the focus is based on the
profile of users who will interact with the system, i.e. understanding, skill and knowledge,
type of user, etc, based on the user’s profile users are made into categories. From each
category requirements are gathered. Based on the requirements developer understand how
to develop the interface. Once all the requirements are gathered a detailed analysis is
conducted. In the analysis part, the tasks that the user performs to establish the goals of the
system are identified, described and elaborated. The analysis of the user environment
focuses on the physical work environment. Among the questions to be asked are:
 Where will the interface be located physically?
 Will the user be sitting, standing, or performing other tasks unrelated to the interface?
 Does the interface hardware accommodate space, light, or noise constraints?
 Are there special human factors considerations driven by environmental factors?
2. Interface Design: The goal of this phase is to define the set of interface objects and actions
i.e. Control mechanisms that enable the user to perform desired tasks. Indicate how these
control mechanisms affect the system. Specify the action sequence of tasks and subtasks,
also called a user scenario. Indicate the state of the system when the user performs a
particular task. Always follow the three golden rules stated by Theo Mandel. Design issues
such as response time, command and action structure, error handling, and help facilities are
considered as the design model is refined. This phase serves as the foundation for the
implementation phase.
3. Interface construction and implementation: The implementation activity begins with the
creation of prototype (model) that enables usage scenarios to be evaluated. As iterative
design process continues a User Interface toolkit that allows the creation of windows,
menus, device interaction, error messages, commands, and many other elements of an
interactive environment can be used for completing the construction of an interface.

12
13

4. Interface Validation: This phase focuses on testing the interface. The interface should be
in such a way that it should be able to perform tasks correctly and it should be able to
handle a variety of tasks. It should achieve all the user’s requirements. It should be easy to
use and easy to learn. Users should accept the interface as a useful one in their work.

Object Oriented Design (OOD) in Software Engineering

Object-Oriented Design: It transforms the analysis model creating using object-oriented


analysis into a design model that serves as a blueprint for software construction. For object-
oriented systems, we can define a design pyramid as shown in the figure.

The four layers of OOD pyramid are:


1. The Subsystem Layer: This layer contains a representation of each of the subsystems that
enable the software to achieve its customer defined requirements and to implement the technical
infrastructure that supports customer requirements.

2. The Class and Object Layer: This layer contains a hierarchy of classes, which enable the
system to be created using generalizations and increasingly more targeted specializations. This
layer also represents each object.

3. The Message Layer: This layer contains the design details, which enables each object to
communicate with its collaborators. This laver establishes the internal and external interfaces for
the system.

4. The Responsibilities Layer: This layer contains the data structure and algorithmic design for
13
14

all operations and attributes for each object.

The OOD pyramid focuses on the design of a specific system. Note that another layer of design
exists, which forms the foundation on which the pyramid rests.

The foundation layer focuses on the design of domain objects, which play a key role in building
the infrastructure for the object-oriented system by providing support for human/computer
interface activities, task management and data management.

Agile Model

The meaning of Agile is swift or versatile."Agile process model" refers to a software


development approach based on iterative development. Agile methods break tasks into smaller
iterations, or parts do not directly involve long term planning. The project scope and
requirements are laid down at the beginning of the development process. Plans regarding the
number of iterations, the duration and the scope of each iteration are clearly defined in advance.

Each iteration is considered as a short time "frame" in the Agile process model, which typically
lasts from one to four weeks. The division of the entire project into smaller parts helps to
minimize the project risk and to reduce the overall project delivery time requirements. Each
iteration involves a team working through a full software development life cycle including
planning, requirements analysis, design, coding, and testing before a working product is
demonstrated to the client.

14
15

Phases of Agile Model:

Following are the phases in the Agile model are as follows:

1. Requirements gathering
2. Design the requirements
3. Construction/ iteration
4. Testing/ Quality assurance
5. Deployment
6. Feedback

1. Requirements gathering: In this phase, you must define the requirements. You should
explain business opportunities and plan the time and effort needed to build the project. Based on
this information, you can evaluate technical and economic feasibility.

2. Design the requirements: When you have identified the project, work with stakeholders to
define requirements. You can use the user flow diagram or the high-level UML diagram to show
the work of new features and show how it will apply to your existing system.

15
16

3. Construction/ iteration: When the team defines the requirements, the work begins. Designers
and developers start working on their project, which aims to deploy a working product. The
product will undergo various stages of improvement, so it includes simple, minimal
functionality.

4. Testing: In this phase, the Quality Assurance team examines the product's performance and
looks for the bug.

5. Deployment: In this phase, the team issues a product for the user's work environment.

6. Feedback: After releasing the product, the last step is feedback. In this, the team receives
feedback about the product and works through the feedback.

When to use the Agile Model?

o When frequent changes are required.


o When a highly qualified and experienced team is available.
o When a customer is ready to have a meeting with a software team all the time.
o When project size is small.

Advantage(Pros) of Agile Method:

1. Frequent Delivery
2. Face-to-Face Communication with clients.
3. Efficient design and fulfils the business requirement.
4. Anytime changes are acceptable.
5. It reduces total development time.

16
17

Agile Testing Methods:

o Scrum
o Crystal
o Dynamic Software Development Method(DSDM)
o Feature Driven Development(FDD)
o Lean Software Development
o eXtreme Programming(XP)

Scrum

SCRUM is an agile development process focused primarily on ways to manage tasks in team-
based development conditions.

There are three roles in it, and their responsibilities are:

o Scrum Master: The scrum can set up the master team, arrange the meeting and remove
obstacles for the process
o Product owner: The product owner makes the product backlog, prioritizes the delay and
is responsible for the distribution of functionality on each repetition.
o Scrum Team: The team manages its work and organizes the work to complete the sprint
or cycle.

Scrum is the type of Agile framework. It is a framework within which people can address
complex adaptive problem while productivity and creativity of delivering product is at highest
possible values. Scrum uses Iterative process. Silent features of Scrum are:
 Scrum is light-weighted framework
 Scrum emphasizes self-organization
 Scrum is simple to understand
 Scrum framework help the team to work together

17
18

Lifecycle of Scrum:

Sprint: A Sprint is a time box of one month or less. A new Sprint starts immediately after the
completion of the previous Sprint. Release: When the product is completed, it goes to the
Release stage. Sprint Review: If the product still has some non-achievable features, it will be
checked in this stage and then passed to the Sprint Retrospective stage.
Sprint Retrospective: In this stage quality or status of the product is checked.
Product Backlog: According to the prioritize features the product is organized.
Sprint Backlog: Sprint Backlog is divided into two parts Product assigned features to sprint
and Sprint planning meeting.

Advantage of using Scrum framework:


 Scrum framework is fast moving and money efficient.
 Scrum framework works by dividing the large product into small sub-products. It’s like a
divide and conquer strategy
 In Scrum customer satisfaction is very important.
 Scrum is adaptive in nature because it have short sprint.
 As Scrum framework rely on constant feedback therefore the quality of product increases
in less amount of time
Disadvantage of using Scrum framework:
 Scrum framework do not allow changes into their sprint.

18
19

 Scrum framework is not fully described model. If you wanna adopt it you need to fill in the
framework with your own details like Extreme Programming(XP), Kanban, DSDM.
 It can be difficult for the Scrum to plan, structure and organize a project that lacks a clear
definition.
 The daily Scrum meetings and frequent reviews require substantial resources.

eXtreme Programming(XP)

This type of methodology is used when customers are constantly changing demands or
requirements, or when they are not sure about the system's performance.Extreme programming
(XP) is one of the most important software development frameworks of Agile models. It is
used to improve software quality and responsiveness to customer requirements.Some of the
good practices that have been recognized in the extreme programming model and suggested to
maximize their use are given below:

 Code Review: Code review detects and corrects errors efficiently. It suggests pair
programming as coding and reviewing of written code carried out by a pair of programmers
who switch their work between them every hour.
 Testing: Testing code helps to remove errors and improves its reliability. XP suggests test-
driven development (TDD) to continually write and execute test cases. In the TDD
approach, test cases are written even before any code is written.
 Incremental development: Incremental development is very good because customer
feedback is gained and based on this development team comes up with new increments
every few days after each iteration.
 Simplicity: Simplicity makes it easier to develop good-quality code as well as to test and
debug it.
 Design: Good quality design is important to develop good quality software. So, everybody
should design daily.
 Integration testing: It helps to identify bugs at the interfaces of different functionalities.
Extreme programming suggests that the developers should achieve continuous integration
by building and performing integration testing several times a day.

Basic principles of Extreme programming


XP is based on the frequent iteration through which the developers implement User Stories.
User stories are simple and informal statements of the customer about the functionalities
needed. A User Story is a conventional description by the user of a feature of the required
system. It does not mention finer details such as the different scenarios that can occur. Based
on User stories, the project team proposes Metaphors. Metaphors are a common vision of how
the system would work. The development team may decide to build a Spike for some features.
A Spike is a very simple program that is constructed to explore the suitability of a solution
being proposed. It can be considered similar to a prototype. Some of the basic activities that
are followed during software development by using the XP model are given below:
 Coding: The concept of coding which is used in the XP model is slightly different from
traditional coding. Here, the coding activity includes drawing diagrams (modeling) that will

19
20

be transformed into code, scripting a web-based system, and choosing among several
alternative solutions.
 Testing: The XP model gives high importance to testing and considers it to be the primary
factor in developing fault-free software.
 Listening: The developers need to carefully listen to the customers if they have to develop
good quality software. Sometimes programmers may not have the depth knowledge of the
system to be developed. So, the programmers should understand properly the functionality
of the system and they have to listen to the customers.
 Designing: Without a proper design, a system implementation becomes too complex, and
very difficult to understand the solution, thus making maintenance expensive. A good
design results elimination of complex dependencies within a system. So, effective use of
suitable design is emphasized.
 Feedback: One of the most important aspects of the XP model is to gain feedback to
understand the exact customer needs. Frequent contact with the customer makes the
development effective.
 Simplicity: The main principle of the XP model is to develop a simple system that will
work efficiently in the present time, rather than trying to build something that would take
time and may never be used. It focuses on some specific features that are immediately
needed, rather than engaging time and effort on speculations of future requirements.
 Pair Programming: XP encourages pair programming where two developers work
together at the same workstation. This approach helps in knowledge sharing, reduces
errors, and improves code quality.
 Continuous Integration: In XP, developers integrate their code into a shared repository
several times a day. This helps to detect and resolve integration issues early on in the
development process.
 Refactoring: XP encourages refactoring, which is the process of restructuring existing
code to make it more efficient and maintainable. Refactoring helps to keep the codebase
clean, organized, and easy to understand.
 Collective Code Ownership: In XP, there is no individual ownership of code. Instead, the
entire team is responsible for the codebase. This approach ensures that all team members
have a sense of ownership and responsibility towards the code.
 Planning Game: XP follows a planning game, where the customer and the development
team collaborate to prioritize and plan development tasks. This approach helps to ensure
that the team is working on the most important features and delivers value to the customer.
 On-site Customer: XP requires an on-site customer who works closely with the
development team throughout the project. This approach helps to ensure that the
customer’s needs are understood and met, and also facilitates communication and feedback.

Applications of Extreme Programming (XP)


Some of the projects that are suitable to develop using the XP model are given below:
 Small projects: The XP model is very useful in small projects consisting of small teams as
face-to-face meeting is easier to achieve.

20
21

 Projects involving new technology or Research projects: This type of project faces
changing requirements rapidly and technical problems. So XP model is used to complete
this type of project.
 Web development projects: The XP model is well-suited for web development projects as
the development process is iterative and requires frequent testing to ensure the system
meets the requirements.
 Collaborative projects: The XP model is useful for collaborative projects that require
close collaboration between the development team and the customer.
 Projects with tight deadlines: The XP model can be used in projects that have a tight
deadline, as it emphasizes simplicity and iterative development.
 Projects with rapidly changing requirements: The XP model is designed to handle
rapidly changing requirements, making it suitable for projects where requirements may
change frequently.
 Projects where quality is a high priority: The XP model places a strong emphasis on
testing and quality assurance, making it a suitable approach for projects where quality is a
high priority.
Extreme Programming (XP) is an Agile software development methodology that focuses on
delivering high-quality software through frequent and continuous feedback, collaboration, and
adaptation. XP emphasizes a close working relationship between the development team, the
customer, and stakeholders, with an emphasis on rapid, iterative development and deployment.
Agile development approaches evolved in the 1990s as a reaction to documentation and
bureaucracy-based processes, particularly the waterfall approach. Agile approaches are based
on some common principles, some of which are:
1. Working software is the key measure of progress in a project.
2. For progress in a project, therefore software should be developed and delivered rapidly in
small increments.
3. Even late changes in the requirements should be entertained.
4. Face-to-face communication is preferred over documentation.
5. Continuous feedback and involvement of customers are necessary for developing good-
quality software.
6. A simple design that involves and improves with time is a better approach than doing an
elaborate design up front for handling all possible scenarios.
7. The delivery dates are decided by empowered teams of talented individuals.
Extreme programming is one of the most popular and well-known approaches in the family of
agile methods. an XP project starts with user stories which are short descriptions of what
scenarios the customers and users would like the system to support. Each story is written on a
separate card, so they can be flexibly grouped.
XP, and other agile methods, are suitable for situations where the volume and space of
requirements change are high and where requirement risks are considerable.

21
22

Crystal:

Crystal methods in Agile Development/Framework: The crystal method is an agile


framework that is considered a lightweight or agile methodology that focuses on individuals
and their interactions. The methods are color-coded to significant risk to human life. It is
mainly for short-term projects by a team of developers working out of a single workspace.
Among a few Agile Software Development Life Cycle (SDLC) models crystal is considered as
one of the Agile SDLC models.
Two core beliefs of the Crystal method:
 Find your own way and methods to optimize workflow.
 Make use of unique methods to make the project unique and dynamic.
Let’s know about the history of the Crystal Method: The crystal method was developed by
an American scientist named Alistair Cockburn who worked at IBM. He decided not to focus
on step-by-step developmental strategies, but to develop team collaboration and
communication. Some of the traits of Cockburn’s Crystal method were:
 Human-powered i.e. the project should be flexible and people involved in preferred work.
 Adaptive i.e. approaches don’t have any fixed tools but can be changed anytime to meet the
team’s specific needs.
 Ultra-light i.e. this methodology doesn’t require much documentation.

Properties of Crystal Agile Framework:


1. Frequent Delivery- It allows you regularly deliver the products and test code to real users.
Without this, you might build a product that nobody needs.
2. Reflective Improvement- No matter how good you have done or how bad you have done.
Since there are always areas where the product can be improved, so the teams can
implement to improve their future practices.
3. Osmotic Communication- Alistair stated that having the teams in the same physical phase
is very much important as it allows information to flow in between members of a team as in
osmosis.
4. Personal Safety- There are no bad suggestions in a crystal team, team members should feel
safe to discuss ideas openly without any fear.
5. Focus- Each member of the team knows exactly what to do, which enables them to focus
their attention. This boosts team interaction and works towards the same goal.
6. Easy access to expert users- It enhances team communication with users and gets regular
feedback from real users.
7. Technical tooling- It contains very specific technical tools which to be used by the
software development team during testing, management, and configuration. These tools
make it enable the team to identify any error within less time.
8. Continuous learning – The framework emphasizes on continuous learning, enabling team
members to acquire new skills and knowledge, and apply them in their work.

22
23

9. Teamwork – The framework stresses on the importance of teamwork, promoting


collaboration, and mutual support among team members.
10. Timeboxing – The framework adopts timeboxing to manage project deadlines, ensuring
that the team delivers within set timelines.
11. Incremental development – The framework promotes incremental development, enabling
the team to deliver working software frequently, and adapt to changes as they arise.
12. Automated testing – The framework emphasizes on automated testing, enabling the team
to detect and fix bugs early, reducing the cost of fixing errors at later stages.
13. Customer involvement – The framework emphasizes on involving customers in the
development process, promoting customer satisfaction, and delivering products that meet
their needs.
14. Leadership – The framework encourages leadership, enabling team members to take
ownership of their work and make decisions that contribute to the success of the project.

How does Crystal function?


Till now, we got to know that crystal is a family of various developmental approaches, and it is
not a group of prescribed developmental tools and methods. In the beginning, the approach is
set by considering the business requirements and the needs of the project. Various
methodologies in the Crystal family also known as weights of the Crystal approach are
represented by different colors of the spectrum.
Crystal family consists of many variants like Crystal Clear, Crystal Yellow, Crystal Red,
Crystal Sapphire, Crystal Red, Crystal Orange Web, and Crystal Diamond.
1. Crystal Clear- The team consists of only 1-6 members that is suitable for short-term
projects where members work out in a single workspace.
2. Crystal Yellow- It has a small team size of 7-20 members, where feedback is taken from
Real Users. This variant involves automated testing which resolves bugs faster and reduces
the use of too much documentation.
3. Crystal Orange- It has a team size of 21-40 members, where the team is split according to
their functional skills. Here the project generally lasts for 1-2 years and the release is
required every 3 to 4 months.
4. Crystal Orange Web- It has also a team size of 21-40 members were the projects that have
a continually evolving code base that is being used by the public. It is also similar to
Crystal Orange but here they do not deal with a single project but a series of initiatives that
required programming.
5. Crystal Red- The software development is led by 40-80 members where the teams can be
formed and divided according to requirements.
6. Crystal Maroon- It involves large-sized projects where the team size is 80-200 members
and where methods are different and as per the requirement of the software.
7. Crystal Diamond & Sapphire- This variant is used in large projects where there is a
potential risk to human life.

23
24

The below figure illustrates about crystal team:-

Benefits of using the Crystal Agile Framework :


 Facilitate and enhance team communication and accountability.
 The adaptive approach lets the team respond well to the demanding requirements.
 Allows team to work with the one they see as the most effective.
 Teams talk directly with each other, which reduces management overhead.
 Faster delivery – The framework enables the team to deliver working software faster,
which can help gain a competitive advantage in the market.
 Higher quality – The framework emphasizes on quality, enabling the team to detect and
fix defects early in the development process, resulting in a higher quality product.
 Improved customer satisfaction – The framework promotes customer involvement,
enabling the team to deliver products that meet customer needs, resulting in higher
customer satisfaction.
 Increased productivity – The framework enables the team to focus on delivering the
highest value features, which can increase productivity and reduce waste.
 Flexibility – The framework is highly adaptable, enabling the team to adjust to changing
requirements, and make decisions based on real-time feedback.
 Empowerment – The framework promotes empowerment, enabling team members to take
ownership of their work, and make decisions that contribute to the success of the project.
 Reduced risk – The framework promotes risk management, enabling the team to identify
and mitigate potential risks early in the development process, reducing the likelihood of
project failure.

Drawbacks of using the Crystal Agile Framework :


 A lack of pre-defined plans may lead to confusion and loss of focus.
 Lack of structure may slow down inexperienced teams.
 Not clear on how a remote team can share knowledge informally.
 Lack of predictability – The framework’s emphasis on adaptability and flexibility may
result in a lack of predictability, making it difficult to plan and estimate project timelines
and budgets.

24
25

 Lack of documentation – The framework’s emphasis on communication and collaboration


may result in a lack of documentation, making it difficult to track progress and maintain a
record of decisions.
 Limited scalability – The framework may not be suitable for large or complex projects, as
the lack of structure and predefined plans may make it difficult to manage teams at scale.
 Dependence on team expertise – The framework relies heavily on the expertise and skills
of the development team, which may not be suitable for teams with limited experience or
knowledge.
 Lack of clarity on roles and responsibilities – The framework’s emphasis on self-
organizing teams may result in a lack of clarity on roles and responsibilities, leading to
confusion and a loss of focus.
 Inability to handle regulatory requirements – The framework may not be suitable for
projects with strict regulatory requirements, as the lack of documentation and structure may
not meet compliance standards.
 Potential for informal knowledge sharing – The framework’s emphasis on osmotic
communication may result in informal knowledge sharing, which may be difficult to track
and monitor for accuracy and completeness.

The Crystal Method is expandable. It may be used by small teams or large teams to work on
simple or complex objects. It places importance on developmental skills and interactions which
in turn encourage the exchange of ideas. It is also beneficial for the clients as it delivers the
most important components of the product first. But on the other hand, the Crystal Method
does not plan based on the requirements of the projects.

There are three concepts of this method-

1. Chartering: Multi activities are involved in this phase such as making a development
team, performing feasibility analysis, developing plans, etc.
2. Cyclic delivery: under this, two more cycles consist, these are:

A. Team updates the release plan.


B. Integrated product delivers to the users.
Wrap up: According to the user environment, this phase performs deployment, post-
deployment.

Dynamic Software Development Method(DSDM):

DSDM is a rapid application development strategy for software development and gives an agile
project distribution structure. The essential features of DSDM are that users must be actively
connected, and teams have been given the right to make decisions. The techniques used in
DSDM are:

25
26

1. Time Boxing
2. MoSCoW Rules
3. Prototyping

The DSDM project contains seven stages:

1. Pre-project
2. Feasibility Study
3. Business Study
4. Functional Model Iteration
5. Design and build Iteration
6. Implementation
7. Post-project

The Dynamic Systems Development technique (DSDM) is an associate degree agile code
development approach that provides a framework for building and maintaining systems. The
DSDM philosophy is borrowed from a modified version of the sociologist principle—80 % of
An application is often delivered in twenty percent of the time it’d desire deliver the entire (100
percent) application.
DSDM is An iterative code method within which every iteration follows the 80% rule that
simply enough work is needed for every increment to facilitate movement to the following
increment. The remaining detail is often completed later once a lot of business necessities are
noted or changes are requested and accommodated.
The DSDM tool (www.dsdm.org) could be a worldwide cluster of member companies that put
together tackle the role of “keeper” of the strategy. The pool has outlined AN Agile
Development Model, known as the DSDM life cycle that defines 3 different unvarying cycles,
preceded by 2 further life cycle activities:
1. Feasibility Study:
It establishes the essential business necessities and constraints related to the applying to be
designed then assesses whether or not the application could be a viable candidate for the
DSDM method.
2. Business Study:
It establishes the use and knowledge necessities that may permit the applying to supply
business value; additionally, it is the essential application design and identifies the
maintainability necessities for the applying.
3. Functional Model Iteration:
It produces a collection of progressive prototypes that demonstrate practicality for the
client.
(Note: All DSDM prototypes are supposed to evolve into the deliverable application.)
The intent throughout this unvarying cycle is to collect further necessities by eliciting
feedback from users as they exercise the paradigm.

26
27

4. Design and Build Iteration:


It revisits prototypes designed throughout useful model iteration to make sure that
everyone has been designed during a manner that may alter it to supply operational
business price for finish users. In some cases, useful model iteration and style and build
iteration occur at the same time.
5. Implementation:
It places the newest code increment (an “operationalized” prototype) into the
operational surroundings. It ought to be noted that:
1. (a) the increment might not 100% complete or,
2. (b) changes are also requested because the increment is placed into place. In
either case, DSDM development work continues by returning to the useful
model iteration activity.
Below diagram describe the DSDM life cycle:

27
28

DSDM is often combined with XP to supply a mixed approach that defines a solid method
model (the DSDM life cycle) with the barmy and bolt practices (XP) that are needed to
create code increments. additionally, the ASD ideas of collaboration and self-organizing
groups are often tailored to a combined method model.

Feature Driven Development(FDD):

FDD stands for Feature-Driven Development. It is an agile iterative and incremental model
that focuses on progressing the features of the developing software. The main motive of
feature-driven development is to provide timely updated and working software to the client. In
FDD, reporting and progress tracking is necessary at all levels.

History
FDD was first applied in the year 1997 on a real-world application by Jeff De Luca for large
software development with specific needs of 15-month and 50 persons and published as a
discussion in book Java Modeling in Color with UML in the year 1999.
FDD Lifecycle
 Build overall model
 Build feature list
 Plan by feature
 Design by feature
 Build by feature

This method focuses on "Designing and Building" features. In contrast to other smart methods,
FDD describes the small steps of the work that should be obtained separately per function.

Characteristics of FDD
 Short iterative: FDD lifecycle works in simple and short iterations to efficiently finish the
work on time and gives good pace for large projects.

28
29

 Customer focused: This agile practice is totally based on inspection of each feature by
client and then pushed to main build code.
 Structured and feature focused: Initial activities in lifecycle builds the domain model and
features list in the beginning of timeline and more than 70% of efforts are given to last 2
activities.
 Frequent releases: Feature-driven development provides continuous releases of features in
the software and retaining continuous success of the project.
Advantages of FDD
 Reporting at all levels leads to easier progress tracking.
 FDD provides continuous success for larger size of teams and projects.
 Reduction in risks is observed as whole model and design is build in smaller segments.
 FDD provides greater accuracy in cost estimation of the project due to feature
segmentation.
Disadvantages of FDD
 This agile practice is not good for smaller projects.
 There is high dependency on lead programmers, designers and mentors.
 There is lack of documentation which can create an issue afterwards.

29

You might also like