Welcome to Aspects of Software Development!

Ever wondered how massive apps like Instagram or TikTok are built? It’s not just one person sitting down and typing code until it’s finished. Creating software is a journey with specific stages, much like building a skyscraper or planning a massive festival. In this chapter, we will look at the Software Development Life Cycle—the roadmap that programmers follow to make sure their software actually works and does what it’s supposed to do.

Don’t worry if some of these terms seem professional or "corporate" at first; we’ll break them down using simple, real-world examples. Let's get started!


1. Analysis: Defining the "What"

Before a single line of code is written, we have to understand the problem we are trying to solve. This is the Analysis phase.

During this stage, developers work closely with the intended users to establish the requirements of the system. Think of this as the "investigation" phase.

Key Activities in Analysis:

  • Defining the problem: What is the specific issue the software needs to fix?
  • Establishing requirements: What features must the software have? (e.g., "The app must allow users to reset their passwords").
  • Creating a data model: Deciding what data needs to be stored and how it relates to other data.
  • Prototyping: Creating a simple, early version of a feature to show the user and get feedback. This is often part of an agile approach, where requirements are clarified through constant interaction.

Analogy: Imagine you are a chef. Before you cook, you need to ask the customer what they are allergic to, what they like, and how hungry they are. If you don't "analyze" their needs first, you might serve a steak to a vegetarian!

Quick Review: Analysis

Goal: Understand the problem and user needs.
Key Term: Requirements (the "must-haves" of the system).
Common Mistake: Skipping this phase! If you don't know what the user wants, the final product will fail.


2. Design: Planning the "How"

Once you know what you need to build, you have to plan how to build it. This is the Design phase.

Key Activities in Design:

  • Planning Data Structures: Deciding whether to use arrays, lists, or records to store the information.
  • Designing Algorithms: Writing out the logic (often in pseudocode or flowcharts) before coding.
  • Modular Structure: Breaking the big program into smaller, manageable chunks called subroutines.
  • User Interface (UI) Design: Planning what the screens, buttons, and menus will look like so they are easy for humans to use.

Did you know? Design is an iterative process. This means you might design something, show a prototype to a user, realize it doesn't work, and go back to redesign it. It's a loop!

Quick Review: Design

Goal: Create a blueprint for the solution.
Key Term: Modular structure (breaking the program into smaller parts).
Takeaway: A good design makes the actual coding much easier and faster.


3. Implementation: The Building Phase

This is where the keyboard clicking finally happens! Implementation is the process of turning your designs and algorithms into actual code and data structures that a computer can process.

Key Concepts in Implementation:

  • Coding: Writing the instructions in a high-level language (like Python, C#, or VB.Net).
  • The Critical Path: This is the part of the project that everything else depends upon. For example, if you are building an online shop, the "payment system" is on the critical path. You can't finish the shop if the payments don't work!
  • Agile/Iterative Approach: Instead of building the whole thing at once, developers often build one small part, test it, and then build the next part.

Memory Aid: Think of "Implementation" as "Construction." The blueprints (Design) are finished, and now the builders are laying the bricks.

Quick Review: Implementation

Goal: Write the code and create the data structures.
Key Term: Critical Path (the most vital parts of the solution that must be finished for the rest to work).


4. Testing: Checking for Errors

No programmer is perfect. Testing is about finding the "bugs" or errors in the code before the real users see them.

To test a program properly, you must use test data. There are three main types you need to know for your exam:

  1. Normal (Typical) Data: Data that the program is expected to handle. (e.g., entering "15" if the program asks for an age).
  2. Boundary Data: Data at the very edge of what is allowed. (e.g., if an age must be 18 to 100, testing "18" and "100" are boundary tests).
  3. Erroneous Data: Data that should be rejected because it is the wrong type or out of range. (e.g., entering "Banana" instead of an age).

Encouragement: Don't worry if your code has errors! Testing isn't about being "bad" at coding; it's a professional step that every single software company uses to ensure quality.

Quick Review: Testing

Goal: Find and fix errors.
Types of Test Data: Normal (expected), Boundary (edges), and Erroneous (invalid).
Takeaway: You must test with all three types to be sure your program is robust!


5. Evaluation: The Final Verdict

The program is finished and tested, but is it actually good? Evaluation is where we judge the final system against specific criteria.

The Three Pillars of Evaluation:

  • Correctness: Does the program actually do what the user asked for in the Analysis phase? Does it give the right answers?
  • Efficiency: Does the program run quickly and use a reasonable amount of memory, or is it slow and clunky?
  • Maintainability: If another programmer looked at your code, could they understand it? Is it modular? Does it have comments? If it’s easy to update or fix later, it has high maintainability.

Analogy: Imagine you bought a new car. Evaluation is checking: Does it drive? (Correctness). Does it save on fuel? (Efficiency). Is it easy for a mechanic to fix? (Maintainability).

Quick Review: Evaluation

Goal: Determine if the system is successful.
Key Criteria: Correctness, Efficiency, and Maintainability.


Summary Checklist

To master this section, make sure you can explain these five steps in order:

1. Analysis: Interaction with users, requirements, and data models.
2. Design: Planning algorithms, UI, and modular structure.
3. Implementation: Writing the code and focusing on the critical path.
4. Testing: Using normal, boundary, and erroneous data to find errors.
5. Evaluation: Checking for correctness, efficiency, and maintainability.