CIS 301: Logical Foundations of Programming

    This course studies concepts related to formal logics and how tools based on logic are used to reason about safety and security critical software, network security, and security protocols.

CIS 501: Software Architecture and Design

    This course is about designing and implementing component-based software systems using blueprints and architectural design patterns.

CIS 706: Translator Design I

    The course will teach modern compiler techniques applied to general-purpose programming language. The goal of the course is to give students a working knowledge of the foundations, tools, and engineering approaches used in developing formal language translators.

CIS 771: Software Specifications

    This course studies a collection of techniques that lie at the foundation of an approach to software development that can enable the construction of large highly reliable software.

CIS 806: Programming Language Semantics

    This course explores means of documenting the semantics of programming languages. Through a series of exercises using the Coq theorem prover, it studies the semantics of simple programming languages and gradually build up to a study of a Java-like object-orient programming language.

CIS 842: Specification and Verification of Reactive Systems

    This course studies various model-checking techniques with the goal of applying those techniques to real concurrent software systems.

CIS 890: High-Assurance Systems

    The course covers techniques for developing high assurance systems -- systems that are safety critical, security critical, or mission critical in nature.