软件分析与架构设计(Software Analysis and Architecture)
课程信息
课程简介:课程融合软件分析与软件架构设计两部分内容,前者主要介绍软件分析的基本概念、方法和工具,后者主要介绍软件架构设计的基本原则、模式和实践。课程内容涵盖静态分析、程序语义、符号执行、抽象解释、架构风格、设计模式等方面,旨在培养学生的软件分析和架构设计能力,提高软件质量和可维护性。
授课教师:何冬杰 课程助教:陈豪杰(2570081320@qq.com)
说点什么:软件分析相关课程内容较为晦涩,大家上课时需要认真听讲,并在必要时提前预习;软件架构相关内容相对简单,学习起来会轻松愉快许多 :-)
课程安排
学期:2025-2026学年第二学期(共8周)
时间:周一1-4节
周次:2-5、7-9、11周
地点:虎溪DZ121
课程讲义
| 日期 | 课件 [PDF] | 作业 |
| 2026-03-09(周一) |
1. 导引, 2. 软件架构设计 |
项目1:软件架构分析 |
| 2026-03-16(周一) |
3. 程序语义, 4. 指针分析 |
AST:作业1,
作业2,
项目2
; 结构归纳:作业
;收集语义:作业 |
| 2026-03-23(周一) |
4. 指针分析 (continue), 5. 控制流分析 |
指针分析:作业,项目3
; 控制流分析:作业 |
| 2026-03-30(周一) |
6. 数据流分析 |
DFA: 作业, 项目4 |
| 2026-04-13(周一) |
6. 数据流分析 (continue), 7. CFL可达性 |
项目5 |
| 2026-04-20(周一) |
8. 符号执行, 9. SAT求解器理论 |
SE: 作业, 项目6 |
| 2026-04-27(周一) |
9. SAT求解器理论(continue), 10. SMT求解器理论 |
|
作业说明
- 作业任选5道,项目任选1个,独立完成
- 作业和项目以单个PDF文件形式提交,代码实现学生改动部分(如有)可以放在PDF中。作业文件命名格式为:学号_姓名_编号_作业或项目名称.pdf。注意:编号是作业或项目所在课件的编号,方便定位到课件
- 请将作业或项目文件发送至课程助教邮箱(2570081320@qq.com),邮件标题格式为:学号_姓名_编号_作业或项目名称
- 作业和项目的截止时间为课程结束前一周(2026-05-11上课前)
参考资料
主要看讲义,其他参考资料包括:
- Program Analysis, by Rohan Padhye
- Static Program Analysis, by Anders Møller
- 软件分析技术, by 熊英飞
- ...
- The Formal Semantics of Programming Languages, by Glynn Winskel
- Principles of Program Analysis, by Flemming Nielson, Hanne R. Nielson, and Chris Hankin
- Principles of Abstract Interpretation, by Patrick Cousot
- 软件体系结构, by 冀振燕 and 曾立刚
- Software Architecture in Practice (4th Edition), by Len Bass, Paul Clements, and Rick Kazman
- Fundamentals of Software Architecture: An Engineering Approach, by Mark Richards and Neal Ford