1Functional Decomposition
Think of a system as a function and break it down into smaller, simpler functions. Then, rebuild these small functions to build system.
2Relational Database Design
Use tables to store data and illustrate relationships between them. Most common type of database.
3Object Oriented / UML
Each module turns into a class that has a name, attributes, and functions.
4User Interface Design
A drawing of an interface for testing and feedback.
5Abstraction
A fundamental 43 principle. Removes irrelevant info and highlights relevant info. Software engineering is about constructing and elaborating abstractions / models.
6Storyboards
Illustrate user interaction. A series of pictures that shows context of use, often with emotion. It refines requirements and interactions pre-build.
7Sketches
A mix of notations, formal or informal
8Notations
Represent some aspect of a software system, and this is what software engineering is about.
9High Cohesion
Grouping related functionality. All things having to do with one concern are in one place.
10Low Coupling
Modules aren't tightly knit together.
11A-B Testing
Putting a variation of a feature in front of users and collect data on user's responses; see what they like best.
12HCI - Personas
A fictional user of your system. Must have a picture, nickname, actual name, and characteristics that are relevant to the system.
13HCI - Scenarios
Write a story-like description of a user using the system.
14HCI - Site Map
Shows what elements lead to what screens. Draw one with a given number of screens.
15HCI - Mockups
Draw a picture of picture of what the user interface will look like.
16HCI - Design guidelines
Include color schemes, wire frames. All for reuse, consistency, and to incorporate well-known heuristics.
17Interaction Design Patterns
Like guidelines, more focused on common usability problems. Things like how to navigate, search, display data.
18Validation
Check that a system or any artifact match what the user's needs are. "Implement the proper idea."
19Verification
Check that the eventual system behaves according to the specifications. "Implement the idea properly."
20Error
Human mistake in programmer's mind.
21Fault (Defect)
Discrepancy in code.
22Failure
External behavior, execution, output is incorrect.
23Unit Testing
Test a small unit / file / section. Lots of these are used.
24Functional / Integration Testing
Testing interaction between units of a system. Less of these are used.
25System Acceptance
Testing the entire system for satisfaction of requirements. Used sparingly
26Oracle
Says what a program's expected output should be to know if we fail or succeed (can be a calculator, dictionary, brain, etc.)
27"Program Testing Shows the Presence of Bugs, Never Absence"
We can't prove 100% correctness since we can't test every possible input. We can't prove anything about inputs we didn't run.
28When To Know Testing is Over
Fixed period of time, have quality requirements (98% bug free), rate of problems per unit time stabilizes, formula where fake bugs are inserted.
29Black Box Testing
Based on specification, assumes no access to code.
30White Box Testing
Expects access to code, a graph model is used.
31Partitioning (Testing)
Takes all the inputs of a function and divide them into a subdomain / equivalence class.
32Boundary Value Analysis
Testing inputs that are at the boundaries of subdomains (partitions)
33Node Testing
Every statement executed at least once
34Edge Testing
Every branch taken at least once
35Build and Fix - Software Processes
Char: Simple, leaves out all activities.
Pros: good for small programs
Cons: not rigorous enough for non-trivial projects
36Waterfall - Software Processes
Char: linear, sequential, one drops to next, have to finish one before moving on, lots of documentation.
Pros: Lots of documentation, promotes understanding of requirements. Good for short projects.
Cons: Rigid, not amenable to change. Can't incorporate customer feedback.
37Rapid Prototyping - Software Processes
Incorporates more user feedback
38Incremental - Software Processes
More of a customer feedback loop to waterfall. Iterate over small pieces and get customer feedback (Windows 10)
39Spiral - Software Processes
Char: Wants more flexibility to waterfall. What happens in each step is based off risk analysis. It's iterative and variable. Every process is different
Pros: good when things are uncertain
Cons: you need to do / understand risk analysis
40RUP - Software Processes
Char: use case driven, architecture centric, iterative and incremental
Pros: Risk driven, incremental, lots of tool support
Cons: Complicated, heavy, requires an expert to implement.
41OSS Classic - Software Processes
Char: devs are volunteers, rarely meet. Starts with one person, others come to build. Many devs work on projects. More evolutionary; no deadlines
Cons: not proprietary, bad technical support and compensation is iffy.
Pros: very successful. Bugs are easily found by many eyes. Scales up well
42OSS Corporate - Software Processes
Companies using open source software, sponsoring projects, open sourcing their own code.
43XP - Software Processes
Uses test driven development and pair programming.
Determine desired features, implement / deliver each task, follow values & principles.
44Agile - Software Processes
Char: Category of XP, scrum. Very anti-waterfall; instead of having a plan, it's about responding to changes at any time. Very popular.
Cons: won't work in certain conditions.
Pros: great for customer satisfaction.
45Moore's Law
Complexity of hardware doubles every two years, so we can write more complex software
46Project Estimation
Project factors -> estimation method -> project estimates
47Purpose of Designs
Designs to think, talk and prescribe. Designs are developed iteratively.
48Relationships Between Classes
Inheritance, association (multiplicity), whole part (aggregation and composition).
49Association Relationships
Student takes from teacher
Router accesses DNS
50Aggregation
One object contains a set of other objects. They are transitive and asymmetric. I.e. bottle -> crate
51Composition
A variation of aggregation that adds the property of existence dependence. I.e. room -> house
52Information Hiding
Hide design decisions that are most likely to change, thereby protecting other parts of the program from change if the design decision is changed.
53Who Does Testing?
Programmers, testers, users (alpha / beta, acceptance testing, crowdsourcing/ bug bounties).
54Black Box Testing Process
1. Identify set of all inputs
2. Identify a base for subdividing the set of inputs
3. Use this basis to divide set of all inputs into subdomains.
4. From each subdomain, choose representatives to be test case inputs.
55XP Practices and Principles
Whole team
Small releases
Customer tests
Simple design
Pair programming
Test-driven development
Coding standards
Open space
56Heuristic Evaluation
Visibility of system status
Match system words to real world
User control & freedom
Consistency & standards
Error prevention
Recognition rather than recall
Accelerators
Minimalistic design
Help users recognize & recover from errors
Help & documentation
57Estimation Factors
Requirements
Application domain experience
Process quality
Project size
Technology support
Working environment
58Estimation Outputs
Effort (person months)
Duration (calendar months)
Cost (dollars)
KLOC (thousands of lines of code)
59Estimation Methods
COCOMO
Function point estimation
Object oriented effort estimation
Work breakdown structure
60Effort Estimation
Difficult, requires a lot of experience and intelligence. May require data that doesn't exist, design to be done, and updates.