Course Catalog

The course is an introduction to programming and to the use of algorithms in designing programs. A software engineering approach to developing computer programs is stressed and object-oriented concepts are introduced. The course examines standard control structures, approaches to modularization, and the use of primitive and structured data types.  
This course is a continuation and extension to GEIT 1411 Computer Science I. It introduces the student to a systematic study of basic data structures such as queues, stacks and binary trees including searching and sorting algorithms and their associated computational costs. A software engineering approach to developing computer programs is stressed and object-oriented concepts are emphasized. Reusability of code, effective software development methodologies and good programming practices are significant components of the course. 
Data structures is the systematic study of some advanced data structures, including list, stack, queue, dictionary, and graph. Sorting and hashing algorithms and their associated computational costs are discussed. Algorithm analysis techniques are also investigated to provide a metric to measure the performance of an algorithm in question.  
This course is designed to educate students on the impact ethical issues have on the use of information technology in the modern business world. It examines the ethical codes of the professional societies and the philosophical bases of ethical decision-making. Students acquire the foundation that helps them make appropriate decisions when faced with ethical dilemmas ethics and professional conduct in the workplace.  
This course is about the study of objects that have discrete as opposed to continuous values including the foundations of logic, algorithms and their complexity, mathematical reasoning, relations, graphs, trees and combinatorics.  
This course examines the functional components of computer systems. Topics discussed include processors, memory types and hierarchies, buses, I/O, interrupts, etc. with emphasis on how they affect program execution, parameter passing and inter-program communications between programs written in diverse languages. 
The objective of this course is to give students an understanding of key issues related to database design and implementation to support the automation of key business processes in organizations. The course is designed so as to cover topics that are relevant from a database design and implementation perspective; particularly one that involves the provision of online access to data resources to a variety of physically distributed organizational users. It includes a mix of lectures (some of which are conducted in the laboratory) and discussions on contemporary articles from industry publications.  
The course is designed to provide an introduction to the theory and practice of software development and maintenance. The focus is on the full software development life cycle, including coverage of tools, techniques, principles, and guidelines for software requirements, specification, design and implementation. Particular emphasis is placed on the principles and methods used to develop and validate software requirements. Students are guided toward a better understanding of the various tasks and specialties that contribute to the development of a software product.  
This course provides opportunities for students to apply the academic concepts, skills and techniques learned in their coursework to a professional work-oriented setting. The course offers the potential for a one-semester internship with a regional employer or a directed study course providing practical learning experiences that benefit the community. 
This is the capstone course required of all students pursuing an undergraduate degree program within the College of Information Technology. The objective of this course is to bring together in an applied manner the knowledge and skills obtained by the students throughout their undergraduate program. The course is designed so as to cover topics that are relevant from an integrated IT systems design and implementation perspective. The term “integrated IT systems design and implementation” refers to complex collaborative efforts that bring together knowledge skills in the related areas of computer science, computer engineering, and information technology (as covered by the three undergraduate programs offered by the College of Information Technology). The course is very applied. One of its main components is a team project focusing on integrated IT systems design and implementation. The course also includes a mix of speakers’ presentations, project work, and discussions on contemporary articles from industry publications.   
This course exposes students to the problem of determining and specifying what a proposed software system should do, why and for whom the system is needed—not how the system should do it, which is the topic of downstream software engineering activities such as design and coding. The course will discuss concepts for systematically establishing, defining, and managing the requirements for a large, complex, changing and software-intensive systems, from technical, organizational, and management perspectives. The course will consider the past, present, and future paradigms and methodologies in requirements engineering. The course will cover informal, semi-formal, and formal approaches, while striking a balance between theory and practice. The course will involve building models of both requirements engineering process and requirements engineering product, concerning both functional and non-functional goals/requirements/specifications, using a systematic decision-making process.  
The primary objective of this course is to expose students to the advanced use of information technology in the design and implementation of Web-based business applications to support c-commerce. The course presents concepts, methodology, and tools for designing, implementing, and management of e-commerce applications in a business-to-business paradigm.  
Designing software is an integral part of engineering a software product. Poorly designed software exposes systems and the organizations they serve to many risks ranging from innocent defects injected during development to more sinister assurance vulnerabilities that might compromise the systems’ mission. Effectively designed software ensures a product that evolves with its changing environment, providing the requisite functionality within the expected performance parameters. Design is both a process and a product – a creative process producing a software artifact that models key aspects of the system.
The main goal of this course is to provide an introduction to the area of designing a software system. The challenges that are faced and the techniques used in professional design of complex industry-grade software will be covered. This course will also expose students to several research topics in the area of software engineering. This course presents software design principles in the context of software engineering that enables software engineers to produce and deliver software on-time, on-budget, and on specification. 
The main goal of this course is to provide an introduction to software testing, bug detection, and maintenance techniques. This course covers concepts of software quality, software quality metrics, software quality assurance planning and implementation, quality process standards, validation and verification, reviews, walkthroughs and inspections, and mechanisms for testing and validating software systems test data.  
This course will introduce the concepts and techniques for managing software projects. The students will learn the basic project management concepts including process groups, knowledge areas and project management lifecycles with special focus on Agile approaches. The students will learn techniques for initiating, planning, launching and monitoring software projects. They will also learn tools and techniques related to software configuration and build management. They will learn software project management tools and use it to manage their software project.  
This course studies the problems and solutions related to developing large-scale software systems. It examines topics from the motivation for change-maintenance-evolution in software and its limitations and implications to the process of change-maintenance-evolution and its tools. 
This course is aimed at helping students understand how to develop secure software. This course will provide students with a good understanding of the theories and tools used for secure software design, threat analysis, secure coding, and vulnerability analysis. Students will study, in-depth, vulnerability in order to understand how to protect software and how to secure software. Students will learn various software vulnerabilities, and the strategies to prevent them during software lifecycle. Students will also be exposed to best security practices and will learn about models for analyzing software security. The class will also cover various analysis and design techniques for improving software security, as well as how to use these techniques and tools to improve and verify software designs and security. Finally, the course will discuss technical trends affecting software security.  
Formal Methods in Software Engineering introduces students to the mathematical tools used to rigorously specify, design, implement, and validate software. Mathematical precision that leads to achieving the required level of quality can be used in all phases of the software development cycle, from requirements specification to module specification (whether axiomatic, algebraic or trace specifications) and ending with verification and specification-based validation.  
Programming in UNIX Environments teaches students how to write software that interacts with a computational device through a UNIX-based operating system. The course starts by covering the essential commands and script languages used in a UNIX environment, continues with UNIX application programming in C and ends with program development in assembly language. 
A concurrent program consists of multiple “threads of control” that execute at the same time, possibly on multiple processors. It is quite challenging to write efficient and correct concurrent programs. This course provides an introduction to the models, mechanisms and techniques that can be used to write concurrent programs.  
The astronomical growth of data during the past decade has created an unprecedented opportunity for data mining (sometimes called data or knowledge discovery). This is the process of analyzing data from different perspectives and summarizing it into useful information—information that can be used, among other purposes, to increase business revenue, cuts costs, or both. In SOEN 4463: Data Mining, students will be taught many topics related to data mining, including data clustering, classification, association rules / sequential patterns, and anomaly detection. Surveys of some data mining tools and applications will also be covered. Students will be provided with hands-on training to visualize and interpret the results using data mining toolkits.
Cloud computing has emerged in recent years as a new paradigm for hosting and delivering services over the Internet. This course is designed to introduce the fundamental concepts of this technology and allow students to have an opportunity to explore the various terminology, principles and applications of cloud computing. The course will expose students to different views of understanding cloud computing such as theoretical, technical and commercial aspects. A variety of real-world case studies and existing cloud-based tools will be identified and studied in order to provide students with a close overview of cloud computing applications.
This course covers the architecture and protocols of local and wide-area networks, including signaling, data representation, error control, flow control, and routing. The C++ or Java-based sockets API is used to provide practical examples of communication, error control, and flow control. Peer-to-peer and client/server configurations based on UNIX/Linux and Windows architectures are explored.
This course is designed to introduce the students to the concept of distributed systems. Such systems consist of a set of PCs or workstations connected by a network that run special software and allow for transparent sharing of the distributed computing resources and data. The main area of focus will be the ways in which computer resources connected by a network can be used and shared. This includes using them for parallel computing, resource and file sharing, data and communication, and availability. SOEN 3463: Distributed Systems will also provide students with an appreciation of the scopes and limitations of distributed systems, to make them familiar with current design trends and philosophies in distributed systems seen from both software, hardware and applications viewpoints.
Programming languages is the study of basic concepts and constructs underlying the design of the modern programming languages. Various programming paradigms, including object-oriented, functional, logic, and concurrent programming, are discussed.