Virginia Tech

Course Information
Course Description:

The primary objective of this course is to teach the fundamentals of software engineering throughout the entire software life cycle. The course focuses on cloud software engineering. After covering the Problem Formulation process, a use-case-based approach is introduced for the Requirements Engineering life-cycle process. Architecting cloud-based software system of systems is covered by using the Department of Defense Architecture Framework (DoDAF). Object-oriented software Design is introduced by using the Unified Modeling Language (UML). Programming is taught with hands-on step-by-step tutorials by using the IntelliJ IDEA Ultimate, MySQL relational database server, and WildFly application server on the Jakarta (Java Platform) Enterprise Edition (Jakarta EE). Related software engineering topics such as the following are also covered: Software Life Cycle Models, Virtualization technologies – Underpinnings of the Cloud Computing, Software Decomposition / Modularity, Guidelines for User Interface Design, Principles of Verification and Validation (V&V) and Quality Assurance (QA), and CMMI for Development (CMMI-DEV).

Doing things “in the cloud” has become ubiquitous, and cloud has become a rich new environment for the use of technology anywhere and anytime to solve problems, connect people, and improve lives. Software paradigm has been shifting from “Software-as-a-Product (SaaP)” to “Software-as-a-Service (SaaS)” provided “in the cloud”. The SaaS software paradigm comes with capabilities and technical challenges for cloud software development, as compared to mobile and stand-alone software development. Distributed multitiered software architecting, design, and programming for the cloud platform require different strategies specifically motivated by this paradigm. This course gives students the opportunity to learn how to develop software for this important computing context. It also gives them a rich context in which to practice and reinforce the fundamental concepts of object-oriented software design and implementation taught in previous courses.

The course introduces the fundamentals, design patterns, interfaces, frameworks, and technologies underlying cloud software development. It teaches hands-on how to develop distributed multitiered enterprise software applications that run on a server computer and used by a user with a web browser over the Internet on a network-connected computer such as desktop, laptop or handheld computer (tablet or smartphone).

The course focuses on the Jakarta (Java Platform) Enterprise Edition (Jakarta EE). It teaches Jakarta EE technologies such as JavaServer Faces (JSF), JSF Expression Language (EL), Contexts and Dependency Injection (CDI), Enterprise JavaBeans (EJBs), JSF User Interface (UI) Framework PrimeFaces, and Application Programming Interfaces (APIs) such as Java Persistence API (JPA) and Java API for RESTful Web Services as depicted in the client-server architecture poster below.

The course employs the “Learning by Examples” pedagogy. In class meetings, students develop a cloud software application with hands-on, step-by-step, and hypertext-based instructions. Students work in teams to develop cloud software applications in their semester projects.

The course employs:

Jakarta (Java Platform) Enterprise Edition (Jakarta EE) Open Source / Free
IntelliJ IDEA Ultimate Free for Educational Use
WildFly Jakarta EE Application Server Open Source / Free
MySQL Relational Database Management System Open Source / Free
PrimeFaces UI Framework for JavaServer Faces Open Source / Free
Virtual Private Server running Amazon Linux 2 Free for Educational Use
Open Java Development Kit (OpenJDK) Open Source / Free

Students obtain an AWS EC2 instance running Amazon Linux 2 OS as their Virtual Private Server for deploying their cloud software applications developed in the course.

Learning Objectives:
  Having successfully completed this course, students will be able to:
  1. Engineer a software system by following the software life cycle processes: problem formulation, requirements engineering, architecting, design, programming, integration, and publishing by deploying on a server computer.
  2. Develop distributed multitiered enterprise software applications that run on a server computer and used by a user with a web browser over the Internet on a laptop, desktop, tablet, or smartphone computer.
  3. Create cloud software-based solutions to complex problems using the Jakarta (Java Platform) Enterprise Edition (Jakarta EE).
  4. Work on a cloud software development project with the title of Cloud Software Engineer.
  • Ability to program in Java programming language.
  • Knowledgeable about HTML5, CSS3, and JavaScript.
  Required Textbook:

Roger S. Pressman and Bruce R. Maxim (2015), Software Engineering: A Practitioner's Approach, Eight Edition, McGraw-Hill, © 2015, 976 pages, ISBN-13: 978-0078022128 (available at the Virginia Tech University Bookstore, Book Holders or at for $25 to rent.)

Textbook Websites:

Required Software running on Student's Laptop Computer:

Each student is required to bring a Mac, Windows or Linux laptop computer to class meetings for hands-on learning of cloud software development. The laptop computer must be running IntelliJ IDEA Ultimate, WildFly Application Server, and MySQL which are used for cloud software development in the course. A powerful laptop with 15-inch+ screen is recommended for improved productivity.

  • Software Engineering Lab: McBryde 116
  • Two server computers for exclusive use by the students in the course:
    • Dell PowerEdge T320 server computer with 64GB RAM and 2TB hard disk
    • Dell PowerEdge T330 server computer with 64GB RAM and 480GB SSD hard disk
  • Three iMac computers
Tentative Chronological Outline:
Students Only: