Week 1 SE and Software Process
What is a process? Give some examples of process for domains other than IT and engineering.
Why should a process be systematic, measurable in terms of cost, time, and resources, and documented?
What are the key differences between a small software development assignment, and a software engineering project?
As a developer on a SE project, who would you need to communicate with? Be as inclusive as possible.
Why is it recommended to follow the question - listen - paraphrase - report back - get confirmation process
when communicating?
How are risks handled in the Unified Process?
What are the common risks to a software project?
How do you mitigate risks?
Week 2 Requirements
Why do use cases focus on business goals and the business task of an actor?
Draw a UML class diagram to explain the relationships between actor, goal, use case, and scenarios?
Add main scenario, alternative scenarios, exceptional scenarios, recovery and failure scenarios to your UML class diagram
to explain the relationships between actor, goal, use case, and scenarios?
What is a stakeholder? List some examples of stakeholders.
What is a functional requirement?
What is a non-functional requirement?
Why does a requrement have to be testable?
Week 3: Major Issues in SE
Why are these problem areas for SE: requirments, architecture, change, complexity?
What can go wrong in a software project due to requirments, architecture, change, complexity?
What is the impact or consequences of these things going wrong?
How do we try to prevent these things going wrong? Or lessen their impact?
Week 4: Test-driven development
What is a unit test?
What information do we need to write a unit test?
That is, what SE work must be done before we are in a position to start writing unit tests for a class?
What is test-driven development?
What are the advantages of writing the unit tests for a class C before writing the code for a class C?
What are the advantages of writing a test suite for the requirements before writing the code.
Explain how a test suite can be used as a substitute for uses cases
when coming to agreement with a customer as to what the system should deliver in terms of functionality.
How does test-driven development avoid redundant work in design and coding?
What is refactoring?
How does refactoring support test-driven development?
Why does the software need to be well-structured and well-organized?
Isn't it enough that the code works?
Week 4: Software process
What is a software process?
What does it process?
Who or what perform the steps in the process?
What information is needed during the software process?
What is a stakeholder?
Give some examples of stakeholders.
What concerns do the different stakeholders have?
Explain the differences between linear and iterative software processes?
How do the waterfall model and the spiral model act as baselines for comparing different approaches to software development?
Explain the following terms:
phase, activity, iteration, release, deliverable, milestone.
Suppose that you are doing a small project using code and fix approach.
How do you measure your progress towards completion?
That is, how can you determine a completion date to tell to the customer?
Suppose that you are doing a small project using test-driven development approach.
How do you measure your progress towards completion?
That is, how can you determine a completion date to tell to the customer?
What is agile software development?
What are the advantages and disadvantages of agile software development?
Week 5: Unified Process
What is a risk?
How doe we manage risks?
How is the unified process risk-driven?
Why does the unified process emphasize risks?
Why is the unified process architecture-centric?
How is the unified process use case driven?
Describe the phases and disciplines of the unified process.
What is visual modeling?
Why do UML and unified process emphasize visual modeling?
Why do we need models in software development?
Week 5: Principles
Why and how do people play such a major role in software development?
Explain the terms:
model, abstraction, generality, modularity, incrementality, separation of concerns, rigour, formality.
Describe at least 10 examples of separation of concerns that arise during software development.
What is the most common use of formality in software development?
For everything you have learned so far, how does it relate to the major problem areas for SE: requirments, architecture, change, complexity?
Week 7: Design
Describe the goal of the Design Phase of the software lifecycle?
What documents are produced during the Design Phase?
What do the documents contain? Which UML diagrms do they use? Who reads the documents, and for what purposes do they read the document?
What do we mean by fitness of purpose of a design?
Explain the terms: modularity, (class) interface, cohesion, coupling.
Explain information hiding.
Explain the concept of design for change.
What is issue-driven design? How does it relate to design rationale?
How do they both relate to the design cycle and the major design decisions?
What is a construction plan?
Can you have a construction plan before you have a design?
Is OO development seamless?
Why, or why not?
What is the representation gap?
Following Jacobson's terminology, which kind of objects represent things in the domain model?
Week 7: Software Architecture
Why is software architecture a major issue for software engineering?
What is a software architecture? What does it describe? How is it used? By whom? And for what purpose?
Why are class interfaces so important in software architecture?
How do we perform quality control of a software architecture?
Describe the layered architecture. What are the principles behind a layered architecture?
How does a typical client-server architecture relate to the layered architecture?
How does a typical client-server architecture relate to the domain model in requirements?
Describe the Model-View-Controller architecture.
What are the principles behind the MVC architecture?
How is the Observer design pattern used in MVC?
What is the relationship between a typical client-server architecture and the MVC?
Week 8: Responsibility Driven Design
What is a responsibility?
Give a definition of responsibility.
What are the three kinds of responsibility?
How are responsibilities used in use case realization?
What is the relationship between design for change and the GRASP pattern Protected Variations?
What is the relationship between Jacobson's control object and the GRASP pattern Controller?
What are their relationship to the Controller of MVC?
Week 9: Design Patterns
What is a design pattern?
Why do we give them names?
Describe the following design patterns: Observer, Iterator, Composite, Proxy, Facade, Strategy.
Give an example of the use of each pattern using words and code segments.
Week 10: Testing
What is a unit test?
Define the following terms: error, fault, failure.
What is the difference between a test case and test data?
What are the things that we must describe for a test case?
What is the relationship between requirements (use case, scenario) and test cases?
Discuss "Testing can show the presence of bugs but never their absence."
What are the similarities and differences between functional testing and structural testing?
Explain how you can use unit testing and facades to implement integration testing?
What is regression testing? Why do we perform regression testing?
Explain the difference between system testing and acceptance testing.
Why do we call testing "dynamic verification"?
Explain the difference between verification and validation.
Using the V model for the waterfall lifecycle, explain the connection between the development steps
(requirements, architectural design, detailed design, coding), the steps to create test cases, and
the testing steps (unit testing, integration testing, system testing).
Be clear on when the steps are performed during the lifecycle.
What is debugging? What steps are involved? How do these steps relate to cohesion and coupling?
Define the terms: correctness, reliability, roubustness.
Explain how those terms (correctness, reliability, roubustness) differ from each other?
When you say "My program works!", which term are you referring to: correctness, reliability, roubustness?
Week 12: Structural Testing
What is a control flow graph?
Give two examples of programs and their control flow graphs.
Why is it a directed graph? What does that even mean?
What is coverage? How does coverage depend on a set of test cases? Is more coverage better than less coverage? Why?
Define the following coverage criteria: statement coverage, branch coverage.
Give an example of a program P and a set of test cases T, where T has statement coverage of P but not branch coverage.
Give an example of a program P and a set of test cases T, where T has branch coverage of P but not statement coverage.
What is a path in the control flow graph?
Give an example.
Give an example of a program P and a set of test cases T, where T has (simple) path coverage of P.
What is multi-condition coverage? And why should we care about multi-condition coverage?
Week 13: Functional Testing
What is a function mathematically speaking?
Why is functional testing called black-box testing?
What information do we use to develop functional test cases?
What is boundary value testing?
In boundary value testing, which values do we select in order to perform robustness testing?
What is equivalence partitioning?
What does it "partition"?
What is used for the basis of deciding "equivalence" or not?
Select a method m of a class C in you project where it makes sense to use boundary value testing,
and describe the range of values used by the method and the boundary (or boundaries).
Discuss how you would create test cases for the method using boundary value testing.
Repeat the previous question, this time illustrating an application of equivalence class testing.