教學大綱 Syllabus

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

Course Name: Software Analysis and Testing

修別:群

Type of Credit: Partially Required

3.0

學分數

Credit(s)

10

預收人數

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 are expected to have a strong background in Python programming and a basic knowledge of discrete mathematics and data structures. The course includes weekly lab sessions; 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 large, open-source tools effectively.

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

    教學週次Course Week 彈性補充教學週次Flexible Supplemental Instruction Week 彈性補充教學類別Flexible Supplemental Instruction Type

     

    週次

    Week

    課程內容與指定閱讀

    Content and Reading Assignment

    學習投入時間

    Student workload expectation

    課堂講授

    In-class Hours

    課程前後

    Outside-of-class Hours

    1

    (2/21) Program Representations: AST, IR, CFG, stack machines

    3

    6

    2

    (2/28)   Holiday

    (3/7)   Program Semantics: operational semantics

    3

    6

    3

    3

    6

    4

    (3/14 - 3/28)  Dataflow Analysis: theoretical framework, sample analyses, soundness and correctness, termination and complexity

    3

    6

    5

    3

    6

    6

    3

    6

    7

    (4/4)   Holiday

    (4/11-4/25) Constraint Programming: Satisfiability Modulo Theories, SAT and SMT encoding, problem solving with Z3

    3

    6

    8

    3

    6

    9

    (5/2) Midterm Exam

    3

    6

    10

    (5/9 - 5/23) Floyd-Hoare Proof System: axiomatic semantics, strongest postconditions and weakest preconditions, deductive verification

    3

    6

    11

    3

    6

    12

    3

    6

    13

    (5/30)   Holiday

    (6/6 - 6/13) Coverage Analysis: white-box and grey-box testing,  fuzzing, symbolic and concolic execution

    3

    6

    14

    3

    6

    15

    3

    6

    16

    (6/20) Final Project Demo

    3

    6

    授課方式Teaching Approach

    40%

    講述 Lecture

    40%

    討論 Discussion

    20%

    小組活動 Group activity

    0%

    數位學習 E-learning

    0%

    其他: Others:

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

    Assessments

    Participation                          10%

    Exercises & assignments      40%

    Midterm exam                       20%

    Final project                           30%

    Total:                                      100%

     

    Class participation and readings play a key role, as lectures and readings are the primary means of conveying course material, which is then reinforced through in-class activities. Most class sessions will include an exercise designed to help students apply the concepts covered. Participation is earned by completing these exercises, regardless of the correctness of the responses.

    Assignments are designed to help students develop theoretical understanding and practical skills in program analysis. They are divided into two categories:

    1. Theoretical Assignments: These assignments involve formal definitions and proofs to deepen your understanding of the analysis theory. They will be graded based on the accuracy and presentation of your definitions and proofs.

    2. Programming Assignments: These focus on building program analyses systematically through hands-on coding exercises. Your work will be evaluated based on the correctness and clarity of your implementation.

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

    指定/參考書目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)

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

    書名 Book Title 作者 Author 出版年 Publish Year 出版者 Publisher ISBN 館藏來源* 備註 Note

    維護智慧財產權,務必使用正版書籍。 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

    列印