教學大綱 Syllabus

科目名稱:軟體分析與測試

Course Name: Software Analysis and Testing

修別:選

Type of Credit: Elective

3.0

學分數

Credit(s)

15

預收人數

Number of Students

課程資料Course Details

課程簡介Course Description

This course introduces foundational skills in program analysis and testing, which are essential for building software systems with greater reliability and security. The course examines primarily two complementary approaches: static analysis, where we analyze source code without execution to uncover potential security vulnerabilities, and dynamic analysis, where we study program behavior during runtime to detect actual security breaches. Students will learn to bridge theory and practice by implementing these analyses using modern tools and frameworks.

Prospective students should have familiarity with Python programming and a basic understanding of discrete mathematics and data structures. The course includes weekly lab sessions, and students may need a laptop to participate in some of these sessions.

核心能力分析圖 Core Competence Analysis Chart

能力項目說明


    課程目標與學習成效Course Objectives & Learning Outcomes

    We assess the achievement of learning objectives through classroom discussions and exercises, assignments, a midterm exam, and a final project. These objectives include:

    • Technical Skills in Program Analysis: Students will learn to implement various program analysis techniques including dataflow analysis, Hoare logic, symbolic execution, and dynamic analysis. They will also explore how abstract interpretation principles can automate program analysis frameworks.

    • Formal Methods and Evaluation: Students will gain the ability to use abstract interpretation to formally prove the soundness and termination of an analysis. They will also learn to evaluate the scalability of program analyses and compare the precision of different techniques.

    • General Computer Science Skills: The course also focuses on developing transferable skills, such as:

      • Rigorously reasoning about the behavior of code.
      • Formally modeling discrete software systems and proving theorems about these models.
      • Building moderately complex programs using software frameworks.
      • Utilizing open-source analyzing/testing tools effectively.

    每周課程進度與作業要求 Course Schedule & Requirements

    週次

    Week

    課程內容與指定閱讀

    Content and Reading Assignment

    學習投入時間

    Student workload expectation

    課堂講授

    In-class Hours

    課程前後

    Outside-of-class Hours

    1

    (9/5)  Program Representations: AST, IR, CFG, stack machines

     

    3

    6

    2

    (9/12 - 9/19)  Dataflow Analysis: theoretical framework, sample analyses, soundness and correctness, termination and complexity

     

    3

    6

    3

    3

    6

    4

    (9/26 - 10/3)  Constraint Programming: Satisfiability Modulo Theories, SAT and SMT encoding, Z3

     

    (10/10)  Holiday

     

    3

    6

    5

    3

    6

    6

    3

    6

    7

    (10/17)   Midterm Exam (Exam date may change according to course progress)

     


     (10/24 - 31)  Coverage Analysis: fuzzing and symbolic execution

    3

    6

    8

    3

    6

    9

     

    3

    6

    10

    (11/7 - 11/21)  Deductive Verification: axiomatic semantics, weakest preconditions, Floyd-Hoare proofs

    3

    6

    11

    3

    6

    12

    3

    6

    13

    (11/28)   Final Exam  (Exam date may change according to course progress)

     

    (12/5 - 12/12)  Topics on AI for SE: Enhancing program analysis and testing using neural networks and large language models

     

    3

    6

    14

    3

    6

    15

    3

    6

    16

    (12/19)  Final Project Demo

    3

    6

    授課方式Teaching Approach

    40%

    講述 Lecture

    40%

    討論 Discussion

    20%

    小組活動 Group activity

    0%

    數位學習 E-learning

    0%

    其他: Others:

    評量工具與策略、評分標準成效Evaluation Criteria

    Assessments

    Participation                10%

    Homework                   10%

    Midterm exam              30%

    Final exam                    30%

    Final project                  20%

     

    Class participation plays a key role, as lectures are the primary means of conveying course material, which is then reinforced through in-class activities. Participation points are earned by completing these exercises in person.

    The assignments are designed to help students develop theoretical understanding and practical skills in program analysis.

    The exams mainly consist of variations of in-class and homework exercises that evaluate your understanding of the material.

    The final project involves implementing a simple program analyzer. The expected deliverables include coding, documentation, and a presentation.

    指定/參考書目Textbook & References

     

    1. Program Analysis. Jonathan Aldrich, Claire Le Goues, and Rohan Padhye, 2022. (pdf)

    2. Static Program Analysis. Anders Møller and Michael I. Schwartzbach, 2024. (pdf)

    3. Symbolic Execution and Quantitative Reasoning. Corina Pasareanu, 2020. (pdf)

    已申請之圖書館指定參考書目 圖書館指定參考書查詢 |相關處理要點

    維護智慧財產權,務必使用正版書籍。 Respect Copyright.

    本課程可否使用生成式AI工具Course Policies on the Use of Generative AI Tools

    完全開放使用 Completely Permitted to Use

    課程相關連結Course Related Links

    
                

    課程附件Course Attachments

    課程進行中,使用智慧型手機、平板等隨身設備 To Use Smart Devices During the Class

    需經教師同意始得使用 Approval

    列印