Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Concerns Providing a list of features Specifying functional behavior Understanding usage profile
Models Use cases / user stories Numbered requirements Descriptive specifications Formal specifications Operational modes Operational profiles Sequence diagrams Flowcharts Pseudocode State diagrams
Analysis Requirement analysis Analysis of formal specs for completeness, consistency Used in performance, reliability and usability analysis Algorithmic correctness, role of participants, interactions between operations State machine analysis: Reachability analysis, Proof of properties Dependency analysis
Modeling multistep operations & interactions Handling of arbitrary input sequences and combinations
Engineering Prototyping & other requirements elicitation techniques Mathematical abstractions to facilitate formal specification Using usage frequencies to drive release plans, usability engg Algorithm design
Testing White box (unit), black box (system) tests Simulated execution based on executable formal specs Testing based on usage profiles System test cases
Structure (static views) [Note that structure is a dev. internal concern, unlike the others which are product attributes]
Modularity, Class diagrams Interfaces, (Informal) Block Relationships diagrams between structural elements
Unit testing
Collaboration diagrams Deployment view Physical view Flowcharts Dataflow diagrams Sequence diagrams
Collaboration analysis Node capabilities and utilization analysis Bottleneck analysis Bottleneck analysis Platform benchmarking Workload analysis Processor utilization analysis Queueing models Scheduling analysis Queueing models
Design patterns
Integration testing
Systems engineering Configuration testing System and software Load testing dimensioning Stress testing Hotspot optimization Profiling Idletime measurement
Response time
(Informal) block diagrams, sequence diagrams, control flow diagrams, process diagrams Protocols Message flow diagrams (message sequence charts) DTDs (datatype definitions)
Priority assignment Increasing concurrency Parallel computing Bandwidth allocation Contention resolution Codesize optimization Stack size selection Memory management
Application benchmarking
Network usage and behavior analysis Memory usage and management analysis
Network monitoring
Resource usage tables e.g. table of files stored and disk space needed (Same as response time) Reliability growth curves Reliability models
Resource usage and management analysis Concurrency patterns Response time analysis Scheduling analysis Reliability (blocks)analysis Reliability estimation Failure Modes and Effect Analysis (FMEA) Failure probability analysis Numerical analysis
Buffering
Benchmarking
Reliability
Rate-monotonic scheduling Designing for predictability Software reliability engineering Reliability certification Fault zones Passive redundancy Active redundancy Algorithm design / selection
Performance monitoring Operational profilebased automated testing Soak testing (continuous operation) Fault injection testing
Fault trees
Security
Authentication, capabilities, security zones, validation of inputs, trust levels, active detection
Checking against hand-computed results Plugging results back into equations Threat injection testing
Safety Debuggability, Testability [another mostly internal concern] Operability Learnability Interoperability Administration: Installation etc. Evolvability Modifiability Extensibility Scalability Portability Business aspects Cycletime Cost Reusability
FMEA
Usability
Operational profiles
SUMI Interface metaphors, consistency Standardized interfaces Install scripts, patches, configurability Modular design, Design patterns Hooks, callouts Algorithm selection Layering Middleware Incremental dev. Reuse and domain engineering, technology use Developing reusable software
Collaboration diagrams Use cases Structure diagrams (e.g. class diagrams) Structure diagrams Control flow diagrams Class diagrams GANTT charts Budgets Staffing Class diagrams
User observation testing, surveys User observation testing, feedback Interoperability testing Test team experience
SAAM Dependencies analysis SAAM Computational complexity analysis SAAM Time estimation Effort estimation Budgetary analysis
Component-based development Domain engineering The table above is just my own understanding. It is incomplete and evolving.