Course: SOFTENG 254
SOFTENG 254: Quality Assurance
This course is, in my opinion, a typical "software engineering" course. The main focus is on "testing" and "processes and tools".
- "software quality assurance"
- software (everything other than hardware)
- quality (contain no bugs, works properly)
- IEEE terminology
- fault
- error
- failure
- IEEE terminology
- assurance (to make sure that quality happens)
testing
- testing
- what are good tests? (increases probability of finding faults)
- how to come up with good tests? (systematically)
- flowgraph
- coverage
- white-box testing strategies
- black-box testing strategies
- equivalence class/partitioning & boundary value analysis
- logic testing
- some considerations
- polymorphism (dynamic binding)
- (multiple) inheritance
- overriding/overloading
- mock testing
- measurement
- attribute ("empirical relationship")
- measurement ("representation condition")
- metric (the mapping from attribute to "numbers and symbols" which have unitis which have "scales")
- scales
- nominal
- ordinal
- interval (fixed spacing)
- ratio (has "true zero")
- absolute (count; is a natural number)
- protocol (e.g. "take off your shoes before measuring height")
- "entity population model" (e.g. "Is this typical or not?")
- software metrics
- size
- e.g. LOC, NCLOC, ES (executable statements), "DSI" (delivered source instructions)
- complexity
- e.g. McCabes CCN (Cyclomatic Complexity Number)
- test quality
- TER (test effectiveness ratio) a.k.a. coverage
- correctness
- viz. #(faults)/product_size
- size
processes & tools
- processes
- phases / "software development lifecycles"(SDLC)
- requirements
- design
- implementation
- testing
- phases / "software development lifecycles"(SDLC)
- adaptive vs. predicative processes
- waterfall
- agile
- XP
- RUP
- Capability maturity model (CMM)
- modelling
- overview
- types of models
- UI models
- architecture models
- data models
- state transition models
- call graphs
- dependency graphs
- dataflow diagrams & etc.
- Domain specific languages (DSL) (e.g. GraphViz)
-
- forward engineering (more->less abstract)
- reverse engineering (less->more abstract)
- re-engineering (reverse->forward)
- round-trip engineering (auto more<->less abstract synchronously)
-
- model instance (describes data itself)
- model (describes structure of data)
- metamodel (describes structure of model)
- types of models
- UI modelling
- screen diagram
- tools, e.g. Eclipse*Java "WindowBuilder"
- data modelling
- "analysis data model" (simplified class diagram of data object classes)
- design model (has implementation considerations)
- tools
- ObjectAid
- Umlet
- overview
- Version control system (VCS)
- what, why
- "delta encoding", "unified diff format"
- centralized VCS vs. distributed VCS
- locking vs. merging: "the 'lost update' problem"
- conflicts
- textual conflicts
- semantic conflicts
- conflicts
- Subversion (svn)
- "VCS best practices"
- one change at a time
- don't break the build
- only the source
- meaningful log message
- communication still essential
- JavaDoc
- ANT build tool
- reflection
- structural (i.e. about data/code)
- behavioural (i.e. about behaviour/environment)
-</p>- introspection
- intercession
-
- dynamic
- static
- metaobject protocols (MOP)
- metaobjects
- metaclasses
- in Java
- "MetaJ"
- generators
- use cases
- class extensions
- remote method calls
- getters/setters
- stubs
- partial evaluation
- Java Emitter Templates (JET)
- JET directive, JET expression, JET scriptlet
- genetator type errors (faults in the generator program or template)
- use cases
- refactoring
- changes how, not what
-
- dead code
- clear simple names
- maintainability
- smells
- long method
- large class
- magic number
- duplicate code
- using Eclipse
- modularity
- seperation of concerns
- coupling & cohesion
- layerd architecture
- to minimize scope, accessibility modifiers