Software Systems and Engineering Flashcards
Software Life Cycle Stages (The Waterfall Model)
Analysis -> Design -> Implementation -> Building -> Testing -> Deployment -> Maintenance
Software Life Cycle Stages - Analysis
Describing aspects of software development for which there is no choice (to which the project has already committed).
Software Life Cycle Stages - Design
Defining how project goals are going to be achieved.
Software Life Cycle Stages - Implementation
Process of writing code, typically partitioned in many subprojects.
Software Life Cycle Stages - Building
Creating a “complete” version of the software (i.e. putting all chunks of the code together).
Software Life Cycle Stages - Testing
Making sure that small independent parts of the code correctly, code parts work together, functionality meets requirements, and new code doesn’t break the old.
Software Life Cycle Stages - Deployment
Actual release of software into end user environment (e.g. application on Desktop or App Store).
Software Life Cycle Stages - Maintenance
Supporting the software during its lifetime (e.g. releasing compatibility updates or improving performance).
80-90% of software system ‘Total Cost of Ownership’ is attributed to maintenance.
Traditional Software Engineering Team
Architect, Project Manager, Lead Programmer, Programmer, Tester
Waterfall Model - Advantages
- Early clarification of system goals
- Can charge for changes to the requirements
- Works well with management tools
Waterfall Model - Disadvantages
- Iterations critical to software development process (requirements not always understood and environments always changing)
- Lot of time spent on designing system and functional specification
- Requirement changes costly to implement and may take too long (changes made may not be relevant later)
- Unsuitable if requirements unable to be defined in advance (due to uncertainty and necessary experimentation)
The Spiral Model
Iterative development with systematic aspects of the waterfall model. Each spiral is a phase and number of spirals depend on risk. Incremental refinement with radius dependent on cost.
The Evolutionary Model
Iterative (with feedback provided by users) and incremental (development cycle consists of smaller incremental waterfall models) delivery.
What to test? - Unit Tests
Code that exercises a small unit (module) of software separate from other units. Foundation of other types of testing.
What to test? - Integration Tests
Test how all components (modules) interact with each other.
Potential largest source of bugs.
What to test? - Validation and verification
Test whether this matches user needs, and whether functional requirements are met.
What to test? - Resource exhaustion, errors, recovery
- Memory
- CPU bandwidth
- Disk space
- Video resolution
- Network bandwidth
What to test? - Performance/stress testing
Testing as the number of users / transactions / connections increases (scalability)
What to test? - Regression Tests
Compares output of the previous tests with previous known values. Make sure bugs fixed now don’t break something else.
Types of Test Data
Real-world: “typical” data.
Synthetic: artificially generated (not enough real-data, need statistical properties).
Test Planning -
Q1 Technology-facing / Supporting Development
Unit, component, and deployment tests.
Technology-facing tests are written and maintained exclusively by developers.
Test Planning -
Q2 Business-facing / Supporting Development
Testing Quadrant:
Functional, Prototypes, Simulations
Acceptance tests conducted by customer to verify that the system meets criteria. Should be written before development by customers.
Test Planning -
Q3 Business-facing / Critique the Product
Testing Quadrant:
Exploratory, Usability, User acceptance, Scenarios, Alpha/
Beta, Showcasing
Test Planning -
Q4 Technology-facing / Critique the Product
Testing Quadrant:
Performance and Load tests, Security