You should know the concepts, terminology, and how to apply them, for
object-oriented programming (OOP)
Unified Modeling Language (UML)
overview of software process, including agile and unified process
overview of software engineering
Terminology
class, object, inheritance, polymorphism, identity, state, behaviour, delegation, abstract class, generic class
static model, dynamic model, types of diagrams,
element, class, object, attribute, operation, association, generalization, aggregation, composition, dependency, message, state, compound state, concurrent regions, transition, event, action, activity, swimlane, package
feasibility, requirements, design, implementation, test, deployment, maintenance, and evolution;
domain model;
actors, use cases, scenarios;
unit tests, test-driven development (TDD), subsystem testing, system testing, acceptance testing;
Systematic, disciplined, documented, reproducible; on time and budget;
Risks: requirements, architecture, change, complexity;
Functional and non-functional requirements.
Team-based: development, planning, communication;
Stakeholders.
Some questions
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?
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?
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?
Test-driven development
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 is regression testing? Why do we perform regression testing?
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?
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?
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?
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?
SE 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?
What is design
Different uses and meanings of the word design
Objectives of the design process
The design cycle
Properties of a good design
Scenario-driven review
Problem of Design is
Problem of Maintenance is
Problem of Understandability, which requires Simplicity.
KISS Principle (Keep It Simple, Stupid!).
Some questions
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 diagrams 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 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?
In design, we are given the requirements, and we develop a design for a system
by breaking the system down into a set of smaller components that collaborate together to perform the work required of the system.
Why do we adopt such an approach to design?
How does our adoption of this approach address the key problem areas for software development:
software requirements, software architecture, change, and complexity?
Explain.
Documenting Design
Background Documentation:
Domain model.
The Problem, Functional Requirments (Use cases, Scenarios, System Operations, Contracts),
Non-Functional Qualities of Interest, Hardware and Software Assumptions, Anticipated Changes.
Design Description: Static, eg Design Class Diagram, and Dynamic, eg Sequence Diagram.
Diagrams accompanied by supporting text.
Design Rationale: Design decisions, issues, alternatives, pros, cons, choice.
Glossary: dictionary of design entities.
Object-Oriented Design
Role of domain model.
Software as a set of collaborating obecjts.
Black-box view: class, responsibility, collaborators (CRC).
Black-box view: class interface, service / method / operator, contracts.
Detailed Design: Collections, Maps, Algorithms, and Libraries.
Design Smells: Rigidity, Fragility, Immobility, Viscosity, Needless Complexity, Needless Repetition, Opacity.
SOILD Principles:
Single Responsibility Principle (SRP),
Open Closed Principle (OCP),
Liskov Substitution principle (LCP),
Interface Segregation Principle (ISP),
Dependency Inversion principle (DIP).
Some questions
Explain the terms: class, object, state, behaviour, (class) interface, encapsulation
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?
What is a class interface? In design, what is the purpose of the class interface? What information should be contained in the class interface?
In detailed design, what information should be included about the internal (private) aspects of a class?
Functional Design
Functional design for business data processing
Modular design: modules and interfaces, cohesion and coupling, encapsulation.
Information hiding.
Partitioning, divide-and-conquer, hierarchy, stepwise refinement.
Some questions
Explain the terms: modularity, (class) interface, cohesion, coupling.
Explain information hiding.
Explain the concept of design for change.
Responsibility-Driven Design
CRC: class, responsibility, collaborators
Responsibility.
Problem of responsibility assignment.
Pattern / principle capturing best practice.
GRASP for closing representation gap, Information Expert, Creator, Control, High Cohesion, Low Coupling.
Some questions
What is a responsibility?
Give a definition of responsibility.
What are the three kinds of responsibility?
What does GRASP stand for?
What information is included in the description of a GRASP pattern?
Describe the Information Expert GRASP pattern.
Describe the Controller GRASP pattern.
Describe the Creator GRASP pattern.
What is the relationship between Jacobson's control object and the GRASP pattern Controller?
What kind of object in Jacobson's robustness analysis is related to the GRASP pattern Information Expert?
Explain the relationship.
Use Case Realization
From system operation to sequence diagram.
Responsibility assignment: Which object should I call to handle this message?
Design Class Diagram (DCD)
DCD relation to domain model, and representation gap.
Some questions
What is use case realization?
What is the input to use case realization?
Why do you need a contract for use case realization?
How are responsibilities used in use case realization?
What is the relationship between Jacobson's control object and the GRASP pattern Controller?
What role do they play in use case realization?
Other
visibility
ownership
Some questions
Explain the concept of visibility in object design.
Why is visibility, or the lack of visibility, a design issue?
Explain the different ways in which visibility can be achieved.
Explain the concept of ownership in object design.
Why is ownership, or the lack of clear ownership, a design issue?
Design Patterns
What is a design pattern?
What template is used to describe a design pattern?
Why are the names of the design patterns important?
Explain the following patterns patterns:
Observer, Iterator, Composite, Proxy, Facade, Strategy.
Give an example of the use of each pattern using words and code segments.
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 do defintions of software architecture emphasize organization and structure;
compoents and connectors; and principles?
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?
Documenting Architecture
Explain Kruchten's 4+1 model for documenting architecture.
Why does the use case model occupy the central "+1" role in Kruchten's approach?
From your design assignments, give examples of the information that would go into each of the 4 models:
logical view, process view, development view (implementation view), physical view (deployment view).
Software Architecture Styles
What is the difference between a design pattern, an architectural pattern, and an architectural style?
What forms the vocabulary of an architectural style?
What is the topology of an architectural style?
What is the relationship between the semantics of an architectural style
and the task of analysing properties of an architecture?
Explain the following kinds of architectures:
data flow, independent parallel components, virtual machines, repositories, and layered.
Architecture Tradeoff Analysis Method
What is ATAM?
What is a utility tree?
Explain the difference between the importance and the risk of a scenario in the ATAM utility tree?
Explain use case scenarios, grwoth scenarios, and exploratory scenarios.
What is a sensitivity point?
What is a tradeoff point?