Software Engineering

Main block

Detail Software Engineering Elective Course Description


CPEN 641 Advanced Operating Systems

The advanced operating system course examines the structural aspects of operating system and how these provide support for general purpose, embedded, and real-time operating environments. Topics include survey of early systems, structural design of operating system including process model, inter-process communication, synchronization mechanisms, resource management, CPU scheduling, I/O scheduling, file systems, virtual machines, protection issues, implementation issues of modern operating systems, performance analysis, deadlock detection, recovery and avoidance, operating system for distributed and current systems, review of current research in operating systems.

Reference books and materials [1] Silberschatz, A., Galvin, P. B., and Gagne, G., Operating System Concepts, 8th Ed., Wiley & Sons, 2008 [2] Tanenbaum, A., Modern Operating Systems, 3rd Ed., Prentice Hall, 2007 [3] Stallings, W., Operating Systems: Internals and Design Principles, 6th Ed., Prentice, 2009


CPEN 642 Real-Time Software and Systems

The real-time software and systems course provides a comprehensive view of real-time systems with theory, techniques and methods necessary for effective design and development of real-time computing system. Topics include fundamental concepts, terminology, real-time characteristics and issues, real-time hardware including processors, memory and transducers, operating systems and tasks, utilization and response time, periodic and aperiodic task scheduling, synchronization and blocking, resource access, rate monotonic analysis, priority servers, real-time system development process, real-time system requirements analysis, modeling techniques, architecture design, design patterns, performance analysis, verification and validation, testing strategies, system safety and reliability, languages and operating systems for real-time computing, and real-time problems in concurrent and distributed systems.

Reference books and materials [1] Gomaa, H., Designing Concurrent, Distributed and Real-Time Applications with UML, Addison-Wesley, 2000 [2] Laplante, P., Real-Time Systems Design and Analysis, 3rd Ed., IEEE/Wiley, 2004 [3] Douglass, B., Real-Time UML: Advances in the UML for Real-Time Systems, Addison Wesley, 2004 [4] Douglass, B., Real-Time Design Patterns: Roboust Scalable Architecture for Real-Time Systems, Addison Wesley, 2004 [5] Cooling, J., Software Engineering for Real-Time Systems, Addison Wesley, 2003


CPEN 643 Software Engineering

The software engineering course examines the concepts of system hierarchical relationships and the role of system engineers. Topics include software engineering for modern enterprise application and performance critical systems, software life cycle, software engineering process, requirements and software requirements analysis, software design, software architecture including trade-off analysis, enterprise architecture, service-oriented architecture, COTS architecture, and RAD, software implementation, software integration for systems such as enterprise application integration and COTS integration, software verification and transition, software validation, operation and maintenance, software quality assurance.

Reference books and materials [1] Vliet, H. V., Software Engineering: Principles and Practice, 3rd Ed., Wiley, 2008 [2] Schach, S., Object Oriented and Classical Software Engineering, McGraw Hill, 2010 [3] Garcia, A., Software Engineering for Large-Scale Multi Agent Systems: Research Issues and Practical Applications, Springer, 2003 [4] Bergenti, F., Marie-Pierre Gleizes, and Zanbonelli, F., Methodologies and Software Engineering for Agent Systems, Springer, 2004


CPEN 644 Software Testing

The software testing course focuses on the techniques and processes for testing software reliability, reliability models, and techniques to improve and predict software reliability. Topics include defining necessary reliability, testing fundamentals including issues and relationships of testing to other activities, test levels ranging from target of the tests, objectives, component testing, integration, system and acceptance testing, testing techniques including specification-based, coded-based, fault-base, usage-based, and nature of application, test-related measures for system under test and evaluation of the tests performed, and test process.

Reference books and materials [1] Musa, J. D., Software Reliability Engineering: More reliable Software Faster and Cheaper, 2nd Ed., Authorhouse, 2004 [2] Perry, W. E., Effective Methods for Software Testing, John Wiley, 2000 [3] Lyu, M. R., Handbook of Software Reliability Engineering, McGraw Hill, 1996


CPEN 645 Software Design

The software design course examines the general software design concepts and design process and enabling techniques. Topics include key issues in software design, software structure and architecture styles including human computer interface design, software design quality analysis and evaluation, software design notations, software design strategies and methods including heuristic and formal methods and component-based design.

Reference books and materials [1] Vliet, H. V., Software Engineering: Principles and Practice, 3rd Ed., Wiley, 2008 [2] Schach, S., Object Oriented and Classical Software Engineering, McGraw Hill, 2010 [3] Garcia, A., Software Engineering for Large-Scale Multi Agent Systems: Research Issues and Practical Applications, Springer, 2003 [4] Bass, L., Clements, P., and Kazman, R., Software Architecture in Practice, Wesley, 1998


CPEN 646 Software Measurements and Quality

The software measurements and quality assurance course provides an in-depth evaluation of the verification and validation process throughout the development lifecycle of software. Topics include software quality fundamentals, software engineering culture and ethics, value and costs of quality, quality models and characteristics, quality improvement, application quality requirements, and defect characterization, software quality management process, quality assurance, software quality management techniques, and software quality measurement, verification and validation including system and software verification and validation, and independent verification and validation, verification and validation techniques including testing, demonstrations, traceability, analysis, inspections, peer review, walkthrough, and audits.

