Software Engineering
Approaches to systems development
- Systems development life cycle
- Software life cycle models
- Waterfall
- Iterative
- Phased development
- Spiral model
- Agile development
- Extreme programming
- Scrum
- Factors affecting the choice of the life cycle model
- Size
- Stability of requirements
- Specific methodologies
- Unified process
- Extreme programming
- Structured analysis and design
- Rapid Application Design (RAD)
- Prototyping
- Information Engineering
- Developing using open source and open systems approaches
- Developing with packages
- Package acquisition and implementation
- Systems integration
- Categories of development techniques
- Data oriented
- Process oriented
- Behavior oriented
- Object oriented
- Support for reuse
- Repositories
- Component-based development
- Software as a component of a system
- Reusable components
- Integrating software components
- Selecting a systems development approach
- End-user development
Project Management
- Management concepts
- General project management
- Classic management models
- Project management roles
- Enterprise/Organizational management structure
- Software management types (e.g. acquisition, project, development, maintenance, risk, etc.)
- Managing multiple projects
- Project planning
- Evaluation and planning
- Scoping
- Project scheduling and milestones
- Project scheduling and tracking tools
- Work breakdown structure
- Task scheduling
- Effort estimation
- Cost estimation
- Cost estimation techniques
- Cost estimation tools
- Cost/benefit analysis
- Resource allocation
- Risk analysis and management
- Feasibility analysis
- Contingency planning
- Process model selection
- Project personnel and organization
- Organizational structures, positions, responsibilities, and authority
- Formal/informal communication
- Project staffing
- Personnel training, career development, and evaluation
- Meeting management
- Building and motivating teams
- Conflict resolution
- Project control
- Scope control
- Change control
- Monitoring and reporting
- Measurement and analysis of results
- Correction and recovery
- Reward and discipline
- Standards of performance
- Project management documentation
- Project close-down
- Software configuration management
- Revision control
- Release management
- Tool support
- Builds
- Software configuration management processes
- Configuration management and version control during evolution
- Legal requirement
- Disaster planning
- Distribution and backup
- Documentation
- Systems documentation
- User documentation
- Configuration documentation [link to configuration management]
- Software metrics
Requirements Analysis and Specification
- Requirements
- Definition of requirements
- Product and project constraints
- Internal and external system boundaries
- Functional and non-functional requirements
- Requirements process
- Layers/levels of requirements
- Needs and goals
- User requirements
- System requirements
- Software requirements
- Quality of requirements
- Characteristics of requirements
- Testability
- Lack of ambiguity
- Consistency
- Correctness
- Traceability
- Priority
- Completeness
- Simplicity
- Verifiability
- Usefulness as basis for design
- Failure modes
- Robustness
- Analysis of quality of requirements
- Methods for analyzing correctness
- Static analysis
- Simulation
- Model checking
- Analyzing non-functional requirements
- Safety
- Security
- Usability
- Performance
- Managing changing requirements
- Requirements management
- Consistency management
- Release planning
- Reuse
- Analysis patterns
- Managing conflicting requirements, trade-off analysis
- Interaction between requirements and architecture
- Requirements in context
- Wicked problems
- Ill-structured problems
- Problems with many solutions
- Constraints
- Eliciting requirements
- Elicitation sources (e.g., stakeholders, domain experts, operational and organization environments)
- Stakeholders
- Domain experts
- Operational and organizational environments
- Elicitation techniques
- Interviews
- Questionnaires/surveys
- Prototypes
- Use cases
- Observation
- Prototypes
- Participatory techniques
- Ethnographic
- Archival documents
- Requirements specification & documentation
- Requirements documentation
- Types
- Audience
- Structure
- Quality
- Attributes
- Standards
- Software requirements specification
- Requirements specification notations
- Requirements validation
- Reviews and inspection
- Prototyping to validate requirements
- Test planning
- Independence of specification
- Safety cases
- Limitations
- Degraded operation mode
- Acceptance test design
- Validating product quality attributes
- Formal requirements analysis [link to formal specification languages]
System modeling
- System modeling principles
- Decomposition
- Abstraction
- Generalization
- Projection/views
- Explicitness (make no assumptions, or state all assumptions)
- Abstraction
- Classification
- Classes
- Types and instances
- Inheritance
- Association and aggregation
- Information modeling
- Entity Relationship Models
- Class Diagrams
- Other
- Domain modeling
- Enterprise modeling
- Business processes
- Organizations
- Goals
- Systems development tools and techniques
- Modeling languages
- Development tools
- Group-based techniques
- JAD
- Structured walkthroughs
- Design and code reviews
- Software modeling
- Modeling principles
- Use of formal approaches
- Pre and Post conditions
- Invariants
- Properties of modeling languages
- Syntax vs. semantics (understanding model representations)
- Specification Languages
- Formal (mathematical) specification languages
- Structured English
- Types of models
- Behavioral modeling
- State diagrams
- Activity diagrams
- Sequence diagrams
- Failure modes and effects analysis
- Fault tree analysis
- Structure modeling
- Class diagrams
- Object diagrams
- Component diagrams
- Modeling embedded systems
- Real-time schedulability analysis
- External interface analysis
System design
- System and subsystem division
- High quality design elements
- System-level strategies
- Diagnostics
- Hardware/software interface
- Interactions between design and requirements
- Design trade-offs
- Design to achieve performance measures
- Achieving reliability
- Availability modeling
- Redundancy
- Independence of designs
- Separation of concerns
- Specification of subsystems
- Selection of subcontractor
- Fault tolerance
- Error detecting
- Error correction
- Sofware approaches to tolerating hardware faults
- Dealing with failure
- Safety
- Common-cause-failure
- Concurrent hardware/software design
- Applications areas reuiring hardware/software coordination
- Speech coders
- Radio modems
- Hard real-time requirements
- Hardware - software co-design
- Software design
-
- Design principles
- Information hiding
- Cohesion
- Coupling
- Design for quality attributes
- Reliability
- Software reliability models
- Usability
- Performance
- Testability
- Fault tolerance
- Software fault-tolerance methods
- N-version programming
- Recovery blocks
- Rollback and recovery
- Reuse
- Software design methodologies
- Function-oriented
- Object-oriented
- Data-structure centered
- Aspect oriented
- Design for real-time and event-driven systems
- Architectural design
- Architectural styles
- Pipe-and-filter
- Layered
- Transaction-centered
- Peer-to-peer
- Publish-subscribe
- Event-based
- Client-server
- Architectural trade-offs
- Hardware issues in software architecture
- Requirements traceability in architecture
- Domain-specific architectures and product-lines
- Architectural notations
- Detailed design
- Component design
- Component and system interface design
- Design notations
- Design support tools and evaluation
- Design support tools
- Design metrics
- Formal design analysis
Software Construction, Tools, Techniques
- Software Construction
- API design and use
- Code resues and libraries
- Object-oriented run-time issues (e.g., dynamic binding)
- Parameterization and generics
- Assertions
- Fault tolerance
- Error handling
- Exception handling
- State-based and table-driven construction (e.g., Lex)
- Parsing (e.g., yacc)
- Run-time configuration
- Internationalization
* Concurrency primitives (OR OS?)
- semaphores
- monitors
* Other locking mechanisms
* Construction techniques for distributed software
* Middleware
- Constructing heterogeneous (hardware plus software) systems
- Performance analysis
- Platform standards
- Test-first programming
- Software construction tools
- Development environments
- Syntax-directed tools
- GUI builders
- Testing tools
- Selecting the development language
- Profiling, performance analysis and slicing tools
- Formal methods for software construction
- Application of abstract machines
- Application of specification languages and methods
- Automatic generation of code from a specification
- Program derivation
- Analysis of candidate implementations
- Mapping of a specification to different implementations
- Refinement
System verification and validation
- V&V terminology and foundations
- Objectives and constraints of V&V
- Planning the V&V effort
- Documenting V&V strategy, including tests and other artifacts
- Metrics & measurement (e.g. reliability, usability, performance, etc.)
- V&V involvement at different points in the lifecycle
- Reviews
- Desk checking
- Walkthroughs
- Inspections
- Testing
- Types of testing
- White box
- Black box
- Unit testing
- Stress testing
- Regression testing
- Interface testing
- Integration testing
- Exception handling
- Coverage analysis
- Developing test cases based on use cases and/or customer stories
- Operational profile-based testing
- Hardware testing
- Printed circuit board testing
- MCM testing
- core-based testing
- System-level and acceptance testing
- Testing across quality attributes
- Testing tools
- Deployment process
- Human computer user interface testing and evaluation
- The variety of aspects of usefulness and usability
- Heuristic evaluation
- Cognitive walkthroughs
- User testing approaches (observation sessions etc.)
- Web usability; testing techniques for web sites
- Formal experiments to test hypotheses about specific HCI controls
- Problem analysis and reporting
- Analyzing failure reports
- Debugging/fault isolation techniques
- Defect analysis
- Problem tracking
System Quality
- System quality concepts and culture
- Definitions of quality
- Society's concern for quality
- The costs and impacts of bad quality
- A cost of quality model
- Quality attributes for software (e.g. dependability, usability, etc.)
- The dimensions of quality engineering
- Roles of people, processes, methods, tools, and technology
- Software quality standards
- The ISO 9000 Quality Management Systems
- ISO/IEEE Standard 12207 Software Life Cycle Processes
- Organizational implementation of standards
- IEEE software quality-related standards
- Software quality processes
- Software quality models and metrics
- Quality-related aspects of software process models
- Introduction/overview of ISO 15504 and the SEI CMMs
- Quality-related process areas of ISO 15504
- Quality-related process areas of the SW-CMM and the CMMIs
- The Baldridge Award criteria as applied to software engineering
- Quality aspects of other process models
- Process assurance
- The nature of process assurance
- Quality planning
- Organizing and reporting for process assurance
- Techniques of process assurance
- Product assurance
- The nature of product assurance
- Distinctions between assurance and V&V
- Quality product models
- Root cause analysis and defect prevention
- Quality product metrics and measurement
- Assessment of product quality attributes (e.g. usability, reliability, availability, etc.)
System implementation
- System integration
- System conversion
- Training
- Installation
System evolution
- Evolution processes
- Evolution and maintenance
- Relationship between evolving entities (e.g. assumptions, requirements, architecture, design, code, etc.)
- Models of software evolution (e.g. theories, laws, etc.)
- Cost models of evolution
- Planning for evolution (e.g. outsourcing, in-house, etc.)
- Evolution activities
- Working with legacy systems (e.g. use of wrappers, etc.)
- Program comprehension and reverse engineering
- System and process re-engineering (technical and business)
- Impact analysis
- Migration (technical and business)
- Refactoring
- Program transformation
- Data reverse engineering
- Types of evolution
- Defect removal
- Upgrade
- Enhancements
- Configuration management and version control
- [Link to Project management]
Specialized systems
- Safety critical systems
- Security critical systems
- High integrity functions
- Ensuring performance
- Risk and hazard analysis
- Strategies for risk reduction
- Risk control
- Implications for implementation
- Preliminary hazard analysis
- Concept of integrity level
- Quantification
- Impact on life cycle
- International standards
- Legal requirements
- Types of evolution
- Defect removal
- Upgrade
- Enhancements
- Configuration management and version control
- [Link to Project management]
Specialized systems
- Safety critical systems
- Security critical systems
- High integrity functions
- Ensuring performance
- Risk and hazard analysis
- Strategies for risk reduction
- Risk control
- Implications for implementation
- Preliminary hazard analysis
- Concept of integrity level
- Quantification
- Impact on life cycle
- International standards
- Legal requirements
to top