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.
Welcome Video¶
General Course Information¶
Faculty |
Graduate Teaching Assistant |
---|---|
|
|
Course Meeting Times¶
- Class Hours: Tuesdays & Thursdays, 3:00 pm - 4:15 pm
- Class Room: Classroom Building 1, Room O3081
Virtual Course Spaces¶
- Course Website: Syllabus, Schedule, Assignments, Lecture Slides, Lecture Recordings
- Zoom: Hybrid Office Hours - Zoom Link (Requires UCF Zoom Account)
- Ed Discussions: Announcements, Discussion
- Webcourses (Canvas): Grades, Assignments
Welcome Letter to Students¶
Dear Students,
Welcome to CEN 5016 for the Fall 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 a message! 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% |
B+ 89%-87% | C+ 79%-77% | D+ 69%-67% | |
A 100%-93% | B 86%-83% | C 76%-73% | D 66%-63% |
A- 92%-90% | B- 82%-80% | C- 73%-70% | D- 62%-60% |