Software Engineering

Chairperson: Dr. Muhammad Umair Khan, Assistant Professor of Software Engineering
Ph: +966 11 289 0827
E: mumkhan@alfaisal.edu

Web address: https://coe.alfaisal.edu/en/se-home
       

General Department Information

Anywhere you look certainly you will find software taking care of business: on your computer and in your smartphone, in your dishwasher and in your car, in the bank, supermarket, or mall, on the streets or in your house. Software makes things run smarter and cheaper, generally providing a better quality of life. And since software has become a main and important part of life, it needs professionals to take care of how it is designed, implemented and installed, and to make sure that it stays working correctly after it is installed. This is what Software Engineers do.

There are many things a Software Engineer can be a part of that mainly involve developing software. A sophisticated software, like any other man-made complex system, needs to be engineered based on very well-defined laws and techniques. The development must follow well-defined software development processes.  A software engineer must learn various programming and software development techniques, and must acquire a fair understanding of different software platforms in order to be able to design software that runs on those different platforms (e.g. desktops, laptops, pads, smartphones, game consoles). But for a software developer to know what to develop, he or she needs to know what all the requirements for the software are. These requirements may be broadly separated into what the software system must do (functional requirements), and how it is supposed to do it (non-functional requirements). Consider, for instance reliability as a non-functional requirement.  In the case of software running a fighter jet or a pacemaker, both the equipment and the software running it must be absolutely reliable with no room for failure. However, lesser reliability can be tolerated in a game running on your Android. Accuracy, is another non-functional requirement. Would you consider what could go wrong if the software running your bank made a mistake in its calculations? For these and for other reasons, it is vital that a software engineer regularly interacts with the client to make sure that the developers know what the expectations from the software exactly are before it is designed and implemented. You may also know that it is important that a software is extensively tested before it is delivered to the client or made available to the public. Testing and validation is a major phase in the software engineering process. It achieves a main objective, which is making sure that the software meets the clients' requirements. And due to the complexity and the size of the software, oftentimes a software engineer is not directly involved in these different stages, but in managing how the software evolves from one stage to another. Crafting a process for developing a software is not an easy task, as sometimes many people can participate in the software, and they may not necessarily be in the same room, building or country. Engineering a software development process has hence become one of the important disciplines that a software engineer can excel at.

Today, in Saudi Arabia and the world, there is a great demand for software engineers. Local companies like Microsoft, IBM, Cisco Systems, Oracle, Aramco, SCECO, SABIC, banks, telecommunications providers and carriers such as STC, Mobily and Zain, in addition to multinationals such as Google, Apple, Microsoft, Siemens and Telus – all have constant interest in software engineers across all branches. Here, at Alfaisal University, we have a world class SE program that helps prepare you for the international job market, and that makes you able to take part in powering up the world.                                   

Classes

SE 100: Programming for Engineers

SE 100: Programming for Engineers 3 (3-0-0) The course introduces the students to basic notions of computers and computing and then introduces them to programming starting from abstract ways like flowcharts and pseudocode and finally using a typical programming language. The students will be introduced to the basic concepts of data types and structures, operators, and the different ways of data storage, manipulation, and representation. Emphasis is on problem-solving and structured program design methodologies.

SE 100 L: Programming for Engineers Lab

This course constitutes the lab component of the Programming for Engineer course (SE 100). The purpose of this lab is to provide hands-on training on programming concepts, technologies and techniques, introduced during lectures.

SE 117: Software Practice and Society

This course examines the role of computers and software and their impact on society. It discusses Ethical Foundations for IT professional and IT users; Governance, Regulations, and Computer and Internet Crimes; Intellectual Property; Privacy; Security; Professional Responsibility from the perspective of software engineering and the local and regional laws and regulations.

SE 120: Object-Oriented Programming I

After completing this course, students will be equipped with the necessary skills and tools to write programs in Java based on a procedural and object-oriented approach. Topics of focus will include basic Java programming, conditional statements, strings, iteration, methods, arrays, creating classes, encapsulation, inheritance and polymorphism, abstract classes, packages, principles of object-oriented design, as well as exceptions and interfaces.

SE 120 L: Object-Oriented Programming I Lab

This course constitutes the lab component of the Object-Oriented Programming I course (SE 120). The purpose of this lab is to provide hands-on training on the basics of Java and advanced object-oriented programming. Topics covered include data types and operators, logical expressions, control structures, methods, arrays, inheritance; polymorphism; abstract classes and interfaces. be covered.

