This is a book about Computer Systems Engineering. A frequent occurrence in the design of computer systems is the challenge of building a system containing hardware and software components, possibly as part of a larger system. The development of computer systems themselves falls within this scope as does the development of a vast array of devices such as digital cameras, hand-held computers, location aware systems, robots and other types of embedded systems, and even such applications as web sites on spacecraft.
In all of these cases decisions have to be made about how to design the system to have the maximum impact and effect. Decisions have to be made about alternative approaches, trade-offs need to be addressed, and decisions on all the many facets of design must be justified through technical and economic insight and judgment. Systems engineering is the discipline within which these matters are addressed in a carefully considered fashion.
The IEEE Computer Society (IEEE-CS) and the Association for Computing Machinery (ACM), the two principle computer related professional associations, include a computer systems engineering requirement in their model computer engineering body of knowledge described in Computer Curriculum 2001. This book addresses that requirement; the Table of Contents closely follows the coverage of material in the computer systems engineering body of knowledge. It is intended primarily as a textbook for students in computer science and computer engineering, but it may also serve as a useful reference for professionals as they design and build computer based systems.
The text assumes that students have a background including integral and differential calculus, basic probability, and are familiar with basic computer architecture. A third-year student in computer science or computer engineering would typically have this background and this book would be appropriate for a computer systems engineering course at that level.
System Models and Analysis
Requirements Analysis and Elicitation
- Identification of need, feasibility and economic considerations
- Determining requirements
- Human factors, issues, standards
- Non-functional requirements
- Functional and non-functional specifications
- Quality, completeness, consistency, simplicity, verifiability, basis for design
- Specification in the event of failure
- Degraded modes of operation
System Architectural Design
- Subdivision into subsystems
- Elements of a high quality design
- System-level design strategies
- Approaches to architectural design
- Design for performance, reliability, manufacturability, maintainability, etc.
- Failure modes
- Common cause failures
- Choosing technologies
- Rapid application development
- Role of standards
- Types of testing
- Test plans
- Regression testing
- Types of maintenance
- Maintenance measurement
- Configuration management
- Resource allocation
- Allocation of decision making responsibility
- Project planning, Gantt charts
- Management metrics
Hardware and Software Co-design
- Application areas where coordinated development is important
- Demands of hard real-time features
- Hardware and software co-design and trade-offs