Software Engineering
Chairperson: Dr. Areej Al-Wabil, Assistant Professor of Software Engineering
Ph: +966 11 215 8878
E: awabil@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 L: Programming for Engineers Lab
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
SE 120 L: Object-Oriented Programming I Lab
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
SE 214: Algorithms and Data Structures
SE 214 L: Algorithms and Data Structures Lab
SE 220: Object-Oriented Programming II
SE 220 L: Object-Oriented Programming II Lab
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
SE 310: Software Design and Architecture
SE 312: Database Management Systems
SE 312 L: Database Management Systems Lab
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
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 324 L: Web Application Development Lab
SE 328: Mobile Application Development
SE 328 L: Mobile Application Development Lab
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 internship it is an important aspect of Software Engineering curriculum that provides the student with hands-on experience and a good sense of what an actual job in an organization will be like. Students are required to join an IT department in a government or private organization for a summer period of at least 8 weeks in the last summer prior to student graduation. Students should be able to relate the internship experience to the knowledge that he or she has gained through the Software Engineering program courses.
SE 412: Software Testing and Quality Assurance
SE 414: Software Project 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 have to 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 440: Special Topics in Software Engineering
SE 440: Special Topics in Software Engineering
SE 441: Telecommunications Software Design
SE 442: Social Networks for Software Engineers
SE 443: Cloud Computing for Software Engineers
SE 444: Artificial Intelligence
SE 445: Information and Software Security
SE 446: Introduction to Big Data
SE 447: Introduction to Machine Learning
SE 448: Blockchain Development
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
This course is an introduction to the basic concepts and mechanisms of applied cryptography and data security. It will cover both cryptographic primitives (symmetric encryption, public encryption, MACs, Digital Signatures, Authenticated Encryption, etc.) to cope with the data confidentiality and data integrity. It also emphasizes on how to apply and implement cryptography in practice.
SE 451: Secure Software Engineering
This course provides a foundation for building secure software by applying security principles to the software development lifecycle. Topics covered include security in requirements engineering, secure designs, risk analysis, threat modeling, deploying cryptographic algorithms, defensive coding, penetration testing, fuzzing, static analysis, and security assessment. Students will learn the practical skills for developing and testing for secure software while also learning sound security fundamentals from real-world case studies.
SE 452: Network Security
This course addresses security issues for TCP/IP-based and NT networks. Access Control and Communications Security issues will be covered as well as Internet and intranet security.
SE 453: Security Risk Management & Control
This course provides an overview of the fields of IT Security and Risk Management. IT Security and Risk Management are concerned with threats to the Confidentiality, Integrity, and Availability (CIA) of information systems. Risk management comprises a set of coordinated activities to direct and control an organization regarding risk. This course will explore how IT Security and Risk Management intersect with the management of records and information in digital environments and will address the application of IT Security and Risk Management theories, principles, and techniques to the management records and information-related risks.
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 495: Software Engineering Capstone Project I
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.