Computer Information Science
CIS1130 Foundations of Computer Science (4)
Prerequisite: Math Placement Level 4 or concurrent enrollment in MTH1320 or permission of instructor
This course covers structured problem-solving with Java (steps in building software applications: problem analysis, structures, flowchart, pseudocode, algorithm design, and modularity), number systems and data representation, and an overview of computer organization. Topics include data types, Boolean expressions and operators, applications and applets, conditional and repetitive structures, methods, arrays, strings and characters, graphical user interface, files, and streams. Emphasis is placed on modular approach to programming methodology. Credit may be applied toward General Education Computational Sciences.
CIS1130L Programming Laboratory (1)
Prerequisite: Permission of instructor
This course is highly recommended to be taken concurrently with CIS 1130 and CIS1140.
May also be taken by students in other Computer Science courses. Students are introduced to general Unix commands and interface facilities and receive individualized assistance with programming assignments. Consultation and feedback concerning a student's approach to design and implementation of computer programs are offered. May be repeated for credit. Does not satisfy any General Education requirement.
CIS1140 Data Structure and Abstraction (4)
Prerequisites: MTH1321 and MTH2419 or permission of instructor
Focuses on object-oriented approach with Java to a variety of abstract data types and their associated algorithms. Topics include algorithm analysis, recursion, stacks, queues, lists, trees, binary trees, AVL trees, recursive techniques for implementing generic data structures, sorting algorithms, divide and conquer, complexity analysis for some search and sort algorithms, and hashing.
CIS1150 Computer Organization (4)
Prerequisites: CIS1140, MTH1321, and MTH2419 or permission of instructor
Introduces digital design and computer architecture. Topics include Boolean algebra, digital and logic circuits, arithmetic-logic unit design, microarchitecture, implementation, management and interrelationship of processors, memory systems, and I/O subsystems. Instruction sets, registers, addressing modes, and assembly language programming are included.
CIS2211 Algorithms and Complexity (4)
Prerequisites: CIS1140, MTH1321, and MTH2419 or permission of instructor (MTH1330 and MTH2522 recommended)
Covers algorithm and analysis/complexity, divide and conquer algorithms, searching and sorting algorithms, dynamic programming, Greedy approach, backtracking, complexity analysis for searching and sorting algorithms, P and NP classes of algorithms, and parallel algorithms.
CIS2221 Programming Languages and Compiler (4)
Prerequisites: CIS1140, CIS1150, MTH2419 or permission of instructor
Basic elements of programming language design, organization, and implementation are studied. Topics include comparison of imperative, functional, and object-oriented programming plus an overview of methods for parsing, compiling, interpretation, and optimization as well as language design, BNF notation, and grammars. Elements of programming languages such as data types, expressions, assignment, control structures, subprograms, parameter passing, ADT, OOP, exception handling, functional languages, and LISP programming are covered. The student project for this course is to design and implement an interpreter/simple language.
CIS2233 Database Management Systems (3)
Prerequisites: CIS1140 and MTH2419 or permission of instructor
Focuses on file organization and storage management, access methods, logical versus physical organization, and relational, network, and hierarchical models. Topics include database architecture, schemas and query facilities, transaction processing, recovery, concurrency, distributed systems, and issues of performance, integrity, and reliability. The student project is to design and implement an Oracle DBMS application.
CIS2235 Computer Operating Systems and Unix Utilities (4)
Prerequisites: CIS1140, CIS1150, and MTH2419 or permission of instructor (MTH2522 is recommended)
Focuses on operating systems design and implementation. Topics include process scheduling, management and protection, concurrency, deadlock control, synchronization, communication plus memory and virtual memory management, I/O processing, disk management, file system, protection, security and performance issues, distributed systems,
projects, and applications. UNIX commands, UNIX processes, file system, vi editor, mail and communication, shell environments, regular expressions, shell scripts, UNIX utilities (grep, awk, sed, find), intro to system calls, and security and administration are also covered.
CIS2243 Computer Network and Network Programming (4)
Prerequisites: CIS1140 or permission of instructor (CIS1150 is recommended)
Focuses on methodologies for interconnecting computers and design, implementation of network-based applications, and interaction with a variety of common servers. Topics include network architectures, topologies, and protocols and their associated algorithms plus local and wide area networks, hardware and software aspects of the layered approach to computer networks, and LAN technology. Processes, pipes, signals, multithreading, synchronization, socket programming, TCP Protocol, use of common modules to perform file transfer (FTP), getting e-mail (POP), sending e-mail (SMTP), Telnet connection, Web clients, forking servers and daemons, performance, data integrity, and security are also covered.
CIS2245 Software Engineering (3)
Prerequisite: Junior or senior standing in Computer Science or other CS related program or permission of instructor
Focuses on software development phases: analysis, specification, modularization of a problem, module implementation and testing, interface implementation, integration and
testing, documentation, reviews, and post-distribution support plus object-oriented methods. Software metrics and computer-aided software engineering tools are studied. A team approach to developing and implementing software projects using the SE phases and methods is emphasized.
CIS2255 Computer Graphics (3)
Prerequisites: CIS1140, MTH1330, and MTH2419 or permission of instructor (MTH2522 and MTH2450 are recommended)
Focuses on graphics hardware, fundamental graphical algorithms, two- and three-dimensional representation, transformations, viewing parameters, hidden line/surface removal, shading, intensity and color, animation techniques, splines, and surface creation.
CIS2261 Object Oriented Design and Programming (3)
Prerequisite: CIS1140 is recommended
Focuses on major principles of object-oriented design and analysis, including data abstraction, encapsulation, inheritance, and polymorphism. Concepts are illustrated in the context of C++ programming. Topics include classes, data abstraction, templates, function and operator overloading, friends, derived classes, virtual functions, C++ I/O and Standard Template Library, and object-oriented design with UML.
CIS2277 Web Programming I - Client Side (3)
Prerequisite: CIS1130 or permission of instructor (CIS1140 is recommended)
Focuses on design and implementation of real-world client-side Web applications. Topics
CIS2278 Web Programming II - Server Side (3)
Prerequisite: CIS2277 or permission of instructor (CIS1140 is recommended)
Focuses on design and implementation of real-world server-side applications using JSP/Servlets/JDBC and Oracle or MySQL. Topics include JavaBeans, tag libraries, tracking sessions, servlets, creating databases with Java, querying databases with Java and Database Connectivity (JDBC), handling e-mail, Struts framework, and security.
CIS2341 Quality Assurance and Testing (3)
Describes the role of testing in quality engineering and identifies the common objectives, principles, and purposes of testing. Introduces structured, preplanned testing processes, techniques, and tools. Explains the characteristics, differences, and reasons for specification-based (black box), structure-based (white box), and experience-based tests. Students write test cases using equivalence partitioning, boundary value analysis, decision tables, and state transition diagrams, understanding the main purpose of each technique and what sufficiency of coverage is for each technique.
CIS2355 Mobile Device Programming (3)
Introduction to programming the iPhone or iPod Touch. Review of object-oriented programming concepts. Introduction to Objective-C syntax, CocoaTouch Framework, XCode IDE, Interface Builder, and the iPhone Software Development Kit to write original programs for the iPhone or iPod Touch using the available tools.
CIS2885 Senior Project (3)
Prerequisites: Senior standing in Computer Science or other CS related program and permission of instructor
This is the senior capstone course and project. The course emphasizes methodology and implementation of a team approach to management, analysis, design, development, implementation, and testing of a software application. The project will follow the software engineering specific phases. Modular approach, coordination techniques, and object-oriented and/or other software development methods are included. May be repeated for credit. Credit may be applied toward General Education Computational Sciences.
CIS2886 Special Topics in Computer Science (3)
Prerequisite: Permission of instructor
Designed to address evolving areas in computer science. May be repeated for credit.
CIS2894 Laboratory/Teaching Assistant (1-3)
Prerequisite: Permission of instructor
Provides an opportunity for Computer Science majors to gain practical experience and earn credit by assisting instructors or by participating in systems management activities or in Computer Science Program/Lab project.
CIS2999 Independent Study in Computer Science (1-3)
Prerequisite: Permission of instructor
Provides an opportunity for independent study or research under the direction of an instructor. See Undergraduate Policies and Procedures for more information on Independent Study.
CIS4210 Computation and Optimization Algorithms (3)
This course focuses on new tools for software engineering that inform the systematic,
disciplined, and quantifiable processes of developing, operating, and maintaining software. Students will study foundations for the successful integration of evolutionary computation into software engineering techniques ranging from genetic algorithms to swarm optimization theory to ant colony optimization, demonstrating their uses and capabilities. These techniques are applied to aspects of software engineering such as software testing, quality assessment, reliability assessment, and fault prediction models, among others, to provide researchers, scholars, and students with the knowledge needed to expand this burgeoning application.
CIS4233 Database Design, Implementation, Optimization, and Performance (3)
This course covers basic database theory, including models, representations, views, relational calculus, SQL, normalizations, and indexing/ transactions/ concurrency/recovery. The students will be introduced to the most recent advances in database technologies and concepts such as NoSQL, Hadoop, Object-oriented database, etc.
CIS4240 Software Analysis and Requirements (3)
Defining the requirements is the first, and most critical, step in software system development. Requirements engineering is one of the least understood and hardest phases in the development of software products, especially because requirements are often unclear in the minds of many or most stakeholders. This course deals with the identification of stakeholders, the elicitation and verification of requirements from them, and translation into detailed requirements for a new or to-be-extended software product. It deals further with the analysis and modeling of requirements, the first steps in the direction of software design. Also formal and innovative methods for requirements specification, including iterative and several Agile methodologies, are discussed
CIS4245 Software Design and Architecture (3)
The purpose of this course is to provide students with a solid foundation in most modern concepts and best practices in creating a software product. It is expected that students will learn how to analyze and design large-scale software applications and apply different architecture styles and patterns to software design. Case studies and projects are assigned as a practical component of the course.
CIS4261 Advanced Object-oriented Technology (3)
Students explore the concepts, fundamental syntax, and the thought processes behind true object-oriented technology. The concepts of architectural patterns and their application to software are practiced.
CIS4275 XML Web Services and SOAP (3)
Web services revolutionize the way businesses interact by enabling interoperability between applications on different hardware and software platforms. The Java APIs for XML Web Services (JAX-WS) deliver a set of powerful tools to develop a Service-Oriented Architecture (SOA). This hands-on course provides students with the skills to design and build Web services using Java. Students develop services and clients using the latest standards-based technologies and deploy secure Web services that integrate proven security strategies.
CIS4278 Web Application Development (3)
CIS4341 Quality Assurance and Testing (3)
This course covers the theory and application of the capability maturity model, including process assessment, modeling, and improvement techniques. Lifecycle issues related to development and maintenance, quality, safety, and security assurance, project management, and automated support environments are also reviewed. Students participate in group projects and case studies.
CIS4350 Client-side in Web Application Development UGCC
Prerequisite: CIS4278 or equivalent
CIS4355 Mobile Device Programming (3)
Students explore the effects of mobile computing on software design and development. The course uses current research projects in the field of mobile computing to highlight the key aspects that complicate software engineering. Emphasis is on these concerns in the context of application development.
CIS4365 Secure Software Engineering (3)
This course covers best practices for designing secure systems with particular emphasis on software engineering. Various criteria for designing secure systems are reviewed and then applied to real systems. Students study techniques for analyzing system properties and for verifying program correctness and application for examining existing protocols. Other topics include the limits of techniques for software protection such as code obfuscation, tamper-proofing and water-marking, analysis of software-based attacks (and defenses), timing attacks and leakage of information, type safety, and capability systems.
CIS4375 Software Engineering for Cloud Computing (3)
Students study the architecture, implementation and evolution methodologies for Cloud Computing. Topics covered include infrastructure-as-a-service (IaaS) such as Amazon Web Services, or AWS; platform-as-a-service (PaaS), including Google App Engine or Azure; software-as-a-service (SaaS) (e.g., salesforce.com); or in frameworks that enable the above like Apache Hadoop or Microsoft’s Dryad.
CIS4385 Software Project Management (3)
Students learn how to plan and control the development activities and tasks of a project, including schedule and cost estimation, development of a master program plan, defining task interrelationships, and tracking and measuring the progress of a project.
CIS4388 Professional, Ethical and Legal Issues for Software Engineers (3)
Students explore professional, legal, and ethical issues pertaining to software engineering, including a professional codes of ethics, social justice issues and their impact, intellectual property laws, computer privacy, and human-computer interaction. The course also includes a review of relevant regulatory documents and their applications in analyzing case studies.
CIS4880 Capstone Software Project I (3)
CIS4881 Capstone Software Project II (3)
In this two-term project sequence, students explore and use specific software engineering phases, software management and development tools, and quality assurance procedures in order to develop a complex software project.