RAJIV GANDHI PROUDYOGIKI VISHWAVIDYALAYA, BHOPAL
New Scheme Based On AICTE Flexible Curricula

CD604 (B) Agile Software Development

CSE-Data Science / Data Science — VI Semester

Unit – V | Agile Software Design and Development

Unit V: Agile Software Design and Development

Agile Software Design and Development focuses on creating software that can evolve as requirements, technology and user needs change. Agile design emphasizes simplicity, feedback, incremental development and continuous improvement.


This unit covers Agile design practices, design principles, refactoring, continuous integration, automated build tools, version control, interaction design, quality assurance, Test Driven Development and pair programming.

Agile Design Practices

Agile design is an iterative approach in which design decisions evolve as the team learns more about requirements and the product. The goal is not to create unnecessary design complexity before it is needed.

Simple Design

Prefer the simplest design that satisfies current requirements while keeping the system understandable.

Incremental Design

Improve and extend the design as new requirements emerge.

Continuous Feedback

Use feedback from users, tests and team members to guide design decisions.

Design for Change

Structure the software so that reasonable future changes can be made without excessive effort.

Role of Design Principles

Design principles provide guidelines for creating software that is understandable, maintainable and adaptable. They help developers make consistent technical decisions.

Single Responsibility

A component should have a focused responsibility.

Low Coupling

Reduce unnecessary dependencies between components.

High Cohesion

Keep closely related responsibilities together.

Encapsulation

Hide implementation details behind clear interfaces.

Simplicity

Avoid unnecessary complexity and speculative features.

Testability

Design components so that their behavior can be verified effectively.

Need and Significance of Refactoring

Refactoring is the disciplined restructuring of existing source code without changing its intended externally observable behavior.

Why Refactor?

  • Remove duplicated code.
  • Improve readability.
  • Reduce complexity.
  • Improve maintainability.
  • Make future changes easier.

Importance in Agile

  • Supports continuous improvement.
  • Controls accumulation of technical debt.
  • Keeps code easier to understand.
  • Supports frequent changes.
  • Improves long-term maintainability.

Refactoring Techniques

Technique Meaning Purpose
Extract Method Move a part of a long method into a separate method. Improve readability and reduce complexity.
Rename Give a variable, method or class a clearer name. Improve understandability.
Extract Class Move a group of related responsibilities into a new class. Improve cohesion and responsibility separation.
Remove Duplication Replace repeated logic with reusable functionality. Reduce maintenance effort.
Move Method Move a method to a class where its responsibility fits better. Improve class organization and cohesion.

Continuous Integration

Continuous Integration (CI) is a development practice in which developers integrate their changes frequently into a shared codebase. Automated builds and tests can be executed to provide rapid feedback about integration problems.

Code Developer changes
Commit Save changes
Build Compile/package
Test Run automated tests
Feedback Identify problems

Advantages of Continuous Integration

  • Detect integration problems early.
  • Provide rapid feedback to developers.
  • Reduce integration surprises.
  • Support frequent software delivery.
  • Encourage automated testing and repeatable builds.

Automated Build Tools

Automated build tools execute repeatable tasks such as compilation, dependency handling, packaging and test execution. They reduce manual effort and make the build process more consistent.

Maven

A build and project-management tool commonly used in Java projects for dependency management, compilation, testing and packaging.

Gradle

A flexible build automation system commonly used for Java, Android and other software projects.

Ant

A Java-based build automation tool that uses build files to define repeatable development tasks.

Build Automation

Automates repetitive activities such as compiling, testing, packaging and generating build artifacts.

Version Control

Version Control is the practice of tracking changes to source code and other project files. It allows teams to collaborate, review changes and recover previous versions when required.

Working Directory
→
Stage
→
Commit
→
Repository
→
Collaboration

Benefits

  • Track code history.
  • Support team collaboration.
  • Review and compare changes.
  • Recover earlier versions.
  • Support branching and merging.

Git

Git is a distributed version control system widely used for tracking source-code changes and supporting collaborative development.

Agile Interaction Design

Agile Interaction Design focuses on designing the interaction between users and software through short cycles of design, implementation, evaluation and feedback.

User Focus

Understand user goals, needs and context before making interaction decisions.

Prototyping

Create lightweight prototypes to explore and communicate possible solutions.

Usability Feedback

Obtain feedback from users and stakeholders to identify interaction problems.

Iterative Improvement

Refine the interaction design based on observations, feedback and changing requirements.

