Software systems and engineering Flashcards
What is the testing process?
Unit test- if parts don’t work by themselves they won’t work together
Integration (component) testing- do they work together
Validation and verification- it works but does it meet user’s functional requirements
Functional acceptance tests
Non-functional acceptance tests (scalability, security)
Usability testing, A/B testing
What do you test?
Resource exhaustion, errors, recovery- does it work in the real world? does it run out of memory/disk space/CPU or network bandwidth?
Performance/stress testing- is it scalable?
Usability testing- does it work with real users under real conditions, is it intuitively clear to use?
Tests
What are regression tests and test data?
Regression tests- make sure that new code to fix bugs doesn’t break old code
Test data- real world and synthetic (can’t get enough real, need certain statistical properties) to expose all bugs
How do you plan testing?
Testing quadrant!
Q1: technology facing/supporting development- unit/component/deployment tests, automated
Q2: business facing/supporting development- functional tests, prototypes, simulations, acceptance tests (written by users before development starts listing acceptance criteria of requested application)
Q3: business facing/critiquing product- exploratory, usability, user acceptance, scenarios, alpha/beta, checking that spec is correct
Q4: technology facing/critiquing the product- performance and load tests, security
functional acceptance tests vs non-functional (capability, usability, security, modifiability, availability)
Why live with bugs?
Bugs are expensive- direct;y through fixing and indirectly through damaged reputation and lost time
There will always be bugs- unknown unknowns, unexpected circumstances, new situation
When should you test?
ASAP and frequently to reduce costs and defects
Who should test?
Automate when possible so tedious parts done by machine- programmers gentle on their own code and get bored- BUT still need someone to define test cases and implement them in automated testing framework
What should automated testing include?
Cover max no of test cases- unit tests, regression tests, UI testing
Test automation cloud for large distributed cloud services
What tools can be used for testing?
xUnit- for unit tests
KIF- iOS UI testing framework, test scenarios
Selenium- automates browsers
Robotium- selenium for android
Static code analysers- check for code inconsistency eg FxCOP
What are profiling tools?
Allow the analysis of software performance, e.g. tracking of memory allocation to spot leaks and inefficient use, looking for bottlenecks in need of optimisation
What are analytics?
Collecting and analysing data once product is live with users to try and increase market performance, metrics include DAU (daily active users), conversion (how many users signed up/made purchase), engagement (hours spent), sales by territory, crashes, etc
Tools: fabric.io, Appsee
What is usability testing?
Method
- define user interactions to be tested, how system is implemented (real product/prototype/simulator), baso test setup
- how user feedback captured: interviews, scoring cards
- session time
- how user interactions observed and analysed: video/screen capture, eye tracking
User group
- choose user group to provide representative set of product/service users
- segment users by characteristics e.g. demographic, age, gender, level of experience
Scenarios
-specific actions users asked to perform
Results presentation
report to include
-conclusions based on observations to identify e.g. common source of confusion
-qualitative user feedback
-quantitative results- rankings/scorings by user groups (charts/tables)
Whats the best number of test users?
Nielson- 5
but that was with 5 users of same kind, would be better to have 5 users for each user segment?
Faulkner- 20
depends on diversity of target users and complexity of product
When to user test?
ASAP
Make prototype with UI flow, main controls, layouts and data presentation
Option A: real app
real app and real feel BUT higher effort
Option B: digital prototyping platform
accessible, easy collaboration, easy release to users/feedback BUT needs graphic design of fake UI elements
What is the software engineering process?
analysis design- how goals achieved implementation building testing deployment maintenance (80-90% of total cost of ownership)
Who’s in a traditional team?
Architect- spec and high level design Project manager- scheduling, tracking progress so on time and budget Lead programmer Programmer Tester- test and validation procedures
What are the pros and cons of the waterfall model?
Pros
- early clarification of system goals
- can charge for changes in requirements
- works well with management tools
Cons
- no iterations to adjust to changing requirements
- lot of time getting system right from start but right today doesn’t mean right tomorrow
What is the spiral model?
Decide fixed no of iterations
Allows risk management
Iterative development with systematic aspects of waterfall
Iterative incremental refinement each time around spiral
What are lightweight/agile methods?
Contrast to single cycle regulated methods
e.g. extreme programming (XP)
driving cost to reduce the cost of change
‘Stay aware. Adapt. Change’