Skip to content

Home

Course Description

Application of formal software processes, engineering methods, and documentation standards to the development of large-scale software systems. Students will work to collaboratively develop software, and will explore cutting edge software engineering research.

General Course Information

Faculty

  

Course Meeting Times


Virtual Course Spaces


Welcome Letter to Students

Dear Students,

Welcome to CEN 5016 for the Spring 2024 semester! I am excited to be guiding everyone through the world of modern software engineering, and first and foremost I want you to know that, as an instructor, I am here for you. I want you to be successful in this course, and I want to help facilitate that success. If you feel like you are falling behind, are affected by unforeseen circumstances, or simply want to discuss course material and its applications, send me an email! I am available and happy to hear from you.

-Prof. Moran


Course Philosophy

Successful software projects require more than just technical expertise. Figuring out what the client wants, collaborating in a team, managing complexity, mitigating risks, staying on time and budget, and determining under various constraints when a product is good enough to be shipped are at least equally important topics that often have a significant human component. CEN-5016 explores these issues while broadly covering the fundamentals of modern software engineering.

Assuming reasonably solid programming skills (including unit testing and code-level design), we will explore the following topics:

  • Process consideration for software development
    (How do avoid problems early? When and how much to design? When and how much to test? When and how to involve the customers? Agile methods...)
  • Requirements elicitation, documentation, and evaluation
    (How to figure out what the customer really wants? Who else has an interest? How can we measure success objectively? How can we reliably document expectations? ...)
  • Design for quality attributes
    (How can we design a system to be able to scale to millions of users? How can we design security into a system? ...)
  • Strategies for quality assurance, including measurement, inspection, and static and dynamic analysis
    (What quality assurance strategy is best for a given system? What can we automate and when should we keep humans in the loop? How much testing and what kind of testing should we do? What qualities are important to assure beyond functional correctness? Can we evaluate usability, scalability, reliability, performance? How can we statically guarantee the absence of certain security issues? ...)
  • Empirical methods in software engineering
    (How can we measure quality attributes such as performance, security, and reliability? How can we measure how users interact with the system? How can we know whether the difference matters? ...)
  • Time and team management
    (How to estimate the duration and costs of a project? How to monitor progress and risks to recognize issues early? How to coordinate developers in a team? How to form and develop teams? How to select and motivate team members? How to deal with team dynamics such as social loafing? ...)
  • Economics of software development
    (Business models, outsourcing, open source, ...)

This course has a strong technical focus, and includes assignments with and without programming. Many assignments will also have written components. Students will get experience with team management and modern software-engineering tools. The course puts students on a fast track toward project management positions.


Learning Outcomes

  • Knowledge of software engineering principles for building software at scale
  • Understanding how to work in a team to collaboratively develop software
  • Effective Strategies for designing software
  • How to measure software development progress along several different dimensions
  • Knowledge of tools and techniques to assist in the construction of large-scale software systems.
  • Knowledge of cutting-edge research related to software engineering

Course Grading Information

Grading Breakdown & Scale

Grading Breakdown
Midterm Exam 15%
Quizzes 5%
Individual Assignments 10%
Software Development Project 30%
Research Reproduction Project 30%
Research Paper Presentation 5%
Research Paper Reviews 5%
A+ 100%-97% B+ 89%-87% C+ 79%-77% D+ 69%-67%
A 96%-93% B 86%-83% C 76%-73% D 66%-63%
A- 92%-90% B- 82%-80% C- 73%-70% D- 62%-60%

  1. Backup Instruction (should the class need to pivot to virtual) will be conducted on Zoom Zoom Link (Requires Signing In with UCF Zoom Account)