SE 201: Introduction to Software Engineering

This course is designed to present students with several principles relevant to Software Engineering. Students will gain insights into various software process models throughout the course. The curriculum strongly emphasizes the agile software development approach, highlighting the importance of adaptability and collaborative teamwork. Students will acquire knowledge and skills in requirements engineering. The course covers systems modeling and project management strategies. It addresses the value of software reuse and introduces students to human computer interaction and software testing. The final segment of the course focuses on configuration management.

SE 212: Discrete Structures for Software Engineers

This course covers the mathematical elements of computer science including formal logic, propositional logic, predicate logic, logic in mathematics, sets, functions and relations, recursive thinking, mathematical induction, counting, combinatorics, algorithms, matrices, graphs, trees, and Boolean logic. Students will learn to recognize and express mathematical ideas graphically, numerically, symbolically, and in writing.

SE 214: Algorithms and Data Structures

The course involves the study of important data structures and sorting methods commonly encountered in object-oriented software engineering. It covers the design, performance analysis, and implementation of the related algorithms, stressing their practical use and performance.

SE 214 L: Algorithms and Data Structures Lab

Survey of important computer algorithms and related data structures used in object-oriented software engineering. Design, performance analysis and implementation of such algorithms, stressing their practical use and performance certification of large software applications. Understand how to "seal" designs to guarantee performance goals and ensure that all error conditions are caught. Laboratory experiments dealing with Algorithms and Data Structures.

SE 220: Object-Oriented Programming II

This course should provide students with all necessary skills and tools to develop applications based on an object-oriented approach. Topics of focus will include GUI, event-driven programming, advanced GUI, text and binary I/O.

SE 220 L: Object-Oriented Programming II Lab

This lab should provide students with all necessary hands-on practice on Object oriented II with a good review of Object oriented I basics to build GUI applications that can help students in solving more complex problems. Laboratory experiments dealing with advanced Object-Oriented Programming.

SE 225: Software Requirements

Introducing key aspects of the requirements process, starting with the creation of a vision document, and establishing project scope. Elicitation techniques, system context and use case modeling, and the seamless transition from use cases to implementation and test cases will be introduced. Crucial topics will be covered like misuse case modeling, prototyping, fundamentals of goal orientation, requirements management, change management, and the creation and validation of supplementary specifications.

SE 225 L: Software Requirements Lab

It is meant to provide hands-on training in using use case modelling and Unified Modelling Language (UML) tools for requirements. It covers Object Oriented Design (OOD) using UML. Definition and goals of software design. Relationships between classes. UML diagrams for requirements and design: class, activity, sequence. etc.

SE 310: Software Design and Architecture

The course gives students an understanding of the concept of software architecture and how this phase in the development between requirement specification and detailed design plays a central role for the success of a software system. The students will get knowledge of some well-known architecture patterns, and be able to design, construct and evaluate architectures for software systems. In addition, the students should get some understanding of how the developers' experiences and the technical and organizational environment will influence on the choice of architecture.

SE 312: Database Management Systems

The course gives students an understanding of the key concepts of database management systems required in the development of most software applications by introducing the principles of relational database management systems such as basic concepts and architecture, Entity-Relationship data model and constraints, the use of basic and complex SQL query language, data normalization forms, relational algebra and calculus and transactions and concurrency control.

SE 312 L: Database Management Systems Lab

This course covers basic database concepts, conceptual data modeling, relational data model, relational theory and languages, database design, SQL, and introduction to query processing and optimization.

SE 314: Operating Systems

This course introduces the fundamentals of function, design, and implementation of computer/mobile operating systems. Students will learn processes, threads, concurrent programming, interrupt handling, CPU scheduling and process synchronization, memory management, deadlocks, and file system.

SE 314 L: Operating Systems Lab

This course introduces the fundamentals of function, design, and implementation of computer/mobile operating systems. Students will learn processes, threads, concurrent programming, interrupt handling, CPU scheduling and process synchronization, memory management, deadlocks, and file system. Laboratory experiments dealing with advanced Operating Systems.

SE 322: Internet of Things Application Development

