Software Engineering
Learning Objectives

The reading, quizzes, lectures, exams, and labs for this course are all designed around a set of learning objectives:

These learning objectives can be sub-divided into a few basic categories:

Lect/Lab Subject Concept Issue Representation Skill
1 Course Introduction Scope of s/w engr
criticality of methodology
challenges of building S/W
challenges of legacy S/W
why projects fail
2 Basic Project Skills change control
version control
distributed version control
standard build environment
gate keeping
daily/automatic builds
code freeze
feature freeze
reproducability
centralized vs distributed change control
change control trade-offs
goals of build automation
effective meetings
hierarchical workspaces
work partitioning
work scheduling
time management
post mortems
base releases and branches
conflict management
git
3 S/W Process Models s/w specification
s/w planning
s/w construction
s/w deployment
work products
phases, activities, tasks
value of check-lists
choosing the right model
Big Requirements Up-Front
managing concurrency
safe phase overlap
planned iteration
waterfall model
incremental model
spiral model
4 Requirements stake holder
types of requirements
requirements vs specifications
clarity
consistency
testability
traceability
criticality of requirements
costs of early mistakes
requirements stability
requirements difficulties
scope creep
surveys vs interviews
requirement specification
reqts elicitation
reqts validation
reqts prioritization
5 Users, Roles & Use Cases user roles
scenario
use case (vs specification)
UML
understanding users/needs
User Story Cards
UML use case diagram
UML activity diagram
UML state diagrams
user characterization
scenario development
task analysis
6 System Models & Modeling system views
descriptive vs analytical models
queuing models
markov models
discrete event simulation
reasons to model
reasons to prototype
agile modeling principles
model life span
choice of model type
choice of model representation
UML component diagram
UML deployment diagram
component diagram
deployment diagram
mathematical models
U/I prototypes
mechanism prototypes
proof of concept
7 Principles of Architecture hierarchies of design
architecture (vs design)
modularity
information hiding
cohesion
complexity/simplicity
elegance
testability
extensibility
portability
elements of good design
appropriate abstraction
criticality of interfaces
interface stability
mechanism/policy separation
anti-architectural forces
managing complexity
8 Evolving an Architecture nature of design process
intuitive objects
anticipating change
considerations in architecture
why design is difficult
architectural diagrams
designing for change
solving hard problems
domain based objects
top-down design
bottom-up design
evaluating an architecture
9 Quality & Quality Assurance software configuration management
dimensions of quality
Q/A roles & activities
process assurance
Engineering Q/A processes
Pareto Principle (defects)
testing vs Q/A
costs of defects
defect amplification
efficacy of Q/A techniques
when to do Q/A
defect removal techniques
10 Formal Reviews walk-throughts
efficacy of reviews
relative costs of approaches
problems & solutions
range of benefits
vs. pair programming
reviews
review roles
review prep
review activities
review reports
11 User Interface Design Content Architecture
U/I principles
U/I challenges
examples: game usability
web UIs vs GUIs
principles of CLI design
usability testing
12 Component and Class Designs component
specifications
class associations
class dependencies
packages
benefits of OO-design
object abstraction
class interface design
reasons to define classes
Liskov Substitution Principle
Dependency Inversion Principle
Release/Reuse Equivalency Principle
Common Closure Principle
refactoring (vs up-front design)
class diagrams
package diagrams
object diagrams
OO-design
classes in non-OO-lanaguages
13 Routine and Algorithm Designs macros & in-lines
reasons to define routines
routine design principles
appropriate macro use
routine names
routine length
defining parameters
functions vs procedures
pseudo-code
UML swim-lane diagrams
UML state diagrams
UML sequence diagrams
Table Driven code
developing routine design
program into your language
14 Design Patterns concurrency patterns
arch: pipe/filter, layered, repositories, client/server
class: singleton, bridge, adaptor, proxy, object pool
algo: iterator, observer, strategy, visitor
15 Testability & Test Cases test cases and suites
black-box testing
white-box testing
code coverage
static complexity
testability
test harness
unit testing frameworks
limitations of testing
characteristics of a good test
black-box testing
100% code coverage?
testing and risk
test case specifications
test plan
choosing test cases
specification-based testing
equivalence partitioning
boundary value analysis
orthogonal array testing
Test Driven Development
16 Robustness correctness and robustness
reliability & availability
durability
defect, fault, error, failure
defensive programming
causes of defects
causes of failures
error detection principles
use of assertions
throwing exceptions
MTBF
FIT rates
fault handling
run time audits
fire-walls/barricades
defensive instrumentation
Failure Mode Analysis
error prioritization
error detection
error containment
error testing
17 Maintainability elements of maintainability
elements of readability
elements of coding style
statement layout
code layout as documentation
style tools
comment types
when/how to comment
coding standards
module layout
indentation styles
commenting styles
external documentation
javadoc
doxygen
pydoc
18 Bugs & Debugging stack trace
bug tracking system
priority & severity
regression testing
root cause
minimal failure cases
good bug reports
hypothesis confirmation
similar bugs
psychological issues
core dump
stack-trace
execution trace
bug report life cycle
hypothesis confirmation
gathering evidence to infer cause
exceptions
triage
scientific debugging method
diagnostic instrumentation
correct bug fixing
root cause analysis
eliminating root causes
19 Integration and Testing Strategy incremental integration
continuous integration
train-model integration
daily builds & smoke-tests
integration vs mock-testing
architecture & integration
development & integration
testing & integration
choosing integration strategy
20 System Testing and Performance system testing
alpha testing
beta testing
Pareto Principle
release phases
system vs unit testing
testing and bug discovery
release criteria
performance principles
automated testing
bug arrival rates
scenario-based testing
load/stress testing
21 Agile Process agile philosophy
Agile Aliance Principles
SCRUM roles: product owner
SCRUM sprints
failings of formal process
Agile vs planned process?
When agile is more/less appropriate
how much process
product backlog
22 Productivity & Collaboration eXtreme Programming Values
collective code ownership
contributors to productivity
range of individual productivity
challenges of pair programming
eXtreme Programming Rules
eXtreme Programming practices
Pair Programming
23 Task Estimation & Risk Assessment work estimates
confidence bands
types of risk
estimation principles
technical risks
management risks
proj size vs productivity
proj size and activities
estimate confidence
risk assessment
risk management plan
agile estimation
size estimation
backlog grooming
risk identification
risk mitigation
risk monitoring
24 Project Scheduling & Tracking Sprint velocity
SMART milestones
quantifying progress
causes of slippage
dealing w/slippage
adding more resources
SCRUM points
PERT charts
Gantt charts
PNR effort/time curve
status reporting
project scheduling
earned value analysis
status collection

Last updated: 9/20/2021