Ch.4 – Risk Management 1. What is risk management? Risk Management is concerned with identifying risks affecting project schedule or the quality of the software and creating plans to avoid or minimize their effect on a project. 2. What are the types of risks (in terms of what is affected by them)? • Project risks (affect schedule or resources e.g. loss of an experienced programmer) • Product risks (affect quality or performance of the software e.g. failure of a purchased component) • Business risks (affect the organization developing the software e.g. a competitor launching a new product) 3. What are the stages of the Risk Management Process? • Risk Identification – identify project, product, and business risks • Risk Analysis – assess the likelihood and consequences of the risks • Risk Planning – draw up plans to avoid or minimize the effects of the risks • Risk Monitoring – regularly assess the risk and the plans for risk mitigation and revise them as you learn more about the risk 4. What are the strategies of Risk Planning? • Avoidance Strategies – reduce the probability that the risk will arise (e.g. dealing with defective components) • Minimization Strategies – reduce the impact of the risk on the project or product (e.g. strategy for staff illness) • Contingency Plans – plans to deal with a risk if it arises Ch. 5 – Requirements Engineering 1. What are the activities of the Requirements Engineering Process? • • • • Requirements Elicitation Requirements Analysis Requirements Validation Requirements Management 2. What is the output of the RE process? A system requirements document. 3. Describe the requirements elicitation process. It is a process in which software engineers work with the stakeholders of the system to be developed to find out about the application domain, work activities, the services and system features stakeholders want, and hardware constraints. 4. What are the stages/process activities of requirements elicitation? • Requirements Discovery – involves interacting with stakeholders to discover their requirements • Requirements Classification & Organization – involves grouping related requirements and organizing them into coherent clusters • Requirements Prioritization & Negotiation – involves prioritizing requirements and resolving requirements conflicts • Requirements Specification – involves documenting requirements and inputting them into the next round of the RE process spiral 5. What is ethnography? Ethnography is an observational requirements elicitation technique in which an ethnographer immerses himself in the working environment where the new system will be used in order to understand the social and organizational requirements of the software being developed. 6. What is requirements specification? It is the process of documenting the user and system requirements of a system into a requirements document. 7. What are the ways of writing system requirements specification? • Natural language • Structured natural language • Design description languages • Graphical notations • Mathematical specifications 8. What is the software requirements document? It is the official statement of what is required of the system developers, which includes a definition of user requirements and a specification of the system requirements. 9. What are the requirements validation techniques? • Requirements Reviews – systematic manual analysis of the requirements • Prototyping – using an executable model of the system to check requirements • Test Case Generation – developing tests for requirements to check testability 10. What is requirements management? It is the process of managing changing requirements during the requirements engineering process and system development. CH. 6 – Software Design 1. List and describe the 4 design models. • Data/Class Design – transforms analysis classes into design/implementation classes along with the data structures required to implement the software • Architectural Design – defines the relationship between major structural elements of the software • Interface Design – defines how software elements, hardware elements, and end users communicate • Component-Level Design – transforms structural elements of the software architecture into a procedural description of software components 2. What are some design quality guidelines? - A design should be modular; the software should be logically partitioned into elements or subsystems - A design should lead to components that exhibit independent functional characteristics - A design should lead to interfaces that reduce the complexity of connections between components with the external environment - A design should be represented using a notation that effectively communicates its meaning 3. What are some of the design principles? - The design should be traceable to the analysis model - The design should exhibit uniformity and integration - The design should be structured to accommodate change - The design should be assessed for quality as it is being created, not after it is completed - Testing should be involved from the initial stages of the design 4. What is information hiding? Information hiding involves separating design decisions that are most likely to change from the rest of the system in order to protect other parts of the program from extensive modification if a design decision is changed. 5. What are the benefits of information hiding? • Reduces the likelihood of side effects on a program • Limits the global impact of local design decisions • Leads to encapsulation, which is an element of high quality design • Results in higher quality software 6. What is stepwise refinement? It is a top-down design strategy used for decomposing a system from a high level of abstraction into a more detailed level. 7. What are the 2 qualitative criteria that assess component independence? • Cohesion – an indication of the relative functional strength of a module; a natural extension of the information hiding concept; a cohesive module should ideally just perform a single task; an intra-module concept; strive for high cohesion • Coupling – an indication of the relative interdependence among modules; depends on interface complexity between modules, the pint at which entry or reference is made to a module, and what data passes across the interface; an inter-module concept; strive for lowest possible coupling 8. What is an architectural pattern? It is a stylized description of good design practice, which has been tried and tested in different environments. 9. What is a user interface? It is the front end application to which a user interacts in order to use the software functionalities. The two categories of UI are Command Line Interface and Graphical User Interface. CH. 8 – Software Testing 1. What are failures and faults? • Failure: when there is a deviation of a system’s behavior from its specification (a program/system does not behave as it’s supposed to according to its specification) • Fault/defect: an incorrect step, process, or data definition (faults can lead to failure) 2. Why is software testing important? * It is important because software bugs could be expensive and dangerous as they can cause monetary and human losses, so software testing is important in order to discover bugs early and get rid of them. It also helps identify errors, gaps, or missing requirements in contrary to the actual requirements. 3. What is Verification and Validation (V&V)? V&V is a process of software testing. Verification aims to check that the software meets its stated functional and nonfunctional requirements, and validation is a more general process that aims to ensure that the software meets the customer’s expectations. 4. What is black box testing? It is a testing technique in which the features of the AUT are tested without looking at the internal code structure, implementation details, or knowledge of internal paths of the software. Black box testing is based entirely on requirements and specification as it only focuses on the inputs and outputs of a software system. 5. What are the types of black box testing? • Functional Testing – related to the functional requirements of a system and is done by software testers • Nonfunctional Testing – does not test specific functionality, but rather nonfunctional requirements such as performance, scalability, and usability • Regression Testing – done after code fixes, upgrades, or any other system maintenance to check that the new code has not affected the existing code 6. What is white box testing? It is a testing method in which test cases are derived directly from the internal specification or actual code for the program. 7. What is basis path testing? It is a white box testing method that involves using the source code of a program in order to find every possible executable path. Basis path testing achieves maximum path coverage with the least number of test cases. 8. Why is basis path testing used? Software programs include multiple entry and exit points, so rather than testing each individual point, basis path testing is used in order to reduce redundant tests and achieve maximum test coverage. 9. What is cyclomatic complexity? It is a software metric used to measure the complexity of a program by measuring the number of independent paths in the source code of a program. 10. What are the main differences between black box and white box testing? • Black box testing focuses on the validation of the functional requirements of a program, whereas white box testing validates the internal structure and working of the software code • Black box testing gives an abstraction from the code and focuses on testing the software system behavior, whereas white box testing requires knowledge of the underlying programming language of the software • Black box testing facilitates testing communication amongst modules, whereas white box testing does not facilitate communication amongst modules 11. What are the levels of software testing? • • • • Unit Testing Integration Testing System Testing Acceptance Testing 12. What is unit testing and why is it important? It is a type of software testing in which individual components of a software are tested in order to validate that each unit of the software code performs as expected. Proper unit tests can help fix bugs early in the development cycle while saving both time and money. Unit tests also help with code re-use. 13. What is integration testing and why is it important? It is a type of software testing in which software modules are integrated logically and tested as a group in order to expose defects in the interaction between these modules when they are integrated. Integration testing is necessary to verify that software modules work in unity. 14. What are the types of integration testing? • Big-Bang Approach • Incremental Approach (consists of the Top Down Approach and Bottom Down Approach) 15. Describe the types of integration testing. In the Big Bang Approach, all components of a software are integrated together at once and then tested as whole. In the Incremental Approach, testing is done by joining two or more modules that are logically related, and then incrementally adding other related modules and testing for proper functioning until all modules are joined and tested successfully. 16. What are the Stub and Driver? • Stub: a special purpose program used in top-down incremental approach to stimulate the activity of the missing component in order to test its functionality. It is called by the module under test. Stubs are used when the major module of a program is ready to test, but the sub modules are still not ready. • Driver: a routine used in bottom-up incremental approach that calls a particular component and passes a test case to it. It calls the module to be tested. Drivers are used when the sub modules of a program are ready to test, but the main module is still not ready. 17. What is system testing? It is a level of testing that validates the complete and fully integrated software product in order to evaluate the end-to-end system specifications of the software. 18. What are the types of system testing? • System Function Test: tests the entire system against the functional requirements of the software • System Performance Test: tests the nonfunction requirements of the system, such as the response time. 19. What is acceptance testing? It is a beta testing of a software product performed by the actual end users of the product. It is a type of black box testing. Its purpose is to validate that the requirements of a specification or contract are met as per its delivery. 20. What is regression testing? Regression testing is a type of software testing that re-executes a subset of tests that have already been conducted to ensure that new code changes have not produced unwanted side effects on the existing functionalities. Ch.24 – Quality Management 1. What is software measurement? Software measurement involves deriving a numeric value for an attribute of a software product or process. 2. What is a software metric? It is any type of measurement which relates to a software system, process, or related documentation. 3. What are some uses/purposes of software metrics? • Allow the software and software process to be quantified • Can be used to predict product attributes or to control the software process • Can be used to identify abnormal components 4. What are the types of process metrics? • The time taken for a particular process to be completed (ex. Total time devoted to the process) • The resources required for a particular process (ex. Travel costs) • The number of occurrences of a particular event (ex. The number of defects discovered during code inspection) 5. What are the types/classes of product metrics? • Dynamic Metrics (closely related to software quality attributes): collected by measurements made of a program in execution (help assess efficiency and reliability) • Static Metrics (have an indirect relationship with quality attributes): collected by measurements made of the system representations (help assess complexity, understandability, and maintainability)