Software Engineering Overview and Models
Software Engineering Overview and Models
The classical waterfall model approaches software development as a linear and sequential process, dividing it into distinct phases such as feasibility study, requirements analysis, design, coding and unit testing, integration and system testing, and maintenance . Each phase needs to be completed before the next one starts, making the process easy to understand and manage due to its clear milestones and documentation . The main benefits include its simplicity and structure, making it suitable for smaller projects with stable requirements . However, it has notable drawbacks, such as no feedback path for error correction, difficulty in accommodating changes once a phase is complete, and inefficiencies due to non-overlapping phases .
The iterative waterfall model addresses the limitations of the classical waterfall model by incorporating feedback paths from each phase to its preceding phase, allowing errors detected in later phases to be corrected in previous ones, thus reducing error correction time and effort . However, it introduces new issues such as difficulty in accommodating change requests once the development phase begins and the lack of support for incremental delivery, making customers wait for the entire software to be completed before any version is delivered . Additionally, it does not support overlapping phases or risk handling, and customer interaction is limited, which can lead to mismatches between the developed software and customer needs .
The primary objectives of software engineering include maintainability, correctness, reusability, testability, reliability, portability, and adaptability. Maintainability ensures the software can evolve to meet changing requirements, contributing to longevity and cost-effectiveness . Correctness ensures that the software correctly implements the requirements as specified in the Software Requirements Specification (SRS), contributing to user satisfaction and reducing defects . Reusability allows software modules to be reused in different applications, increasing efficiency and reducing development time . Testability facilitates the establishment of test criteria and the evaluation of the software, improving reliability and reducing errors . Reliability ensures the software can be expected to perform its desired functions over time, increasing user trust . Portability allows the software to be used in different environments, expanding its usability . Adaptability satisfies varying system constraints and user needs, increasing the software's applicability and user satisfaction .
The phase of integration and system testing in the waterfall model ensures that the developed software meets the specified requirements by progressively combining the software modules and testing them as a whole system . During integration, modules are gradually combined into a system and tested for functionality and interaction with each other . System testing follows, verifying the entire software system against the requirements as documented in the Software Requirements Specification (SRS). The system is subjected to different kinds of testing activities: α-testing by the development team, β-testing by friendly customers, and acceptance testing by the customer, to ensure it functions correctly and satisfactorily . This thorough testing process identifies any discrepancies between the software and its specifications, ensuring that delivered software aligns with requirements.
Adaptability as a software engineering objective enhances software usability across different environments and constraints by enabling the software to undergo modifications that satisfy varying system constraints and user needs . This flexibility allows the software to function effectively in diverse environments, accommodating different system configurations, hardware, and user requirements without significant redevelopment costs . An adaptable software product can sustain its performance and utility despite changes in external conditions or stakeholder expectations, thus broadening its applicability and market reach. Ultimately, adaptability contributes to the software's longevity and user satisfaction by facilitating seamless transitions and integrations with evolving technologies and processes.
The Software Requirements Specification (SRS) document plays a critical role in the software development process by serving as a formal agreement between the developers and the customers regarding the software requirements . It ensures both parties have a clear understanding of what the software will deliver, thus minimizing misunderstandings and disputes . Additionally, it provides a basis for designing, coding, and testing the software, ensuring that the final product meets customer needs and aligns with the specified requirements . The significance of the SRS lies in its ability to guide the development phases, facilitate communication among stakeholders, and serve as a reference in case of requirement changes or conflicts .
Testability is critical in evaluating software quality as it refers to the degree to which a software system supports testing activities . It is achieved by facilitating the establishment of test criteria and the evaluation of the software against those criteria, thus ensuring that defects can be identified and corrected efficiently . High testability allows for precise and comprehensive testing processes, which are essential for verifying that the software meets specified requirements and performs effectively under expected conditions . By enhancing the testability of software, organizations can improve reliability and increase user confidence in the software's performance.
The absence of overlapping phases in the classical waterfall model can significantly impact project timelines and costs by extending the total development time and increasing costs due to sequential phase execution . Since each phase must be completed before the next one begins, any delays or issues in one phase can cascade, affecting subsequent phases and thereby extending the overall timeline . Furthermore, the rigid nature of this model means that resources may be underutilized during specific phases, leading to inefficiencies and higher project costs . In environments where adapting to changes or addressing risks during the development process is crucial, the inflexibility of non-overlapping phases can hinder responses, lead to inflated budgets, and delay project delivery, proving less cost-effective compared to models allowing overlap and iteration.
Limited customer interactions in the iterative waterfall model can introduce significant risks such as misunderstandings regarding requirements, leading to a final product that fails to fully meet customer needs . This model typically involves customer interaction at the beginning, during requirement gathering, and at the end, upon software delivery . Any changes in customer needs or market conditions that occur after initial interactions may not be adequately captured and reflected in the evolving product, leading to misalignment with customer expectations . Moreover, without ongoing feedback, developers might miss early indicators of misunderstandings or misrepresented requirements, increasing the likelihood of rework and shifts in project scope and budget. This distance from the customer throughout the development process can result in reduced satisfaction and the potential rejection of the completed software product.
Maintainability in software engineering refers to the ease with which a software system can be modified to correct defects, improve performance, or adapt to a changed environment . It enhances the lifecycle of a software product by ensuring that the software can evolve to meet changing requirements over time, thus extending its useful lifespan and reducing the need for complete redevelopment . By supporting maintainability, organizations can ensure software remains efficient, effective, and relevant, thus preserving their investment and potentially reducing future adaptation costs.