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
    • 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
      • path-based testing strategies
        • statement coverage
        • branch coverage
        • condition coverage
        • path coverage (i.e. linear independent path coverage)
      • dataflow testing strategies
        • "definition, use, kill"
    • 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

processes & tools

  • processes
    • phases / "software development lifecycles"(SDLC)
      • requirements
      • design
      • implementation
      • testing
  • 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)
    • 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
  • 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
    • 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)
      -
      • 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)
  • 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