Describe the four fundamental activities of the software process. 1. Software requirements specification 2. Software development (design + programming) 3. Software verification and validation 4. Software evolution and maintenance How do prototypes benefit software development? Prototypes allow users to interact with a preliminary version of the system, identify areas for improvement, and give feedback. This process can uncover inconsistencies or missing elements in the system requirements, leading to a more refined specification. Additionally, prototypes can be used in design experiments to validate the practicality of proposed solutions. Define the difference between software verification and software validation. Software verification focuses on ensuring the software is being built correctly, often through activities like defect testing, to meet the specified functional and non-functional requirements. Software validation ensures the software fulfills the customer's needs and expectations, which may involve testing the software in real-world scenarios or building prototypes to demonstrate its capabilities. How does the Agile Manifesto prioritize its principles? The Agile Manifesto prioritizes the following: 1. Individuals and interactions over processes and tools 2. Working software over comprehensive documentation 3. Customer collaboration over contract negotiation. Describe the characteristics of Agile methods. Agile methods intertwine specification, design, and implementation. Detailed requirements specifications are minimized in favor of user stories, while design documentation is kept concise and often automatically generated by the development environment. Systems are developed incrementally, with stakeholders closely involved in defining and assessing each increment. Frequent deliveries, typically every 2–4 weeks, enable early user feedback and allow for incorporating changes and new Explain the advantages of pair programming. Pair programming promotes collective ownership and responsibility for the system. Having two developers work together functions as an impromptu review process, enhancing code quality by identifying errors early on. Pair programming encourages refactoring, leading to a cleaner and more maintainable codebase. Knowledge sharing within the team reduces risks associated with individual developers leaving the project. Define test-first development and its benefits. Test first development involves writing tests before writing the corresponding code. This approach leads to a clearer understanding of requirements and interface specifications by implicitly defining them through the tests. Developers gain a deeper understanding of the system's functionality to create effective tests, leading to the early identification and resolution of ambiguities in specifications. Test-first development helps mitigate 'testlag,' a common problem in traditional development where testing lags behind the pace of coding How do Agile methods differ from traditional development approaches? Agile methods focus on responding to change over following a strict plan, emphasizing flexibility and stakeholder involvement throughout the development process. What role does user feedback play in Agile development? Frequent deliveries in Agile development, typically every 2–4 weeks, enable early user feedback, allowing teams to incorporate changes and new requirements based on that feedback. How does pair programming enhance code quality? Pair programming functions as an impromptu review process, allowing two developers to identify errors early on, which enhances overall code quality. What is the significance of knowledge sharing in pair programming? Knowledge sharing within the team reduces risks associated with individual developers leaving the project, ensuring continuity and collective understanding of the codebase. How does test-first development clarify requirements? By writing tests before the corresponding code, test-first development implicitly defines requirements and interface specifications, leading to a clearer understanding of what needs to be built. What problem does test-first development help to mitigate? Test-first development helps mitigate 'testlag,' a common issue in traditional development where testing does not keep pace with coding. Define refactoring in the context of agile methods. Refactoring is the process of improving a program's internal structure without altering its external functionality. It is essential in agile methods to prevent the degradation of software structure due to incremental changes. Explain the importance of continuous refactoring in software development. Continuous refactoring helps maintain code quality and readability, making the software easier to understand, modify, and extend. Describe user stories and their role in Agile development. User stories are concise descriptions of desired functionalities from a user's point of view, used for planning and prioritizing work. How do user stories facilitate the development process in Agile? User stories help break down complex requirements into smaller, manageable units that can be developed iteratively. What is the purpose of dividing user stories into tasks during development? During development, user stories are further divided into tasks, each with estimated effort and resources required for implementation. Describe the key roles in Scrum methodology. Key roles in Scrum include the Development Team, Product Owner, and Scrum Master, each with specific responsibilities in the Scrum process. Define a Sprint in the context of Scrum. A Sprint is a development iteration, usually 2– 4 weeks long, during which a potentially shippable product increment is created. What is a Product Backlog in Scrum? The Product Backlog is a prioritized list of features, requirements, and tasks to be addressed by the development team. Explain the responsibilities of a Product Owner in Scrum. The Product Owner is responsible for defining and prioritizing features in the Product Backlog, ensuring the project aligns with business goals. How does a Scrum Master support the development team? The Scrum Master facilitates the Scrum process, removes impediments for the team, and helps the team use Scrum effectively. List the four essential freedoms of free software. The four essential freedoms of free software include the freedom to run the program, the freedom to study and change the program, the freedom to redistribute copies, and the freedom to distribute modified versions. Describe the four freedoms associated with software. Freedom 0: The freedom to run the program as you wish, for any purpose. Freedom 1: The freedom to study how the program works, and change it to meet your computing needs, requiring access to source code. Freedom 2: The freedom to redistribute copies to aid others. Freedom 3: The freedom to distribute copies of modified versions to others, allowing the community to benefit from your changes, also requiring access to source code. Define project risks in software development. Project risks are those that impact the project's schedule or resources, such as losing a key team member. How do product risks affect software quality? Product risks impact the quality or performance of the software, for example, the failure of a third-party component. Explain business risks in the context of software development. Business risks impact the organization developing or procuring the software, such as a competitor releasing a similar product. Identify the four key factors in effective people management. Consistency: Fair and equitable treatment of all team members. Respect: Acknowledging the value and contributions of each individual. Inclusion: Creating a welcoming environment where everyone feels valued and respected. Honesty: Transparent and open communication. Describe the four key activities in the risk management process. Risk identification: Pinpointing potential project, product, and business risks. Risk analysis: Assessing the likelihood and potential consequences of each risk. Risk planning: Creating plans to mitigate or avoid the identified risks. Risk monitoring: Regularly reviewing and updating risk assessments and mitigation plans as the project progresses. What are legacy systems and why are they costly to maintain? Legacy systems are outdated computing systems that are still in use. They are expensive to maintain due to their outdated technology, lack of support, and the difficulty of integrating them with modern systems. Describe legacy systems and their characteristics. Legacy systems are older software systems that often rely on outdated technologies and lack proper documentation. Explain the challenges associated with maintaining legacy systems. Maintenance is expensive due to factors such as difficulty finding developers with skills in legacy technologies, security vulnerabilities inherent in older software, potential hardware obsolescence, and incompatibility with newer systems and components. Define software restructuring and its purpose. Software restructuring (or refactoring) focuses on improving the internal structure and readability of software without changing its external behavior. It is a preventative measure to reduce the cost of future changes. How does software reengineering differ from software restructuring? Software reengineering aims to modernize legacy systems by modifying their architecture, code, or data structures, while minimizing changes to the system's functionality, some modifications to external behavior are often unavoidable. Identify the three key activities involved in requirements engineering. The three key activities are elicitation and analysis (gathering information from stakeholders), specification (documenting requirements in a standardized format), and validation (ensuring requirements reflect customer needs and expectations). What are the main questions addressed in a feasibility study? A feasibility study should address whether the proposed system aligns with the organization's objectives, if it can be implemented within the budget and timeframe using current technology, and if it can be effectively integrated with existing systems.