ECE 3574 Applied Software Design | ECE | Virginia Tech

Undergraduate PROGRAMS

Course Information


This course is an introduction to applied software design methods for use in the writing of efficient, reusable, and modulator C++ programs. These methods include the use of the following: classes, inheritance, and polymorphism; design patterns; high-level programming techniques using libraries, generics, and containers; widgets, models, and views; software frameworks for embedded systems; and advanced techniques ranging from multi-threading to reflective programming.

Why take this course?

Large-scale software systems are widely used in the design, analysis and testing of current computing systems. In addition, modern embedded systems run programs developed in high-level languages based on extensive software libraries. The ability to design and implement such software systems is an essential skill for computer engineers pursuing careers in industry and academia.

Technical Elective


C- or better in 2574

This course requires students to design and develop software in C++ using class-based libraries and interface documentation. It is assumed that students have a level of programming experience commensurate with having successfully passed ECE 2574, an introduction to data structures and software engineering in C++.

Major Measurable Learning Objectives

  • Use software design patterns and application programming interface (API) specifications to implement efficient and portable software
  • Design and implement multi-threaded and multi-process applications that rely on standardized inter-process communication and synchronization mechanisms
  • Design and implement complex software applications based on portable software frameworks and event-driven programming
  • Design, implement, and peform testing strategies including unit and integration testing

Course Topics


Percentage of Course

Introduction to class-based software libraries 10%
Inheritance and polymorphism 10%
Introduction to design patterns 10%
Generics and containers 10%
Event-driven programming 10%
Introduction to processes, threads 10%
Inter-process communication and synchronization 10%
Models and Views 10%
Software life cycle models, unit and integration testing 10%
Software design for embedded systems 10%