Test 2 Review: Topic Checklist
Analysis
General Analysis Activitites
- Identifying objects, associations, attributes, behaviors
- Building analysis object (structural) model
- Modeling interactions between objects (dynamic model)
- Modeling state changes of an object or sybsystem (dynamic model)
- Checking the model against requirements, revising
- Understand that this is an activity happening in the application
domain
Object categories
- Entity objects
- Boundary objects
- Control objects
Identifying Objects, Associations
- During anaylsis, understand how to identify objects from use case and
scenario descriptions
- Understand the techniue of natural language analysis (Abbott's
heuristics)
- Be able to identify objects and categorize them as either entity,
boundary, or control objects
- CRC cards:
- Be able to identify the parts of a CRC card (class, responsibility,
collaborators)
- Understand what CRC cards represent and the context in which they are
used (1 card per class, helps identify classes and
relationships)
- Be able to explain the concept and general process of a CRC
session
- Know what it means for one class to be dependent on
another
Analysis Object Model
- Understand how to build the object model with UML class diagrams, and
be able to build one
- Understand how to denote associations, and what these things
represent when labelling associations:
- Name of an association
- Role names
- multiplicities
- Understand the concept and technique of qualifying an
association on a UML class diagram
- Understand inheritance associations, including the difference between
these activities used to discover inheritance associations:
- Generalization
- Specialization
- Be able to discuss the filling out of the object model, including good
techniques for identifying associations, attributes, and
responsibilities
Dynamic Model: Sequence and State Chart diagrams
- Understand the UML notation for both sequence diagrams and state chart
diagrams
- Given a diagram example, be able to interpret the meaning
- Given a scenario or situation, be able to build a seuence diagram or a
state chart diagram
- Understand the context that both are used for
- Sequence: For notating the communications between objects, for a
specific usage of the system
- State Chart: To map the state changes of an object or a
subsystem
- Understand the good guidelines discussed for building sequence
diagrams, including:
- When they should be used (and for what context)
- general layout, including where to put boundary, control, and entity
objects
- How new ojects should be created (and by which objects)
- Which methods or operations should be allowed to access which
others
- Understand the basic layout and idea behind statechart diagrams, as
well as what they are for
- Understand what a state is
- Understand what a transition is
Class Design Principles
- Understand the principles discussed in class for building
well-designed classes
- Be able to discuss the general goals for good class design, including
the ideas of interface vs. implementation, having a good interface
(communication between builder and user), coupling
- Understand the principles behind building a good class interface.
This includes understanding these terms and how they apply:
- Cohesion
- Completeness
- Convenience
- Clarity
- Consistency
- Be able to discuss good guidelines for encapsulation (separating
interface from implementation), including:
- access levels of members (private data, public methods)
- accessors, mutators, utility functions
- ensuring that a class preserves the integrity of the object at all
times
- Understand the "Law of Demeter" and how it applies to class
design
- Understand the idea of immutable classes, and be able to discuss
their ramifications, both in Java and C++
- Understand what is meant by "unintended side effects" and how to avoid
them
Contracts
- Know the primary types of contracts in a class:
- Invariants
- Preconditions
- Postconditions
- Understand how and why to create contracts
- Understand the context of each, as well as how to specify
- Understand the basic OCL notation for specifying contracts, like on a
UML diagram (or in text documentation)
- Understand the idea behind throwing exceptions, and how this applies
to contracts
Exception Handling
- Understand the concept of exception handling and how this differs from
conventional error checking
- Be able to describe a situation where exception handling would be
approrpiate, and perhaps necessary
- Understand when to use exception handling (vs. conventional
techniues)
Exception handling in Java
- Know the difference between checked exceptions and
unchecked exceptions
- Understand the try , catch , finally syntax and how to use
it
- Understand what it means to "claim" an exception, when you shouldd
do it, and how you do it in Java (keyword throws)
- Understand the throw keyword, and how it differs from
throws, including what it is used for
- Know what happens if an exception is not caught
- Understand what is meant by a stack trace and stack
unwinding
Exceptions in C++
- Understand how C++ exception handling syntax differs from Java
- Know how to "claim" and exception in C++, and also how to throw
one
Testing
- Understand the terms: reliability, failure, error, fault
- Understand the general ways of dealing with errors, and be able to
give examples of each:
- Error Prevention (avoidance)
- Error Detection
- Error Recovery (fault tolerance)
- Understand the theoretical limitations of testing:
- Testing can only show presence of bugs (not their absense)
- Not possible or feasible to run every possible test case on a
non-trivial system
- Understand these testing concepts, be able to give examples:
- Component
- Test case
- Test stub
- Test driver
Black box and white box testing
- Black Box testing: Focuses on I/O behavior
- White Box testing: Focuses on thoroughness of testing, from an
internal standpoint
- Be able to describe the difference between these, and be able to
compare them
- Black box testing techniques -- understand what is meant by:
- Equivalence testing
- Boundary testing
- White box testing techniques -- understand what is meant by:
- Path testing
- State-based testing
- What are the limitations of path testing?
- What is the difficult part of state-based testing?
- What are the problems with black box testing?