Introduction to computer systems engineering. Sources of complexity design methodology. The concept of systems, subsystems, needs for an interdisciplinary approach. Design at the system-level, hardware-software interface, direct and indirect interactions and human-computer interaction. Analysis of the system. Identification of needs relative to viability and relative to cost effectiveness. Functional and non-functional requirements. Perfection, consistency, simplicity, the possibility of verification. Metrics for computing performance. Using appropriate architecture to improve performance.
Parallel processing. Application of vector processing. Using technology of data flow. Streaming extensions relationships between architecture and multimedia applications. Characterization of workload. Setting up, expansion and capacity planning of application. Reusability modularity. Use of virtualization. Elements of designing high quality. Hardware-software co design. Implementation and rapid application development. The role of standards and documentation.
Testing and maintenance. Test plans. Whiteboard, blackboard, regression testing, performance testing under stress and load testing interface. Testing and diagnosis at the system level. Specialized systems. Analysis of risks and hazards. Strategies to reduce risk, risk management. The concept of integrity levels, its impact on the life cycle.
Security and the concept of security plan. High integrity systems. Functions of high integrity and ensuring their performance. Reliability and tolerance to failure. Modeling of reliability and availability. Approaches using hardware redundancy. Software approaches to the tolerance of hardware errors. Models of software reliability. Methods of fault tolerance software. Fault tolerance in operating systems, data structures, in systems of databases, in distributed systems. Fault tolerance in systems for transaction processing.