Software development and modeling tools. Software architecture, requirements, design, validation, reliability estimation, and management. Top-down, object-oriented, modular and domain-specific design. Design tools and representation techniques. Definition of various code metrics and their use in program development and screening. Specification-based and program-based testing techniques. Path testing, system testing. Error, reliability and mean-time-between failure models. Team programming and programming in the large.