Skip to content
CS-703 (C) · Agile Software Development/Quick Revision Short Notes

Agile Software Development (CS-703 (C)) - Unit 5 Short Notes

How unit 5 is examined

This unit covers how agile teams design, build and check quality; the marks so far sit on refactoring, agile quality assurance and agile architecture, so learn those three first.

Agile design practices

<span style="display:inline-block;padding:.16em .6em;border:1.5px solid currentColor;border-radius:999px;font-size:.68em;font-weight:700;letter-spacing:.06em;text-transform:uppercase;opacity:.75">Low weight</span>

Definition. <mark>Agile architecture is a design that is not fixed up front but grows in small iterations, with the backlog driving each increment and feedback from testing reshaping the design.</mark>

Diagram.

<figure class="ds-fig" style="margin:1.4rem 0;overflow-x:auto"><svg xmlns="http://www.w3.org/2000/svg" id="dsfig-u5-01" viewBox="0 0 467 252" width="467" height="252" role="img" aria-label="Agile architecture. BL = product backlog, DEV = iteration development, TST = automated testing, FB = customer feedback, ARC = emergent architecture"><style>#dsfig-u5-01 .e{stroke:#454C5A;stroke-width:1.4;fill:none}#dsfig-u5-01 .e.hi{stroke:#2340B8;stroke-width:2.6}#dsfig-u5-01 .n{fill:#FFFFFF;stroke:#16181D;stroke-width:1.4}#dsfig-u5-01 .n.hi{fill:#E3E9FC;stroke:#2340B8;stroke-width:2.2}#dsfig-u5-01 .n.rb-b{fill:#16181D;stroke:#16181D}#dsfig-u5-01 .n.rb-r{fill:#BD3227;stroke:#BD3227}#dsfig-u5-01 text{font-family:"JetBrains Mono",ui-monospace,Menlo,Consolas,monospace;font-size:13px}#dsfig-u5-01 .t{fill:#16181D;font-weight:500}#dsfig-u5-01 .t.inv{fill:#FFFFFF;font-weight:700}#dsfig-u5-01 .kd{stroke:#16181D;stroke-width:1.2}#dsfig-u5-01 .dot{fill:#16181D}#dsfig-u5-01 .ann{fill:#2340B8;font-size:11px;font-weight:700}#dsfig-u5-01 .lbl{fill:#6F7787;font-family:system-ui,-apple-system,sans-serif;font-size:12px;font-weight:700}#dsfig-u5-01 .ptr{fill:#2340B8;font-size:12px;font-weight:700}#dsfig-u5-01 .ah{fill:#454C5A}#dsfig-u5-01 .ah.hi{fill:#2340B8}#dsfig-u5-01 .wl rect{fill:#FFFFFF;stroke:#DCE0E7}#dsfig-u5-01 .wl .t{font-size:12px;font-weight:700}#dsfig-u5-01 .wl.hi rect{fill:#2340B8;stroke:#2340B8}#dsfig-u5-01 .wl.hi .t{fill:#FFFFFF}html.dark #dsfig-u5-01 .e{stroke:#B1B7C3}html.dark #dsfig-u5-01 .e.hi{stroke:#8FA3FF}html.dark #dsfig-u5-01 .n{fill:#161920;stroke:#E6E8ED}html.dark #dsfig-u5-01 .n.hi{fill:#1E2748;stroke:#8FA3FF}html.dark #dsfig-u5-01 .n.rb-b{fill:#E6E8ED;stroke:#E6E8ED}html.dark #dsfig-u5-01 .n.rb-r{fill:#FF7E71;stroke:#FF7E71}html.dark #dsfig-u5-01 .t{fill:#E6E8ED}html.dark #dsfig-u5-01 .t.inv{fill:#0F1115}html.dark #dsfig-u5-01 .kd{stroke:#E6E8ED}html.dark #dsfig-u5-01 .dot{fill:#E6E8ED}html.dark #dsfig-u5-01 .ann{fill:#8FA3FF}html.dark #dsfig-u5-01 .lbl{fill:#858D9C}html.dark #dsfig-u5-01 .ptr{fill:#8FA3FF}html.dark #dsfig-u5-01 .ah{fill:#B1B7C3}html.dark #dsfig-u5-01 .ah.hi{fill:#8FA3FF}html.dark #dsfig-u5-01 .wl rect{fill:#161920;stroke:#2A2E37}html.dark #dsfig-u5-01 .wl.hi rect{fill:#8FA3FF;stroke:#8FA3FF}html.dark #dsfig-u5-01 .wl.hi .t{fill:#0F1115}</style><defs><marker id="ah2" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path class="ah" d="M0,1 L9,5 L0,9 z"/></marker><marker id="ahh2" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path class="ah hi" d="M0,1 L9,5 L0,9 z"/></marker></defs><path class="e" d="M59,40 L148,40" marker-end="url(#ah2)"/><path class="e" d="M188,40 L277,40" marker-end="url(#ah2)"/><path class="e" d="M317,40 L406,40" marker-end="url(#ah2)"/><path class="e" d="M408,40 L61,40" marker-end="url(#ah2)"/><path class="e" d="M176.4,59.7 L226.1,192.3" marker-end="url(#ah2)" marker-start="url(#ah2)"/><circle class="n" cx="40" cy="40" r="18"/><text class="t" x="40" y="40" dy=".35em" text-anchor="middle">BL</text><circle class="n" cx="169" cy="40" r="18"/><text class="t" x="169" y="40" dy=".35em" text-anchor="middle">DEV</text><circle class="n" cx="298" cy="40" r="18"/><text class="t" x="298" y="40" dy=".35em" text-anchor="middle">TST</text><circle class="n" cx="427" cy="40" r="18"/><text class="t" x="427" y="40" dy=".35em" text-anchor="middle">FB</text><circle class="n" cx="233.5" cy="212" r="18"/><text class="t" x="233.5" y="212" dy=".35em" text-anchor="middle">ARC</text></svg><figcaption style="font-size:.82em;opacity:.72;margin-top:.45rem">Agile architecture. BL = product backlog, DEV = iteration development, TST = automated testing, FB = customer feedback, ARC = emergent architecture</figcaption></figure>