Agility and Quality Assurance

Agile Quality Assurance is integrated throughout development. Quality is treated as a shared responsibility rather than something performed only at the end of the project.

Continuous Testing

Tests are performed regularly as software changes.

Automation

Repetitive tests can be automated to obtain rapid feedback.

Early Defect Detection

Problems are identified closer to the time they are introduced.

Customer Feedback

User and stakeholder feedback contributes to quality improvement.

Definition of Done

Teams use agreed completion criteria to maintain transparency about product quality.

Continuous Improvement

Teams improve both product quality and development practices over time.

Agile Approach to Quality Assurance

Requirement
→
Design
→
Development
→
Testing
→
Feedback
↻
Improvement

Test Driven Development (TDD)

Test Driven Development is an iterative development practice in which developers write a test for desired behavior before implementing the corresponding production code.

RED Write a failing test
→
GREEN Write enough code to pass
→
REFACTOR Improve the code
↻

TDD Cycle

  1. Red: Write a test that expresses the expected behavior and initially fails.
  2. Green: Implement the minimum code needed to make the test pass.
  3. Refactor: Improve the internal structure while keeping the tests passing.

Advantages and Challenges of TDD

Advantages

  • Encourages testable design.
  • Provides rapid feedback.
  • Can detect regressions early.
  • Documents expected behavior through tests.
  • Supports safe refactoring.

Challenges

  • Requires learning and discipline.
  • Writing tests can require additional effort.
  • Poorly designed tests can become difficult to maintain.
  • Teams may need time to adapt to the practice.
  • TDD does not replace other forms of testing.

Pair Programming

Pair programming is an Agile development practice in which two programmers work together on the same task. One programmer may focus on writing code while the other reviews and thinks about the broader solution. The roles can be exchanged regularly.

Driver

Focuses on the immediate implementation and writes or edits the code.

Navigator

Reviews the implementation, considers alternatives and provides continuous feedback.

Pair Programming: Issues and Challenges

Communication

Differences in communication styles can make collaboration difficult.

Personality Differences

Different working preferences may create friction between team members.

Skill Imbalance

Large differences in experience may affect how effectively the pair works together.

Resistance

Some developers may initially prefer working independently.

Coordination

The pair needs to agree on coding, review and role-switching practices.

Remote Collaboration

Distributed teams may need suitable communication and screen-sharing arrangements.

Traditional QA vs Agile QA

Traditional Approach Agile Approach
Testing may occur mainly after development. Testing is integrated throughout development.
Feedback may arrive relatively late. Frequent feedback is encouraged.
Quality activities may be separated by role. Quality is a shared team responsibility.
Manual testing can dominate some workflows. Automation is used where practical.
Large batches may delay defect discovery. Smaller increments support earlier discovery.

Integrated Agile Design & Development Flow

User Need
→
User Story
→
Design
→
TDD
→
Development
→
Refactoring
→
CI
→
QA
→
Feedback

Agile Software Design and Development Case Study

Case Study: Online Shopping Application

Consider an Agile team developing an online shopping application. The team needs to implement product search, shopping cart and order management functionality.


Step 1 – User Story: The team identifies a story describing the customer's need to search products.


Step 2 – Design: The team creates a simple design for the search interaction and supporting components.


Step 3 – TDD: Developers create tests for expected search behavior before implementing the functionality.


Step 4 – Development: The functionality is implemented in small increments.


Step 5 – Refactoring: Developers improve code structure while maintaining passing tests.


Step 6 – Version Control: Changes are committed to the project's version-control repository.


Step 7 – Continuous Integration: The shared codebase is built and automated tests are executed.


Step 8 – QA and Feedback: The team evaluates quality and collects feedback for further improvement.

Quick Revision

Agile Design: Iterative design that evolves according to requirements, feedback and learning.


Refactoring: Improving the internal structure of code without changing its intended external behavior.


Continuous Integration: Frequent integration of code changes with automated build and testing feedback where practical.


Version Control: Systematic tracking and management of changes to project files.


Agile QA: Continuous and collaborative quality assurance throughout development.


TDD: Red → Green → Refactor.


Pair Programming: Two programmers collaboratively work on the same development task with regular role switching.

Important RGPV Exam Questions

Handwritten Notes

Get exam-oriented handwritten notes for CD604(B) Agile Software Development Unit V, including Agile design, refactoring, CI, version control, Agile QA, TDD, pair programming, diagrams and RGPV-focused questions.