Chapter 6: Architectural Design
Importance of Architecture: Helps in stakeholder communication, system analysis (non-functional reqs), and large-scale reuse.
Architectural Patterns:
MVC: Separates data, view, controller; good for multi-view systems. Advantage: independent data/view changes.
Layered: Functionality in layers; allows easier replacement, but can affect performance.
Repository: Centralized data access; good for data-driven systems but a single point of failure.
Client–Server: Distributed services; servers = points of failure, performance depends on the network.
Architecture’s Impact:
Performance: localize operations
Security: layered architecture
Safety: isolate critical subsystems
Availability: redundancy
Maintainability: small, replaceable components
---
Chapter 7: Design & Implementation
Build or Buy: COTS products reduce time and cost; design focuses on configuration.
Design Process:
Object identification is hard and iterative.
Use models: static (structure) & dynamic (interactions).
Design Patterns:
Observer: sync views when data changes
Façade: simplify interfaces
Iterator: standard data access
Decorator: add behavior at runtime
Implementation Focus: Reuse, config mgmt, host-target setup
Reuse Levels: Abstraction, Object, Component, System
Licensing:
GPL: must open-source derived work
LGPL: link without open-sourcing own code
BSD: no obligation to open source
---
Chapter 8: Software Testing
Goals: Validate (meets reqs), Detect Defects
Types of Testing:
Development: unit, component, system
Release: external use readiness
User: alpha, beta, acceptance
V vs V:
Verification = "Are we building it right?"
Validation = "Are we building the right thing?"
Inspections: Static, no execution, find anomalies
Automated Testing: JUnit, etc. for fast feedback
Test Techniques:
Partitioning: group similar inputs
Guideline-based: use known bug patterns
Interface Testing: check boundaries, nulls, invalid calls
Use-case Testing: simulate real-world usage
TDD: write test first, develop to pass
Regression Testing: re-run tests after changes
---
Chapter 9: Software Evolution
Types of Maintenance:
Corrective (bugs), Adaptive (env changes), Perfective (new reqs)
Challenges:
Costs often exceed development
Staff turnover, lack of documentation, code decay
Reengineering vs Refactoring:
Reengineering = overhaul for maintainability
Refactoring = continuous improvements
Legacy System Strategies:
Scrap, Maintain, Reengineer, Replace
Maintenance Cost Factors: program age, team skill, system complexity
---
Chapter 22: Project Management
Success = On time, on budget, meets expectations, happy team
Risks:
Project (delays, staff issues)
Product (defects, tools fail)
Business (tech shift, competition)
Risk Process: Identify → Analyze → Plan → Monitor
People Management: respect, honesty, inclusion, cohesion = better teams
---
Chapter 23: Project Planning
Plan Includes:
Risk plan, validation plan, schedule, resources, etc.
Scheduling Issues:
Task breakdown, dependencies, milestones, delays
Cost Estimation:
Experience-based: judgment from past projects
COCOMO 2: empirical model
COCOMO 2 Models: application comp., early design, reuse, post-architecture
Effort & Duration:
Use formulas to estimate staff/time based on size