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: Programming for Engineers

Fundamentals of computers and computing. Introduction to a typical object-oriented programming language. Basic data types and operators. Console input/output. Logical expressions and control structures. Methods and arrays. Introduction to Classes.

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

Advanced object-oriented programming; inheritance; polymorphism; abstract classes and interfaces, container and collection classes, packages, object-oriented design, software modeling, event-driven programming. Design and implement simple GUI applications. Write simple multithreaded applications. Use API in writing applications.

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 214: Algorithms and Data Structures

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 insure that all error conditions are caught.

SE 220: Object-Oriented Programming II

Extensions of object-oriented and advanced programming concepts such as GUI, Even-driven programming, Binary I/O, and Multi-Threading are essential in implementing high-grade projects.

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 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'92 experiences and the technical and organizational environment will influence on the choice of architecture.

SE 312: Database Management Systems

The focus is to teach database fundamentals required in the development and evolution of most software applications by providing a basic introduction to the principles of relational database management systems such as Entity-Relationship approach to data modeling, relational model of database management systems and the use of query languages.

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 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 project-oriented course examines the principles of mobile application design and development. Students will learn application development on the Android platform. Topics will include memory management; user interface design; user interface building; input methods; data handling; network techniques and URL loading; and, finally, specifics such as GPS and motion sensing. Students are expected to work on a project that produces a professional-quality mobile application. Projects will be deployed in real-world applications.

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

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

The concepts and use of project management tools, techniques and methodologies are becoming very fundamental and commonplace. This course addresses project management in the context of software projects. Using the framework of the Project Management Body of Knowledge (PMBOK) initiated by the Project Management Institute (PMI), the course covers various aspects pertaining to project initiation, planning, scheduling, monitoring and control, and closure. For planning and scheduling of projects, the use of project network and estimation of time and cost will be elaborated on. Risk assessment methods will also be covered. This course is designed to form a stepping stone for those candidates wishing to pursue related certifications such as the Certified Associate in Project Management (CAPM), the newly introduced Project Management Ready credential, and later on the most demanded Project Management Professional (PMP) designation.

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 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

This course aims in developing computer applications, which encompasses perception, reasoning and learning and to provide an in-depth understanding of major techniques used to simulate intelligence.

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 introduces machine learning with a practical approach covering some of the most common learning models, algorithms, tools, and techniques. From supervised learning, it covers linear regression, logistic regression, and neural networks. From unsupervised learning, it covers K-means clustering, dimensionality reduction (principal component analysis), and anomaly detection. The course also discusses practical aspects considered when applying machine learning: data visualization, model selection, flow, model evaluation (testing, validation, overfitting, underfitting, bias, variance), regularization, and large scale machine learning.

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

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

This course is the first part of a two-semester senior-year capstone project. It is intended to complement the 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 IT sector and will be involved in analysis of requirements, architecture and design, implementation, testing and validation, project management, software process, software maintenance, and software re-engineering. In this part students give project plan, provide 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.