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

The significant role played by technology in our time and the resulting tensions between software technology and society are often viewed as defining aspects of modernity. This course will be to explore the extent to which interactions between software technology and society have always been central and to consider the extent to which many of today's debates concerning that relationship have been prefigured in earlier cultures.

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

Introduction to software engineering and software processes. Construction techniques and principles. Concepts of programming languages: syntax and semantics. Analysis and design models. An introduction to software requirements and testing methods. An introduction to software project 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

Requirements engineering process. Methods, tools and techniques for eliciting, organizing and documenting software requirements. Analysis and validation techniques, including need, goal, and use case analysis. Requirements documentation standards. Traceability. Requirements management. Handling requirements changes. Students participate in a group project on software requirements.

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

Theory and construction of operating systems, including real-time and embedded systems aspect from an engineering point of view, stressing performance measurement and metrics. Quality of Service issues leading to certification that an operating system will satisfy hard real-time constraints.

SE 322: Internet of Things Application Development

This course is designed to provide students with focused technical knowledge and skills to build Internet of Things (IoT) systems and applications. The course will cover the design of a microcontroller-based embedded system for Arduino Raspberry Pi platforms. In addition, it will cover IoT paradigms, IoT design considerations, constraints and development process 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 (e.g., XHTML, Dynamic HTML and XML), several scripting languages (e.g., JavaScript, PHP, Ruby/Ruby on Rails and Perl), Ajax, Web services, Web servers (e.g., IIS and Apache) and relational databases (e.g., MySQL/Apache Derby/Java DB)

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

This'a0course'a0provides students with a baseline understanding of common'a0cyber security'a0threats, vulnerabilities, and risks. The'a0course'a0also includes an'a0introduction'a0to basic'a0cyber security'a0risk analysis, with an'a0overview'a0of how threat-asset matrices can be used to prioritize risk decisions.

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 focuses on human-computer interaction as well as topics related to software maintenance, configuration management and evolution. Aspects such as User interface design and architectures will also be touched upon. Other HCI and usability related topics to be covered include: Assessment and evaluation of user interfaces, design of user interface components including windows, menus, and commands, Usability engineering, Task analysis, User-centered design, prototyping, conceptual models and metaphors, software design rationale, voice and natural language I/O. Response time and feedback, visual design, icons, and sound. Software quality issues, defect detection and prevention, reliability engineering, examination of maintenance issues, configuration management. Software evolution issues, planning for evolution. The course will also introduce students to important business aspects related to Entrepreneurship and Innovation in the field of Software Engineering.

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'92s 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 turned in to the chair of the Electrical and Software Engineering Department. Drafting the contract will allow the student to develop ideas about what should be accomplished and what the faculty supervisor'92s expectations are. All academic requirements are at the discretion of the supervising faculty member. Students should agree on a plan for the semester with the faculty mentor before the research begins. The plan should include academic requirements, the basis for grading the experience, and a plan for student/professor meetings for the semester. It is the student'92s responsibility to report progress and seek guidance when needed. Students are expected to be active and reliable participants in the research experience.

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

This course is designed to introduce students to the fundamentals of hacking and becoming an ethical hacker. The course focuses on the code of conduct and ethics of attacking systems. The course also teaches the mindset of the criminal hacker and evolution of the hacker. Students also gain fundamental understanding and education on the elements of compromising computer systems for the explicit purposes of securing them from criminals. The course makes a very clear distinction between criminal hacking and ethical hacking, and only teaches the latter. The course then focuses on some fundamentals of system defense, including configurations and software to prevent unauthorized system access. 

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 provide software low-level design produced in SE 490, implement the design, test their code, and manage and evaluate their final product. Student teams must deliver the code, a final report and a do a presentation and demonstration for their implemented software.