Introduction Flashcards
Software Project Management
Discipline of managing projects to completion (all features/scope) while achieving quality within time constraints & budget.
Software Quality
Discipline of specifying, assuring, monitoring & controlling quality of software products. In SE, measures how well software designed & how well it conforms to that design.
Software Verification
Have we built software right? Have we made right decision each step of the way?
Software Validation
Have we built right software? How well does product address business needs?
Software Testing
Techniques to execute programs with intent of finding as many defects as possible/gaining sufficient confidence in Software Under Test (SUT).
Software Inspections
Techniques aimed at systematically verifying software artifacts (design docs, code, tests etc) without executing them, with intent of finding as many defects as possible, as early as possible.
What are the factors of software quality?
Functional stability, reliability, performance efficiency, operability, security, compatibility, maintainability and portability
Functional Stability
Functional appropriateness, accuracy and compliance
Reliability
Maturity, availability, fault tolerance, recoverability and compliance
Performance Efficiency
Time-behaviour, resource utilisation and compliance
Operability
Appropriateness, recognisability, learnability, ease of use, attractiveness, technical accessibility and compliance
Security
Confidentiality, integrity, non-repudiation, accountability, authenticity and compliance
Compatibility
Co-existence, interoperability and compliance
Maintainability
Modularity, reusability, analysability, changeability, modification stability, testability and compliance
Portability
Adaptability, installability, replaceability and compliance
Correctness
Does software perform as expected?
Understandability
- Are var names descriptive of physical/functional property represented?
- Do uniquely recognisable functions contain adequate comments so their purpose is clear?
- Are deviations from forward logical flow adequately commented?
- Are all elements of array functionally related?
Completeness
- Are all necessary components available?
- Does any process fail for lack of resources/programming?
- Are all potential pathways through code accounted for, including proper error handling?
Conciseness
- Is all code reachable?
- Is any code redundant?
- How many statements within loops could be placed outside loop, reducing computation time?
- Are branch decisions too complex?
Portability
- Does program depend upon system/library routines unique to certain installation?
- Have machine-dependent statements been flagged & commented?
- Has dependency on internal bit rep of alphanumeric/special chars been avoided?
- How much effort required to transfer program from 1 hardware/software system/environment to another?
Consistency
- Is 1 var name used to rep diff logical/physical entities in program?
- Does program contain only 1 rep for any given physical/mathematical constant?
- Are functionally similar arithmetic expressions similarly constructed?
- Is consistent scheme used for indentation, nomenclature, colour palette, fonts & other visual elements?
Maintainability
- Has some memory capacity been reserved for future expansion?
- Is design cohesive (does each module have distinct, recognisable functionality)?
- Does software allow for change in data structures (object-oriented designs more likely to allow for this)?
- If code is procedure-based (not object-oriented), is change likely to require restructuring main program or just module?