Reference books and materials [1] Fenton, N. E., and Pfleeger, S. L., Software Metrics: Rigorous and Practical Approach, 2nd Ed., PWS Publishing, 1998 [2] Kan, S. H., Metrics and Models in Software Quality Engineering, 2nd Ed., Wesley, 2002 [3] Munson, J. C., Software Engineering Measurements, Auerbach Publications, 2003 [4] Kitchenham, B. A., Software Metrics: Measurement for Software Process Improvement, Blackwell Publications, 1996


CPEN 647 Systems Engineering

The systems engineering course examines the methods, tools, and validation techniques for the analysis, specification and prototyping of software systems. Topics include basics of systems engineering, system design constraints, design and requirements allocation, eliciting requirements, analysis, concepts exploration and evaluation, design process, defining concepts, architecting systems, prototyping systems, conceptual modeling of systems and validation, designing tests, analysis of risks and failures, acceptance tests, considering users, deployment and maintenance of systems, and practical considerations for software engineering of the world wide web. 

Reference books and materials [1] Blanchard, B., and Fabrycky, W., Systems Engineering and Analysis, 4th Ed., Prentice, 2006 [2] Kossiakoff, A., and Sweet, W., Systems Engineering: Principles and Practice, Wiley-Interscience, 2003 [3] Berenbach, B., Paulish, D., Kazmeier, J., and Rudorfer, A., Software and Systems Requirements Engineering: In Practice, McGraw Hill, 2009 [4] Lauesen, S., Software Requirements: Styles and Techniques, Addison Wesley, 2002


CPEN 648 Software Maintenance

The software maintenance course examines the principles and techniques used for the maintenance of software systems. Topics include nature of maintenance, need for maintenance, components of maintenance costs, and categories of maintenance, key issues in software maintenance such as technical issues relating to testing, impact analysis, and maintainability, management issues, maintenance cost estimation, and software maintenance measurement, maintenance process including process models, maintenance activities, unique activities, and supporting activities, techniques for maintenance such as program comprehension, reengineering, and reverse engineering

Reference books and materials [1] Smith, D. D., Designing Maintainable Software, Springer, 1999 [2] Pigoski, T. M., Practical Software Maintenance: Best Practices for Managing Your Software Investment, John Wiley, 1996 [3] Seacord, R. C., Plakosh, D., and Lewis, G. A., Modernizing Legacy Systems: Software Technologies, Engineering Processes, and Business Practices, Addison-Wesley, 2003 [4] Arthur, L. J., Software Evolution: A Software Maintenance Challenge, John Wiley, 1998


CPEN 649 Enterprise Application Integration

The enterprise application integration course provides the techniques on how to design and deploy large-scale systems and understand the trade-offs and implications of supporting the critical backbone of modern enterprises. Topics include enterprise architecture frameworks including the Zachman enterprise framework, open group architecture framework, and enterprise architecture cube methodology, enterprise oriented service architecture design and implementation, unique aspects of enterprise architecture and development, security for large enterprise systems, reliability for distributed long running transactions, standards for intra and extra organization system integration, deployment and fault tolerance of systems.

Reference books and materials [1] Coulouris, J., Dollimore, J., and Kindberg, T., Distributed Systems: Concepts and Design, 4th Ed., Addison Wesley, 2005 [2] Erl, T., Service Oriented Architecture: A Guide to Integrating XML and Web Services, Prentice Hall, 2004 [3] Erl, T., Service Oriented Architecture Design Patterns, Prentice Hall, 2009 [4] Burke, B., and Monson-Haefel, R., Enterprise JavaBeans, 5th Ed., O’Reilly, 2006


CPEN 686 Software Architecture Systems

The software architecture systems course examines the principles and techniques for the architectural design of complex systems using well-founded architectural paradigms. It considers commonly-used software system structures, techniques for designing and implementing these structures, models and formal notations for characterizing and reasoning about architectures, tools for generating specific instances of an architecture, and case studies of actual system architectures. Topics include overview of software architecture, architectural drivers, structures and views, data flow systems, data flow styles, call-return systems, client-server and tiered architecture, middleware, event based systems, shared information systems, techniques and methods for the architecture, design by selection, architecture evaluation, product lines, using UML for design representation, formal specification and analysis, architecture conformance, performance, availability, service oriented architecture and web services, security, usability, organizational alignment, global distributed development, platforms, and research directions in software architecture systems.

Reference books and materials [1] Bass, L., Clements, P., and Kazman, R., Software Architecture in Practice, 2nd Ed., Addison Wesley, 2003 [2] Shaw, M., and Garlan, D., Software Architecture: Perspectives on an Emerging Discipline, Prentice Hall, 1996 [3] Bass, L., Clements, P., and Kazman, R., Documenting Software Architectures: Views and Beyond, 2nd Ed., Addison Wesley, 2011 [4] Lattanze, A. J., Taylor, and Francis, Architecting Software Intensive Systems: A Practitioner’s Guide, Auerbach, 2008