Provides an opportunity to apply academic experience in settings associated with future professional employment. A written proposal for the internship must be approved by the department chair. The proposal must specify what the student will learn from the internship, why the student is properly prepared for the internship, and what supervision will be available to the student during the internship. A mid-semester report and a final report are required. Permission required. May be repeated up to a maximum of 3 credits. Cr/F.
CS 812 - Compiler Design
Formal languages and formal techniques for syntax analysis and parsing; organization of the compiler and its data structures; code generation. LL and LR parsing; automatic generation of scanners and parsers from high-level descriptions. Implementation of features from imperative and object-oriented languages. Students are required to design and implement a compiler for a simple language. This course is implementation-intensive. Prereq: Machine Organization; Theory of Computation.
CS 818 - Software Systems Engineering Process
Contemporary software-intensive systems are distinguished by their complex intellectual content, evolving and changing requirements, difficult technical and organizational interfaces, multiple stakeholders with differing perspectives on project objectives, integration intensity, and high customer expectations for system robustness. To meet these formidable challenges, this course addresses an interdisciplinary set of processes across the full life-cycle (from concepts to deployment and enhancement) that balances competing technical/management parameters toward a design solution meeting stakeholder needs. Prereq: permission of instructor.
CS 819 - Object-Oriented Methodology
Object-oriented system design. Object-oriented programming. Languages for object-oriented programming. Prereq: strong programming skills; experience with C programming is highly desirable.
CS 820 - Operating System Programming
Detailed discussion of operating system concepts and features. Practical examples and exercises that utilize advanced operating system features, including inter-process communication, synchronization, client-server communication, shared memory, threads, remote procedure calls, and device-level I/O. Discussion of POSIX 1003.1 Part I Standards. Prereq: operating system fundamentals or equivalent.
CS 821 - Operating System Kernel Design
Design and implementation of an operating system kernel, using LINUX as an example. Detailed discussion of the data structures and algorithms used in the kernel to handle interrupts, schedule processes, manage memory, access files, deal with network protocols, and perform device-level I/O. The course is project-oriented, and requires the student to make modifications and additions to the LINUX kernel. Prereq: CS 820, or permission.
CS 823 - Performance Evaluation of Computer Systems
This class introduces the main concepts, techniques, and tools needed to evaluate the performance of computer systems under various configurations and workloads. The techniques allow one to perform capacity planning based on quality of service requirements of users and workload characteristics. The course is mainly based on the use of analytic queuing network models of computer systems. The performance techniques are applied to study the performance of centralized, distributed, parallel, and client/server systems. The course also discusses performance measuring tools for operating systems such as Unix and Windows NT. Prereq: operating systems fundamentals or equivalent.
CS 825 - Computer Networks
Introduction to local, metropolitan, and wide area networks using the standard OSI reference model as a framework. Introduction to the Internet protocol suite and to network tools and programming. Discussion of various networking technologies.
CS 830 - Introduction to Artificial Intelligence
In-depth introduction to artificial intelligence concentrating on aspects of intelligent problem-solving. Topics include situated agents, advanced search techniques, knowledge representations, logical reasoning techniques, reasoning under uncertainty, advanced planning and control, and learning. Prereq: data structures.
CS 835 - Introduction to Parallel and Distributed Programming
Programming with multiple processes and threads on distributed and parallel computer systems. Introduces programming tools and techniques for building applications on such platforms. Course requirements consist primarily of programming assignments. Prereq: Undergraduate course in operating systems fundamentals and computer organization; or permission.
CS 845 - Formal Specification and Verification of Software Systems
Course focuses on the formal specification and verification of reactive systems, most notably concurrent and distributed systems. Topics relevant to these systems, such as non-determinism, safety and liveness properties, asynchronous communication or compositional reasoning, are discussed. We rely on a notation (T LA+, the Temporal Logic of Actions) and a support tool (TLC, the TLA+ Model Checker). Prereq: Students are expected to be knowledgeable in logic and to be able to write symbolic proofs in predicate calculus. A basic understanding of the notions of assertion, precondition, and post-condition is also assumed.
CS 851 - System Requirements Engineering
This course focuses on the skills required to identify, analyze, synthesize, and manage system requirements. It addressed the key requirements gathering and analysis tasks throughout the system life cycle. Participants learn about the requirements process, explore what constitutes good requirements, and understand how requirements are documented. A case study provides practice and feedback on key skills of the requirements process. Techniques and models are introduced that must be considered in defining systems that achieve higher customer satisfaction within constraints. Interpersonal skills critical to interacting with stakeholders (e.g., customers and users) are emphasized coequally with technical issues.
CS 852 - Software Architecture Concepts
A software architecture concerns the top-level structures of a software system, the externally visible properties of those structures, and their interrelationships. This course examines the role of architecture in satisfying an organization's business requirements. The hard choices that must be made by the architect to fulfill the often conflicting needs of performance , availability, security, interoperability, and modifiability are highlighted. Other topics include representations of architectures, case studies, and the role of architecture in product lines.
CS 853 - Software Project Management
This course addresses an advanced set of software project management essentials that can affect the bottom line of project technical and business performance. The focus is on larger scale complex projects that a student is likely to encounter in the workplace after 3-5 years of experience. These essentials are termed "best practices, " and those addressed are: formal risk management, agreement on interfaces, metrics based scheduling/tracking, frequent binary completion milestones, incremental development, people aware management style, and change management. The emphasis is on software intensive projects; however, the basic principles are pertinent to a wider class of project domains that involve intellectual product development where problem discovery is a main characteristic.
CS 858 - Algorithms
An introduction to important concepts in the design and analysis of algorithms and data structures, including implementation, complexity, analysis, and proofs of correctness. Prereq: understanding of basic data structures, familiarity with proof methods and basic concepts from discrete mathematics and the ability to program with recursion.
CS 859 - Theory of Computation
Models of computation, Church's thesis, completeness, undecidability. Time and space complexity of Turing machines. Savitch's theorem and hierarchy theorems. NP-completeness and Cook's theorem. Prereq: introduction to the theory of computation.
CS 860 - Introduction to Human-Computer Interaction
Human-computer interaction is a discipline concerned with the design, evaluation and implementation of interactive computing systems for human use and with the study of major phenomena surrounding them. Prereq: operating systems fundamentals.
CS #865 - Introduction to Computational Linguistics
Introduction to computational analysis of natural language, with a focus on semantic representations and the resolution of ambiguity. Provides an elementary working knowledge of linguistic and artificial intelligence methods as motivated by examples of potential input text. Topics include parsing, formal grammars, representation of knowledge and memory, inference, and interpretation of non-literal language. Prereq: elementary knowledge of LISP or permission.
CS 867 - Interactive Data Visualization
Detailed discussion of how an understanding of human perception can help us design better interactive displays of data. Topics include: color, space perception, object perception and interactive techniques. Students write interactive programs, give presentations and undertake a project designing and evaluating a novel display technique. Prereq: Introductory level C or C++ programming course. (Also listed as OE 867.)
CS 870 - Computer Graphics
Input-output and representation of pictures from hardware and software points of view; interactive techniques and their applications; three-dimensional image synthesis techniques. Prereq: data structures.
CS 871 - Web Programming Paradigms
CS 875 - Database Systems
Database analysis, design, and implementation. Focus on the relational model. Data description and manipulation languages, schema design and normalization, file and index organizations, data integrity and reliability. Usage of selected DBMS. Prereq: data structures; mathematical proof.
CS 880 - Topics
Credits: 1.00 to 4.00
Material not normally covered in regular course offerings. May be repeated.
CS 898 - Master's Project
CS 899 - Master's Thesis
Credits: 1.00 to 6.00
May be repeated up to a maximum of 6 credits. Cr/F.
CS 900 - Graduate Seminar
Regularly scheduled seminars presented by outside speakers, UNH faculty, and graduate students. Topics include reports of research ideas, progress, and results. Cr/F.
CS 920 - Advanced Operating Systems
This course covers techniques for formally analyzing various fundamental concepts and mechanisms which form the basis of the design of advanced operating systems, including distributed, database, and multiprocessor operating systems. Topics covered include synchronization, mutual exclusion, distributed algorithms, security, fault-tolerance, and distributed resource management. Prereq: operating system fundamentals or equivalent.
CS 925 - Advanced Computer Networks
Design and analysis of computer networks. Modeling and performance evaluation, queuing theory applied to computer networks. Traffic flow management and error control. Routing algorithms and protocols. Switch and router architectures. Selected issues in high-speed network design. Optical networks. Prereq: CS 825 or equivalent.
CS 931 - Combinatorial Search and Heuristic Optimization
The goal of this class is to teach you how to cope with intractable combinatorial optimization problems. Focuses on techniques from artificial intelligence that attempts to combat intractability by exploiting as much available information as possible. Covers concepts and algorithms for solving shortest-path, constraint satisfaction, and combinatorial optimization problems, and their application in areas such as planning, robotics, and bioinformatics. Emphasis on important or recent papers in the field. Prereq: Introduction to Artificial Intelligence.
CS 975 - Object-Oriented Database Systems
Introduction to object-oriented database systems, concepts and design; object-oriented data models and languages; implementation issues and mechanisms. Prereq: CS 875.
CS 980 - Advanced Topics
CS 981 - Advanced Topics in Database Systems
CS 986 - Advanced Topics in Formal Specification and Verification
This course explores more thoroughly some of the material introduced in CS 845. It focuses on concurrent and reactive systems and on temporal logics. Topics include safety and liveness properties, asynchronous communication, and compositional reasoning. Support tools, like interactive theorem provers and model-checkers, are presented and used in class. Prereq: introduction to formal specification and verification. May be repeated up to a maximum of 6 credits.