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
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.
- Understand the problem:
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.
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.
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.
Evaluate
- Conduct a thorough review post-testing and operational stages to assess effectiveness and address user feedback.
Document
- Importance of documentation throughout the project includes:
- Feasibility studies, project plans, design documents, testing reports, user manuals, and evaluation reports.
- Importance of documentation throughout the project includes:
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.