This course is designed to provide students with technical knowledge and skills to build Internet of Things (IoT) systems and applications. The course will cover the design of microcontroller-based embedded systems. In addition, it will cover IoT paradigms, including the integration of various components such as sensors, actuators, and communication modules, IoT design considerations, constraints, and development processes for IoT applications in different sectors. 

SE 324: Web Application Development

The course focuses on learning fundamentals of Web-based programming techniques, Web application development and client-server database integration. It provides in-depth coverage of introductory programming principles, various markup languages, client-side scripting, server-side scripting and relational databases. The course also introduces sessions, cookies, and the application of XML in web building.

SE 328: Mobile Application Development

This course examines the principles of mobile application design and development. Students will learn mobile application development on different platforms. Topics will include designing and building user interface, input methods, data handling, network techniques and URL loading, and, finally, specifics such as GPS location integration, and REST API communication, along with SQLite database and Firebase integration.

SE 328 L: Mobile Application Development Lab

This course constitutes the lab component of the Mobile Application Development course (SE 328). It is meant to provide hands-on training on mobile application design and development. Android will be used as a basis for teaching programming techniques and design patterns related to the development of stand alone applications and mobile interfaces. Emphasis is placed on the processes, tools and frameworks required to develop applications for current and emerging mobile computing devices that rely on different types of databases including Firebase, SQLiTe and shared preferences.

SE 330: Introduction to Cybersecurity

The purpose of the course is to provide the students with an overview of the field of Cyber Security. Students will be exposed to a wide spectrum of security techniques used to protect information assets, manage risk, and detect and react to threats to information assets. In this module, students will learn about data/system/network protection mechanisms, intrusion detection systems, models of security, cryptography, hashing, authentication and non-repudiation, network system security, attack strategies, malware, secure applications (development), and cyber-security policy.

SE 390: Software Engineering Summer Internship

An 8 – week long field training opportunity to allow students to perform discipline related tasks for leading organizations in the respective field of Software Engineering. Students are expected to commit to the framework of the organization and to relate to the general practices and workplace ethics.

SE 412: Software Testing and Quality Assurance

The course focuses on software verification and validation throughout the software life cycle, including reviews (inspections and walkthroughs), testing techniques (functional and structural '96 black box and white box), levels of testing (unit, integration, system, and acceptance), and testing tools (static and dynamic). Testing and quality assurance standards.

SE 414: Software Project Management

This course introduces project management concepts, tools, and techniques. It covers the five process groups of project management namely, Initiating, Planning, Executing, Monitoring & Controlling, and Closing. In addition, the course covers how these process groups interact with the different knowledge areas of project management: integration management and project planning, scope management, scheduling, budget control, human resource management, communication management, risk analysis and management, project quality management, and procurement management.

SE 423: Software Construction and Processes

This course introduces principles and techniques to develop software such that it is more maintainable and evolvable. This implies that the developed software is traceable, easy to understand, and ready for change. Such qualities are necessary for all software which will have a considerable lifespan and would have additions/changes in their functionality during their lifetimes. The course will discuss the most common design patterns which help in making a software more robust. Software reengineering will also be introduced since many of the largest software systems are successors of existing systems and in the absence of clear documentation, most of the time, functional details and design choices must be extracted from existing code. The course will also introduce the concept of functional programming, its differences with imperative programming languages, its uses and its pitfalls. Understanding of functional programming will help students explore a new programming paradigm and broaden their horizon.

SE 435: Undergraduate Research in Software Engineering

Students participate in supervised research with a faculty member. Supervised research can be: 1) independent research undertaken by the student (thesis, independent study), or 2) assistance on a faculty member’s research project. Students must find a faculty member who is willing to supervise him/her as an assistant on an existing project or as the author of an individual project. The student and the faculty supervisor will complete and sign a research contract which will be submitted to the chair of the Software Engineering Department. Drafting the contract will allow the student to develop ideas about what should be accomplished and understand the scope and expectations of the faculty supervisor.

SE 441: Telecommunications Software Design

Formal models for telecommunications software design and analysis. Protocol specification, design and validation. Protocol verification and testing. Conformance testing. Protocol synthesis. Protocol conversion.

SE 442: Social Networks for Software Engineers

Student will learn the fundamental interface, systems, and algorithms concepts in designing social software. The case-based syllabus will cover insights from both research and industry. As a student, the student will contribute to this burgeoning field through a quarter-long, team-based project. Students are required to enter the class with an initial project idea.