Key points.

  1. Only enough design is done for the current iteration, so the architecture emerges instead of being planned completely in advance.
  2. Each iteration takes backlog items, develops and tests them, and the customer feedback goes back into the backlog, forming the feedback loop.
  3. Design is kept simple and is continuously improved by refactoring, so the code stays easy to change.
  4. Layers (UI, business logic, data) keep parts independent, so a change in one iteration does not break the others.
  5. The whole team shares the design through metaphors, whiteboard sketches and collective ownership rather than heavy documents.

Asked: [? marks] (Dec 2020) Explain Agile architecture with the help of block diagram.

Role of design Principles

<span style="display:inline-block;padding:.16em .6em;border:1.5px solid currentColor;border-radius:999px;font-size:.68em;font-weight:700;letter-spacing:.06em;text-transform:uppercase;opacity:.75">Not asked since 2022</span>

Definition. Design principles are guidelines that keep code flexible and easy to change, which is what agile needs.

Key points.

  1. SOLID stands for Single responsibility, Open/closed, Liskov substitution, Interface segregation and Dependency inversion.
  2. DRY (Don't Repeat Yourself) means every piece of knowledge lives in one place, so a change is made once.
  3. KISS (Keep It Simple) and YAGNI (You Aren't Gonna Need It) stop the team building features or complexity that are not needed now.
  4. Following them lowers the cost of change and keeps refactoring safe.

Need and significance of Refactoring

<span style="display:inline-block;padding:.16em .6em;border:1.5px solid currentColor;border-radius:999px;font-size:.68em;font-weight:700;letter-spacing:.06em;text-transform:uppercase;opacity:.75">Low weight</span>

Definition. <mark>Refactoring is restructuring existing code to improve its internal structure and readability without changing its external behaviour.</mark>

Key points.

  1. Code smells (duplicate code, long methods, large classes) show where the code has decayed and refactoring is needed.
  2. Steps: make sure tests pass, apply one small refactoring, run the tests again, and repeat, so behaviour stays unchanged.
  3. It reduces technical debt and makes code easier to read, test and maintain.
  4. In agile, requirements keep changing every iteration, so refactoring keeps the design clean and lets the team accommodate change cheaply.
  5. It supports simple design, collective ownership and sustainable pace, the base of XP.

Asked: [7 marks] (Dec 2020) What is meant by refactoring? How refactoring helps in Agile development?

Refactoring Techniques

<span style="display:inline-block;padding:.16em .6em;border:1.5px solid currentColor;border-radius:999px;font-size:.68em;font-weight:700;letter-spacing:.06em;text-transform:uppercase;opacity:.75">Not asked since 2022</span>

Definition. Refactoring techniques are small named code transformations that remove code smells while keeping behaviour the same.

Key points.

  1. Extract Method turns a block of a long method into a separate, well-named method.
  2. Rename Method/Variable gives intention-revealing names so the code explains itself.
  3. Move Method or Extract Class shifts behaviour to the class that owns the data, splitting large classes.
  4. Replace Magic Number with Constant and Remove Duplicate Code make later changes safer.

Continuous Integration

<span style="display:inline-block;padding:.16em .6em;border:1.5px solid currentColor;border-radius:999px;font-size:.68em;font-weight:700;letter-spacing:.06em;text-transform:uppercase;opacity:.75">Not asked since 2022</span>

Definition. Continuous Integration (CI) is the practice of developers merging code into a shared repository many times a day, with each merge verified by an automated build and tests.

Key points.

  1. Every commit triggers a build and the automated test suite on a CI server.
  2. Integration problems are found within minutes, when they are small and cheap to fix.
  3. A broken build is fixed at once, and the team always has a working, releasable version.
  4. Tools such as Jenkins, GitHub Actions and Travis CI run the pipeline.

Automated build tools

<span style="display:inline-block;padding:.16em .6em;border:1.5px solid currentColor;border-radius:999px;font-size:.68em;font-weight:700;letter-spacing:.06em;text-transform:uppercase;opacity:.75">Not asked since 2022</span>

Definition. Automated build tools compile source code, run tests, manage dependencies and package the software by running a single script or command.

Key points.

  1. Examples are Maven, Gradle and Ant for Java, and Make, npm and MSBuild elsewhere.
  2. The build is repeatable, so every developer and the CI server get the same result.
  3. Dependencies are downloaded automatically from a repository, avoiding manual setup errors.
  4. Automation saves time and makes frequent builds and releases practical.

Version control

<span style="display:inline-block;padding:.16em .6em;border:1.5px solid currentColor;border-radius:999px;font-size:.68em;font-weight:700;letter-spacing:.06em;text-transform:uppercase;opacity:.75">Not asked since 2022</span>

Definition. Version control is a system that records every change to files over time, so any earlier version can be recovered and many people can work on the same code.

Key points.

  1. Centralised systems such as SVN use one server, while distributed systems such as Git give each developer a full copy of the history.
  2. Branching and merging let developers work on features in parallel and combine them later.
  3. Commits with messages give a history of who changed what and why, and allow rollback.
  4. It is the base of continuous integration, since CI builds from the repository.

Agility and Quality Assurance: Agile Interaction Design

<span style="display:inline-block;padding:.16em .6em;border:1.5px solid currentColor;border-radius:999px;font-size:.68em;font-weight:700;letter-spacing:.06em;text-transform:uppercase;opacity:.75">Not asked since 2022</span>

Definition. Agile interaction design is designing the user's interaction with the software in small iterations, with users involved throughout, so usability is built in and not added at the end.

Key points.

  1. Designers work one iteration ahead of developers and prepare just enough sketches, wireframes and prototypes.
  2. Real users test prototypes early and their feedback is used in the next iteration.
  3. Designers and developers collaborate closely, using user stories and personas to keep the design user-centred.
  4. This raises usability and quality while avoiding big up-front design.

Agile approach to Quality Assurance

<span style="display:inline-block;padding:.16em .6em;border:1.5px solid currentColor;border-radius:999px;font-size:.68em;font-weight:700;letter-spacing:.06em;text-transform:uppercase;opacity:.75">Low weight</span>

Definition. <mark>In agile, quality is built in continuously by the whole team through testing, integration and feedback in every iteration, and not checked only at the end.</mark>

Key points.

  1. Test Driven Development writes tests first, so each feature is proven by an automated test.
  2. Continuous integration runs all tests on every commit, and code reviews and pair programming catch defects early.
  3. Example: in a shopping-app sprint the team builds the cart, runs its tests daily, shows it to the customer at the sprint review, and fixes the missing discount rule in the next sprint before release.
  4. Short iterations with customer feedback reduce defects and raise customer satisfaction.

Asked: [7 marks] (Dec 2020) Explain with the help of suitable example that how Agile helps to build quality product.

Test Driven Development

<span style="display:inline-block;padding:.16em .6em;border:1.5px solid currentColor;border-radius:999px;font-size:.68em;font-weight:700;letter-spacing:.06em;text-transform:uppercase;opacity:.75">Not asked since 2022</span>

Definition. Test Driven Development (TDD) is a technique where a failing automated test is written before the code, and the code is written only to make it pass.

Key points.

  1. The cycle is Red (write a failing test), Green (write the least code to pass) and Refactor (clean the code).
  2. Tests act as a safety net and as living documentation of the behaviour.
  3. It gives simple design and high test coverage, and defects are found immediately.

Pair programming: Issues and Challenges

<span style="display:inline-block;padding:.16em .6em;border:1.5px solid currentColor;border-radius:999px;font-size:.68em;font-weight:700;letter-spacing:.06em;text-transform:uppercase;opacity:.75">Not asked since 2022</span>

Definition. Pair programming is an XP practice where two programmers work at one workstation, one as driver who types and the other as navigator who reviews.

Key points.

  1. The pair swaps roles often, giving continuous code review and better quality.
  2. It spreads knowledge across the team.
  3. Challenges are personality clashes, unequal skill or pace, and the apparent cost of two people on one task.
  4. Remote teams need screen-sharing tools, and not every task suits pairing.

Last-minute revision

  • Agile architecture is emergent: backlog, develop, test, feedback, repeat.
  • Refactoring changes structure, never behaviour; a code smell signals the need.
  • Refactoring steps: green tests, one small change, retest.
  • SOLID, DRY, KISS and YAGNI are the design principles.
  • CI merges and builds automatically on every commit.
  • Maven and Gradle are build tools; Git is distributed, SVN centralised.
  • TDD cycle is Red, Green, Refactor.
  • Pair programming has a driver and a navigator.
  • Agile QA is built in: TDD, CI, reviews and customer feedback.

Memory hooks

  • "BDTF": Backlog, Develop, Test, Feedback loop of agile architecture.
  • "Red, Green, Refactor" is the TDD traffic light.
  • SOLID + DRY + KISS: solid code, no repeats, keep it simple.
  • Driver types, navigator thinks.

Coverage checklist

  • Agile design practices: Dec 2020 agile architecture diagram.
  • Role of design Principles: no past questions.
  • Need and significance of Refactoring: Dec 2020 refactoring in agile.
  • Refactoring Techniques: no past questions.
  • Continuous Integration: no past questions.
  • Automated build tools: no past questions.
  • Version control: no past questions.
  • Agility and Quality Assurance: Agile Interaction Design: no past questions.
  • Agile approach to Quality Assurance: Dec 2020 agile builds quality product.
  • Test Driven Development: no past questions.
  • Pair programming: Issues and Challenges: no past questions.
Go to where you left off?

Quick Add to Notes

Save questions, your own notes and screenshots into notes filed by unit. It takes a free account.

Create free account

Have an account? Log in