CS 230: Software Engineering (Fall 2024)

Lecture: Tue/Thu 10:00 AM to 11:45 AM, PUB AFF 2242   
Instructor: Dr. Miryung Kim (ENG VI, 474)
Office Hours: By appointment only
  
General Description
As software systems become increasingly large and complex, automated software engineering analysis and development tools play an important role in various software engineering tasks: design, construction, evolution, and testing and debugging of software systems. This course will introduce students to the foundations, techniques, tools, and applications of automated software engineering technology. Students will develop, extend, and evaluate a mini automated software engineering analysis tool and assess how the tool fits into the software development process. This class is intended to introduce current research topics in automated software engineering.

Undergraduate level knowledge of data structures and object-oriented program languages is required. You are welcome to just sit in for a few days and see how this class feels. By understanding the fundamentals behind automated software engineering analysis algorithms, techniques and tools, students will acquire keen eyes on how to systematically design, analyze, and extend large software systems. This will prepare students to become principle software architects and development leads in the future.  
  • Software design patterns
  • Automated software testing
  • Bug finding and advanced debugging techniques

Audience and Prerequisites

Undergraduate level knowledge of data structures, object-oriented programming languages, software engineering is required. Knowledge of compilers, program analysis, and control flow graph and abstract syntax tree program representations is required. Proficient Python and Java programming experience is required as well.

Grading

Exam

There will a single final exam. Exam is in person, closed book. The instructor is unable to accomodate a different date, other than the final exam date on Dec 9, 2024 Monday 3pm-6pm. 

Project

  • develop and assessing new algorithms to replace currently-used ones
  • translate a methodology to a new problem domain
  • apply known techniques to new problem domains
  • port an existing tool to a new domain (e.g., a new programming language)

Each team should submit a written report (max 10 pages) to the BruinLearn system. Each team should consist of 5 to 6 people. You may include an appendix beyond 10 pages, but your paper must be understandable without it. Submissions should be in the ACM format.  In Week 2, I will release a few sample project ideas to guide you with the process of choosing a project topic.

  • A short proposal of 2 pages is due on Week 3. 
  • A part of instruction time will be reserved for project team meetings with the instructor and there will be a sign up via Piazza on Week 5.
  • A demo of midterm progress is due on Week 7.
  • A final project report is due on Week 10. 
  • While it is a team project, each team member is not automatically entitled to receive the same grade and their score will be adjusted based on each one's contribution, if necessary. Multiple sources of evidence including a peer evaluation will be collected. 

Your report should be structured like a conference paper, meaning that your report should contain:

  • Abstract
  • A well-motivated introduction
  • Related work with proper citations
  • Description of your methodology
  • Evaluation results 
  • Discussion of your approach, threats to validity, and additional experiments
  • Conclusions and future work 
  • Appendix: Describe how to run and test your implementation.

Tool Tutorial

  • For technology tool tutorials, the same project team of 5 to 6 students will present 15 minute live in-class demonstration to teach tools and environments discussed in the class. 
  • Each team will also create an in-class exercise about the tool. The in-class exercise should be done by other students at most in 5 minutes. It could be in a form of quizzes or running a tool or a notebook.      

In-Class Exercise

How Does It Work?
1) Think. The teacher provokes students' thinking with a question or prompt or observation. The students should take a few moments (probably not minutes) just to THINK about the question.

2) Pair. Using designated partners (such as with Clock Buddies), nearby neighbors, or a deskmate, students PAIR up to talk about the answer each came up with. They compare their mental or written notes and identify the answers they think are best, most convincing, or most unique.

3) Share. After students talk in pairs for a few moments (again, usually not minutes), the teacher calls for pairs to SHARE their thinking with the rest of the class. She can do this by going around in round-robin fashion, calling on each pair; or she can take answers as they are called out (or as hands are raised). Often, the teacher or a designated helper will record these responses on the board or on the overhead

In-class exercise will be graded based on Satisfactory and Unsatisfactory basis. The goal of in-class exercise to engage in discussions and hands-on learning experiences.     

Class Schedule

Scaling Code Pattern Inference with Interactive What-If Analysis

Lectures
 Tools
Reading
Week 1
10/1 (Tue)
10/3 (Thu)
Introduction to Software Engineering
Syllabus

Code Search and Taint Analysis

CodeQL
SemGrep
Interactive Code Search for Systematic Changes (ICSE 2015)
Scaling Code Pattern Inference with Interactive What-If Analysis
Week 2
10/8 (Tue)
10/10 (Thu)
Testing
Statement, Branch, and Path Coverage

Testing Symbolic Execution
Bounded Iteration, Infeasible Path, Test Generation
Jacoco
Jpf-symbc
Hypothesis
Code Coverage

White-Box Testing of Big Data Analytics with Complex User-Defined Functions (FSE 2019)
Week 3
10/15 (Tue)
10/17 (Thu)

Testing
Regression Testing
Mutation Testing
Project Proposals
Major
AFL++
Mutation-based Fuzzing
Greybox Fuzzing
Week 4
10/22 (Tue)
10/24 (Thu)
Parsing / Grammar based Fuzzing

No class on 10/24
ANTLR
Grammarinator
Inputs from Hell (TSE 2020)
Parsing Inputs
Probablistic Grammar Fuzzing

Week 5
10/29 (Tue)
10/31 (Thu)
Fuzzing with Semantics
Input Specification Langauges
Custom Mutation Synthesis 
Project Meetings

ISLA

SynthFuzz
Fuzzing with Custom Mutation Synthesis (ICSE 2025)
Week 6
11/5 (Tue)
11/7 (Thu)
Hoare Logic
Weakest Precondition, Hoare Triple, Loop Invariant
CVC5
Infer
SpotBugs

Week 7
11/12 (Tue)
11/14 (Thu)
Debugging
Delta debugging

Project Midterm Demo
Perses
Picireny
Simplifying and Isolating Failure-Inducing Inputs (TSE 2002)
Week 8
11/19 (Tue)
11/21 (Thu)
Design Patterns
Klee
Comby

Week 9
11/26 (Mon)
11/28 (Wed)
Thanksgiving No class



Week 10
12/3 (Tue)
12/5 (Thu)
Project Presentations


Final Week
Exam Dec 9, 2024 Monday 3pm-6pm 


Feedback Statement

During this course, I will be asking you to give me feedback on your learning in both informal and formal ways, e.g., including anonymous midpoint survey about how my teaching strategies are helping or hindering your learning. It is very important for me to know your reaction to what we are doing in the class, so I encourage you to respond to these surveys, ensuring that we can create an environment effective for teaching and learning.  Occasionally, at the end of the lecture, I will hand out index cards to ask "what is the most important thing you have learned in this class session?" and "what questions do you still have?" This feedback will be anonymous and this is to check your understanding and promote Q&A. Please also take the time to write written comments when submitting your course instructor survey. Your course instructor survey is important to me and future students. To reward your participation, I will add 3% of your final exam grade for participating in the course instructor survey.

Academic Integrity

Each member of the university is expected to uphold these values through integrity, honesty, trust, fairness, and respect toward peers and community. In your first week, you must read and sign UCLA's Academic Integrity Statement.