SE 443: Cloud Computing for Software Engineers

This course will leverages the World Wide Web to fulfill computing needs. It packages applications, computing power, and storage as a metered service similar to a utility. This model is designed to supplant the traditional mechanism of desktop computing in many cases. This course will cover the origin, theory, enabling technology, and hands-on labs for key concepts in cloud computing.

SE 444: Artificial Intelligence

In this course, students will learn the foundational principles that drive AI applications and practice implementing some of the AI-enabled systems. Specific topics include machine learning, search methods, game playing, Markov decision processes, constraint satisfaction, graphical models, and logic. Students will be introduced to tools and systems to tackle new AI problems they might encounter in life.

SE 445: Information and Software Security

This course provides an introduction to the topic of security in the context of computer networks. The goals are to provide students with a foundation allowing them to identify, analyze, and solve network-related security problems in information systems with the emphasis on the engineering aspects of information security and software security issues. 

SE 446: Introduction to Big Data

In this course the students will learn the Big Data platform and data governance in order to efficiently store and manage massive amounts of data. In addition, they will learn Big Data architecture, such as Hadoop, Map Reduce, Hbase, Big SQL and BigSheets. Students will use tools to capture, store and analyze structured and unstructured data.

SE 447: Introduction to Machine Learning

This course offers a hands-on introduction to machine learning, encompassing widely used models, algorithms, and tools. It delves into supervised learning techniques like linear regression, logistic regression, and neural networks, as well as unsupervised learning methods including K-means clustering, principal component analysis, and association rule learning. Additionally, the course addresses crucial practical considerations in machine learning implementation such as data visualization, model selection and workflow, evaluation techniques (including testing, validation, and addressing overfitting and underfitting), bias and variance, regularization, and strategies for large-scale machine learning applications.

SE 448: Blockchain Development

In this course the students will learn concepts of the Blockchain technology such as business networks, participants, assets, and trusted transactions. They will also learn how to develop a complete Blockchain network solution using up-to-date tools and platforms.

SE 449: Data Analytics

This course prepares students to gather, describe, and analyze data, and use advanced statistical tools to make decisions on operations, risk management, finance, marketing, etc. Analysis is done targeting economic and financial decisions in complex systems that involve multiple partners. Topics include probability, statistics, hypothesis testing, regression, clustering, decision trees, and forecasting. 

SE 450: Cryptography and Data Privacy

The course will start with modular arithmetic, prime numbers, and factorization. This would be followed by historical ciphers, how they can be broken, and what is cryptanalysis. The course will next discuss keys and key length (and the effect of length on the strength of the cryptographic algorithm), plaintext, cipher text, symmetric encryption algorithms, and asymmetric encryption algorithms. Different symmetric and asymmetric algorithms will be explored in depth. Differences between block and stream ciphers will also be discussed. Implementation level details of multiple encryption algorithms will be taught.

SE 451: Secure Software Engineering

This course involves an in-depth study of the processes and techniques associated with secure software engineering. The objective is to plan, manage, document, and communicate security related aspects of different phases of a secure software development life cycle process to all stakeholders. Topics include secure software development life cycle processes, security requirements and their representation techniques and tools, security requirements engineering processes, secure design principles and guidelines and how to represent them effectively, threat modeling, risk analysis, inspection of requirements, design, and code to identify vulnerabilities, assessing the security posture of a secure software development artifact, secure implementation practices, and security testing techniques.

SE 452: Network Security

The course will start with an introduction to the security concepts and how the data sent over the network is threatened by illegal activities. This course will discuss how cryptographic algorithms can be used to secure data (confidentiality and integrity). Different protocols which have been developed for securing network communication, along with their weaknesses and strengths, will be discussed. This will enable the students to deploy existing protocols, and design new ones, to make data communication more secure. The students will also understand how different factors in a real-world setup can influence the choice of network security protocols. 

SE 453: Security Risk Management & Control

In this course the students will learn concepts of the Blockchain technology such as business networks, participants, assets, and trusted transactions. They will also learn how to develop a complete Blockchain network solution using up-to-date tools and platforms.

SE 454: Ethical Hacking and Systems Defense

