Carl Sable

Associate Professor of Electrical Engineering

ECE 366: Software Engineering and Large System Design

Catalog Data:

This course teaches about the development stages of large, robust, expandable software systems developed as part of a team. Topics include project management, capturing requirements, system design, UML, program design, testing, delivery, and maintenance. The class will develop a large project as a team using Java throughout the semester. Tools, libraries, and techniques necessary for the project will be covered in class; e.g., Eclipse, Javadoc, XML, SOAP, servlets, threads and processes, Swing, JUnit, mySQL, JDBC, etc. The specific resources might change from semester to semester.

Topics:

  1. Introduction and course overview.
  2. Project description.
  3. Overview of Java and object-oriented programming concepts.
  4. Principles of software engineering.
  5. The project development cycle; stages of development.
  6. Overview of Eclipse.
  7. Javadoc.
  8. Project management.
  9. Capturing requirements; documenting requirements.
  10. Subversion and Subclipse.
  11. System design; software architecture; the Unified Modeling Language (UML).
  12. Swing; user interfaces.
  13. Object-oriented design.
  14. Program design and writing the code.
  15. Overview of Databases.
  16. JDBC, JSP, and MySQL.
  17. Unit and integration testing.
  18. System testing.
  19. JUnit.
  20. Project delivery.
  21. Maintenance.
  22. Evaluating products, processes, and resources.
  23. Improving software organizations.
  24. JavaScript.
  25. Extensible Markup Language (XML).
  26. The future of software engineering.

Course Outcomes:

  1. Knowledge of the procedures used by professional software engineers.
  2. Familiarity with many important tools, techniques, and resources available to software engineers.
  3. Ability to analyze a problem, design a solution, implement it, and test it.
  4. Experience developing a large, robust, expandable system as part of a team.

Assessment Methods:

Evaluation of the project is used to assess the students' abilities to develop software systems. Specific factors that are considered when determining project grades include, but are not limited to, the correctness of the implementation (i.e., is it bug-free?), the efficiency of the system (e.g., is there any lag?), the soundness of the design decisions, the elegance of the code, the ambitiousness of the chosen features, and the intuitiveness of the user interface. Quizzes test the knowledge of professional software engineering principles.

Example Project:

During the spring 2012 semester, groups of 2 to 3 students each implemented the game of SET. Users could register via a web interface and then download a standalone GUI. They could then log in via the GUI and play other users over the Internet. Below is a picture of the GUI that was part of the system implemented by William Ho, Christopher Hong, and Mihir Patel. Their system allows multiple games to be played at once,  with one to eight players in each game. Their system also keeps track of player statistics, and they incorporated chat functionality into the GUI. Below is a picture of the GUI when I was playing a game solitaire-style: