Skip to content

SE Exam 1 Cheat Sheet

软件工程考试核心概念速查


1️⃣ Software Development Process

软件开发过程

Software process organizes development activities into phases.

软件开发过程将开发活动结构化为多个阶段。


Waterfall Model 瀑布模型

Sequential phase development.

顺序阶段式开发。

✅ Pros 优点

  • Simple & structured
    简单清晰、易管理
  • Good for stable requirements
    适合需求稳定项目
  • Clear documentation
    文档规范完整

❌ Cons 缺点

  • Hard to accommodate change
    难以适应需求变化
  • Late defect discovery
    缺陷发现较晚
  • Expensive rework
    返工成本高

Exam Tip: rigid process, late feedback


Spiral Model 螺旋模型

Risk-driven iterative development.

以风险驱动的迭代开发。

✅ Pros

  • Focus on risk reduction
    优先降低风险
  • Early risk detection
    早期发现风险
  • Iterative improvement
    迭代优化

❌ Cons

  • Complex management
    管理复杂
  • Expensiv e
    成本较高
  • Requires expertise
    需要经验丰富团队

Exam Tip: risk-first development


Agile Development 敏捷开发

Iterative, adaptive, customer collaboration.

迭代开发,快速响应变化。

✅ Pros

  • Adapts to change
    适应需求变化
  • Continuous feedback
    持续反馈
  • Faster value delivery
    快速交付价值

❌ Cons

  • Less predictability
    可预测性较低
  • Requires customer involvement
    需要客户持续参与
  • Hard to scale
    大型项目难扩展

Exam Tip: embraces uncertainty & change


Extreme Programming (XP)

Agile practice emphasizing engineering discipline.

强调工程实践的敏捷方法。

✅ Pros

  • High code quality (TDD & pair programming)
    TDD与结对编程提高质量
  • Rapid feedback
    快速反馈
  • Strong collaboration
    团队协作强

❌ Cons

  • Intensive teamwork required
    协作要求高
  • Hard for large teams
    不适合大型团队

2️⃣ Planning & Scheduling

项目规划与进度


Importance of Planning

Benefits

  • reduces cost later
    降低后期成本
  • improves efficiency
    提高效率
  • prevents integration failure
    避免集成失败

Poor planning leads to:

  • scope creep 范围膨胀
  • late defects 缺陷晚发现
  • integration failures 集成失败

Milestones vs Deliverables

Milestones

  • internal progress checkpoints
  • 内部进度检查点

Deliverables

  • outputs delivered to customer
  • 交付给客户的成果

❗ “80% complete” is NOT a milestone


Scheduling Reality

Last 10% of work may take 40% of total time.

最后10%可能耗费40%的时间。

原因:

  • integration problems
  • edge cases
  • polishing & debugging

3️⃣ Risk & Uncertainty

风险与不确定性

Risk management = identify → assess → prioritize → mitigate

风险管理流程:识别 → 评估 → 排序 → 降低


Common Risks

  • staff turnover 人员流失
  • performance issues 性能问题
  • new competitors 竞争产品
  • technology failure 技术风险

Effective Risk Management

  • address risks early
  • estimate likelihood & impact
  • focus on major risks
  • prepare contingency plans

尽早处理风险、评估概率与影响、关注关键风险、制定应急方案。


Zero-Risk Bias 零风险偏见

Tendency to eliminate one risk completely instead of minimizing overall risk.

倾向完全消除某一风险,而不是降低整体风险。


Weber’s Law 韦伯定律

Problems obvious in small systems are harder to detect in large systems.

小系统明显的问题,在大型系统中更难察觉。


4️⃣ Measurement & Metrics

软件度量与指标

Measurement reduces uncertainty.

度量用于减少不确定性。


Lines of Code (LOC)

✅ Pros

  • easy to measure
    易测量
  • simple comparison
    易比较

❌ Cons

  • affected by language/style
    受语言与格式影响
  • more LOC ≠ productivity
    行数多不代表效率高

Cyclomatic Complexity 圈复杂度

Measures number of independent execution paths.

衡量独立执行路径数量。

✅ Pros

  • estimates testing effort
    估算测试复杂度
  • identifies complex code
    识别复杂代码

❌ Cons

  • ignores data complexity
    忽略数据复杂度
  • not full quality measure
    不能全面衡量质量

Maintainability Index (MI)

0–100 scale indicating maintainability.

数值越高越易维护。

Derived from:

  • LOC
  • Cyclomatic complexity
  • Halstead volume

Halstead Volume

Measures program size via operators & operands.

通过操作符与操作数衡量程序规模。


Measurement Biases 度量偏差

Streetlight Effect 路灯效应

Measuring what is easy instead of what matters.

测量容易的,而非重要的。

McNamara Fallacy

Relying only on quantitative metrics.

只依赖量化指标做决策。

Correlation ≠ Causation

相关不代表因果。

Confounding Variables

Hidden factors influencing results.

混杂变量影响结果。


5️⃣ Quality Assurance & Testing

质量保证与测试

QA focuses on preventing defects through process.

QA 通过流程改进预防缺陷。

Testing executes the program to find defects.

测试通过运行程序发现缺陷。


QA vs Testing

QA = prevention & process
QA 是预防与流程

Testing = execution & detection
Testing 是执行与发现


Testing Truth

Testing can reveal bugs but cannot prove absence.

测试能发现错误,但不能证明没有错误。

原因:

  • infinite input space
  • halting problem

External vs Internal Quality

External

  • correctness
  • reliability
  • security
  • no crashes

用户体验质量

Internal

  • readability
  • maintainability
  • structure

开发者视角质量


Testing Types

Unit Testing

Tests individual components.

优点:

  • fast & repeatable
  • easy debugging

Integration Testing

Tests modules working together.

验证模块协同工作。


Regression Testing

Ensures changes don’t break old features.

防止旧功能被破坏。


Test-Driven Development (TDD)

  1. write failing test
  2. implement code
  3. pass test
  4. refactor

优点:

  • better design
  • fewer bugs

Mocking

Simulates dependencies.

模拟依赖组件。

Used when:

  • APIs unavailable
  • failures hard to trigger

Fuzz Testing

Random inputs to detect crashes & vulnerabilities.

随机输入发现崩溃与安全漏洞。


Penetration Testing

Simulates attacks to evaluate security.

模拟攻击评估安全性。


6️⃣ Test Coverage & Test Quality

Coverage measures how much code tests execute.

覆盖率衡量测试执行范围。


Line Coverage

executed lines / total lines

Branch Coverage

tests true & false paths

Branch coverage > line coverage


Coverage Limitations

Coverage ≠ correctness
覆盖率不保证正确性


Mutation Testing

Insert defects to evaluate test strength.

Mutation score = killed mutants / total

优点:

  • evaluates test effectiveness

缺点:

  • expensive
  • equivalent mutants

7️⃣ Test Inputs & Oracles

Test case includes:

  • input
  • oracle
  • comparator

测试用例包含: 输入 + 预期输出 + 比较机制


Oracle Problem

Determining correct output is difficult.

确定正确输出困难。

Implicit oracles:

  • no crash
  • no infinite loop

Path Explosion

Paths = 2^N decisions
路径指数增长。


Invariants

Properties always true.

始终成立的性质。

可作为测试判定依据。


8️⃣ Code Review & Inspection

Static QA without execution.

不运行程序的质量保证方法。


Code Review

Peer review of changes.

同伴评审代码。

Goals

  • find defects
  • improve readability
  • knowledge sharing

Code Inspection

Formal, structured team review.

正式结构化评审。

优点:

  • thorough detection

缺点:

  • expensive

Why Not Testing Alone?

Testing cannot evaluate:

  • maintainability
  • design quality
  • documentation

9️⃣ Dynamic Analysis

动态分析

Runs instrumented program to collect runtime data.

运行插桩程序收集运行时信息。


Uses

  • performance profiling
  • memory usage
  • race detection
  • security vulnerabilities

Race Condition

Concurrent access without synchronization.

并发访问共享资源导致错误。


Taint Tracking

Tracks untrusted input influence.

追踪不可信输入传播。


Limitations

  • performance overhead
  • false positives
  • behavior change (Heisenbugs)

🔟 Static & Dataflow Analysis

静态与数据流分析

Static analysis examines code without execution.

静态分析在不运行程序的情况下分析代码。


Why Important

Testing cannot cover all paths.

测试无法覆盖所有路径。

Static analysis reasons about all possible executions.


Dataflow Analysis

Tracks abstract values through program flow.

跟踪变量在程序中的传播。


AST & CFG

AST → syntax structure
CFG → execution paths


Conservative Analysis

Prefer unknown over incorrect results.

宁可不确定,也不能错误判断。


Limit

Many properties are undecidable (Rice’s theorem).

许多程序性质不可判定。


⭐ EXAM CORE TRUTHS(必背结论)

  • Early defect detection saves cost
  • Testing increases confidence, not correctness
  • Coverage ≠ correctness
  • Measurement reduces uncertainty
  • Metrics can create bad incentives
  • Static + dynamic analysis complement testing
  • Risk = probability × impact