This course studies the design and development of large-scale software for enterprises. The students will learn important design considerations and some important architectures (including enterprise architecture) for enterprise software, learn how to interoperate between the software sub-systems, e.g. via web services and some standard of data interchange, and make this interoperability secure, and also learn how to utilize software frameworks and technologies to support the development of enterprise software.

With very limited memory and processing power as well as low energy consumption of IoT (Internet of Things) devices, their communication networks are so designed and developed to meet these constraints. This course will focus on the emerging industrial standard of computer networks and communications technologies developed specifically for IoT devices, including network architectures and protocols layers.

This course studies recent progress and development in science and technology, including its concepts and discoveries which have or are expected to have significant influence upon our daily life as well as the environment and the society at present and in the future. The topics covered in the course will be selected from various branches of science, including physical science, biological science, material science, communications technology, energy and environmental science, and other branches of science which are having significant impact and are of great interest at a certain period of time in the future.

This course emphasizes on distributed computing from a system software perspective. The topics include distributed system architectures, distributed programming, message passing, remote procedure calls, group communication, naming and membership problems, logical time, consistency, fault-tolerance, and recovery. It also covers concepts and architectures for distributed processing and distributed transaction processing, process synchronization and concurrency control, quality of service, security, and various middleware (e.g. CORBA, DCE and DCOM).

This course provides an introduction to software design with emphasis on architectural design and models of software architectures. Software architectures studied include: data flow architectures, procedure-based architectures, middleware architectures, object-oriented architectures, event-driven architectures, virtual machine architectures, component-based architectures, shared information system architectures, client-server architectures, distributed architectures, enterprise architectures, web-based architectures, service-oriented architectures, grid architectures, and mixed architectures. For each architectural style studied, the course discusses the technological background of its evolution, its advantages and disadvantages, and its uses in the software development.

This course covers the following topics: basic structures of the hardware and the software on embedded systems for various applications, design considerations for software on embedded systems (including resource constraints, energy consumption, time constraints, reliability, and fault tolerance), requirement specifications for software on embedded systems, methodologies and tools for the design and development of embedded software, operating systems for embedded systems, device drivers, and verification and validation techniques for software on embedded systems.

This course studies three important methods for software verification and validation: testing, peer reviews, and formal verification, with emphasis on testing. Topics on testing include the necessity and limitations of testing, an overview of test processes, testing throughout the software development life cycle, unit testing, test design techniques, test automation, tool support for testing, and test management. The course will study how software peer reviews, which can help detect and prevent software defects, are carried out in practice and study the inspection processes throughout the software development life cycle, including the inspection of requirement documents, design documents, code, and test plans. The course will also provide a basic understanding of formal verification, including how to prove the correctness of a simple program using Hoare logic.

This is a software project course in which the students work in group to develop software according to the requirements provided by the users. The students will learn to integrate their knowledge and skills to perform each phase of software development, including requirement analysis, modeling, design, implementation, and testing, in order to obtain the required software, whose topic is decided by the advisor(s) or by the students themselves.

A software development process is a set of activities, methods, and practices that are used in the production and maintenance process of software. This course is concerned with improving the processes used to develop and maintain high-quality software in a timely and economical manner. It covers the evolutions of different software development models and the currently popular and successful process models, including iterative software development (e.g. spiral models and the Rational Unified Process (RUP)), agile software development (e.g. Extreme Programming (XP), Agile Modeling (AM), Scrum, Crystal, Feature Driven Development (FDD), and Incremental Funding Method (IFM)), software maturity frameworks and software process improvement (e.g. the Capability Maturity Model (CMM) and the Personal Software Process (PSP)).