The course will start with an analysis of various vulnerabilities in an application, system/device or a network protocol (or network) which can be exploited to threaten the data and services of a software system. Using these vulnerabilities, students will learn how to collect information before the attack, gain access, retrieve useful information, keep the access for a period of time, and avoid leaving traces of the attack. Countermeasures for each of the vulnerabilities explored will also be discussed. Students will also learn how to assess the security state of an application/system/network based on the vulnerabilities present in it. The course will include both theoretical and practical aspects: concepts learned in the lectures will be practiced in a closed environment using virtual machines. 

SE 455: Generative AI

This course provides an in-depth exploration of Large Language Models (LLMs) and Generative AI. Students will learn about the theoretical underpinnings, architectures, applications, and limitations of these transformative technologies. The course emphasizes practical understanding, enabling students to implement and fine-tune LLMs for various use cases, including natural language processing, content generation, and advanced reasoning tasks. Key topics include transformers, fine-tuning techniques, model evaluation, and ethical considerations. The course integrates hands-on projects, assignments, and assessments to reinforce learning outcomes. 

SE 461: Game Engine Architecture and Implementation

This comprehensive course delves into the foundations of designing and implementing game engines. Through hands-on experience with object-oriented game engine scripting languages, used in some game engines, students will also explore event-driven and data-driven programming paradigms. The curriculum covers essential topics such as game engine data structures, graphics concepts, and AI principles. Students will learn key aspects of game development, including asset preparation, sprite and bitmap animation, collision detection, game and level design, pathfinding algorithms, sound and music integration, game input devices, and advanced lighting techniques. This course provides a unique opportunity for students to collaborate on team projects, designing and building their own games or 3D interactive learning environments using a game engine. By the end of the course, students will have a solid understanding of game engine architecture and implementation of advanced game projects.

SE 462: Fundamentals of Game Design

This course introduces students to the foundational elements of game design by exploring how designers invent, test, and improve games. It provides students with fundamental learning opportunities focused especially on concept development, gameplay design, texture mapping, core mechanics, user interfaces, narratives, and storytelling. In this course, students explore the psychology and history of games, employ industry tools like game design documentation (GDD) for requirements engineering and software design and communication methods, and learn from established designers. 

SE 463: Game Mechanics, Prototyping, and Production

This course allows students to embark on a comprehensive exploration of the dynamic world of game design by delving into the fundamentals principles of game mechanics, offering hands-on approach to understanding game rules, interactions, player motivation, engagement strategies, gaming psychology, narrative design, and systems (e.g. feedback system) that are used mainly to shape the player experience. Through practical exercises, students should learn to translate creative concepts into tangible, playful prototypes to boost their skills in game design and to train them on refining requirements and on problem solving mechanisms. Moreover, this course focuses on the intricacies of game production which provides insights into the iterative development process and steps required for successful post-development and launch stages. It provides a holistic understanding of the game development pipeline, needed to equip students with necessary tools to navigate the complexities of game design from conceptualization to execution. 

SE 464: Innovative Topics in Immersive Game Development

This course introduces the art of crafting immersive gaming experiences using extended reality (XR) technologies. Through a series of hands-on projects and guided exercises, students will learn to design and develop captivating virtual reality (VR) and augmented reality (AR) applications. They will delve into the fundamentals of XR design, exploring concepts such as spatial interaction, user interface design, and digital storytelling. Additionally, students will gain proficiency in leveraging XR platforms to create dynamic gameplay mechanics, realistic environments, and engaging narratives. Furthermore, students will explore the integration of XR with cutting-edge technologies such as the Internet of Things (IoT), Artificial Intelligence (AI), or Cybersecurity, enhancing their understanding of the evolving landscape of game development. By the end of the course, students will emerge with a comprehensive skill set and a portfolio of innovative immersive gaming projects.

SE 495: Software Engineering Capstone Project I

This course is the first part of a two-semester senior-year capstone project. It is intended to complement theory and to provide an in-depth, hands-on experience in all aspects of software engineering. The students will work in teams on projects of interest to the IT sector and will be involved in analysis of requirements, architecture and design, implementation, testing and validation, and project management. In this part students provide a project plan, software requirement specification document, and develop software high-level design.

SE 496: Software Engineering Capstone Project II

This is the second part of the capstone project started in SE 495 course. In this part, students develop a software solution based on the low-level design which was produced as a part of SE 495. This includes implementation, testing, managing, and evaluating their final product. Student teams must deliver the executable code, a final report, and present and demonstrate their software solution.