Software Development Process Notes

Introduction

  • Software engineering and software development are often used interchangeably.
  • The term "software engineering" was introduced by Margaret Hamilton, who led the creation of NASA's Apollo program flight software in the 1960s.
  • An organized and structured process in software development enhances:
    • User needs satisfaction
    • Budget adherence
    • Timely software delivery
    • Maintenance cost minimization

Software Development Lifecycle (SDLC)

  • The distinct stages in developing a computer system solution are collectively known as the Software Development Lifecycle (SDLC).
  • The transition between these stages is dictated by the Software Development Methodology.
  • Two primary methodologies:
    • Waterfall
    • Agile

Understanding Stakeholders

  • Client: Person commissioning the software project.
  • User: Individual(s) who will actually use the software.

Stages of SDLC

  1. Investigate (Analyse)

    • Understand the problem:
      • Identify software objectives and user needs.
    • Conduct research on similar projects to gather insights.
    • Gather Requirements: Engage both clients and users in discussions to clarify essential features.
    • Assess hardware and software requirements.
    • Perform a feasibility study to evaluate if the issue can be resolved with available resources.
  2. Plan

    • Create a software development plan detailing responsibilities.
    • Establish timelines for project milestones.
    • Define tasks and allocate roles based on team expertise.
    • Budget planning, covering resources and personnel.
  3. Design

    • Diverse approaches present advantages and disadvantages.
    • Top Down Design:
      • Break down the main system into manageable units hierarchically (DECOMPOSITION).
    • Modular Design:
      • Divide into smaller modules, allowing independent development and testing.
      • Benefits include:
      • Reusability of modules across projects.
      • Easier troubleshooting of smaller code segments.
      • Enhanced manageability of the overall system.
    • User Interface Design and Flowcharts:
      • Define user interaction elements and visual representations of system operations.
    • Prototyping: Develop models of the software for user feedback.
    • Algorithm Descriptions and Data Tables: Outline functionalities and data specifications.
    • User-Centered Design: Focuses on the user's needs, emphasizing User Experience (UX) and Universal Design (UD).
      • USER EXPERIENCE: Interaction quality with the software throughout its use.
      • UNIVERSAL DESIGN: Products designed for universal accessibility, usable by all demographics.
      • Adaptive and Assistive Technology: Technologies that aid users with disabilities.
  4. Create

    • Actual coding and testing of the software.
    • Testing during this stage includes:
      • Requirement understanding, planning, design of test cases, and execution.
      • Reporting and resolving defects, along with regression testing.
    • Types of testing conducted:
      • Unit Testing: Isolated testing of individual code components for expected outputs.
      • Integration Testing: Combining components and verifying their interactions.
      • White Box Testing: Testing internal logic and structure using knowledge of the codebase.
      • Functional Testing: Ensuring software meets functional requirements and behaves as expected.
      • System Testing: Validates the entire system against requirements, includes alpha and beta testing phases.
      • Non-functional Testing: Evaluates performance factors such as reliability and security.
      • Acceptance Testing: Conducted by end-users to verify the software meets their needs.
  5. Evaluate

    • Conduct a thorough review post-testing and operational stages to assess effectiveness and address user feedback.
  6. Document

    • Importance of documentation throughout the project includes:
      • Feasibility studies, project plans, design documents, testing reports, user manuals, and evaluation reports.

Agile Software Development Methodology

  • Agile methodology exemplifies flexibility, allowing development in increments (sprints) with regular feedback loops.
  • Pros:
    • Adaptability to changes
    • Speedier delivery
    • Enhanced stakeholder engagement
    • Continuous improvement and risk reduction
  • Cons:
    • Uncertainty in timelines
    • Resource-intensive
    • Heavy reliance on client feedback
    • Challenges in documentation
    • Risk of scope creep

Waterfall Software Development Methodology

  • Waterfall follows a sequential phase completion.
  • Pros:
    • Clear project structure
    • Established requirements and designs up front
    • Predictable timelines and budgets
  • Cons:
    • Lack of flexibility
    • Potential for delayed feedback
    • Errors in requirements may go unnoticed until later stages

Team Roles in Software Development

  • Project Manager: Oversees project feasibility and team supervision, ensuring timely progress.
  • Business Analyst: Bridges client needs and technical requirements; investigates functionalities.
  • Systems Analyst: Investigates system functionalities and creates guides for development.
  • Designer: Creates software specifications and design documentation.
  • Developer: Implements code and documentation.
  • Tester: Plans and conducts software testing, documenting results and issues.