Categories: 技术

软件构造原理复习文档

一、软件工程全景 (ALM & SDLC)

ALM(应用生命周期管理)

  • 三大活动:治理(Governance)、开发(Development)、运维/维护(Operations/Maintenance)。
  • 关键事实70%以上成本发生在维护阶段
  • SDLC 关系:ALM > SDLC;一个 ALM 周期可包含多个 SDLC。

SDLC(软件开发生命周期)

  • 经典 7 阶段
    • 规划(Planning)
    • 需求分析(Requirements Analysis)
    • 设计(Design & Prototyping)
    • 开发(Coding)
    • 测试(Testing)
    • 部署(Deployment)
    • 运维/维护(Maintenance)
  • 设计产出
    • HLD(高阶设计):模块、交互、架构图、技术栈。
    • LLD(低阶设计):函数逻辑、数据库表、接口细节、错误消息。
  • 需求原则:必须可验证(例:“查询在 3 秒内返回”,而非“查询要快”)。

主流模型

  • 敏捷(Agile):当前最流行,快速迭代验证想法。
  • 其他:瀑布、螺旋、V 模型、CMMI、统一过程(UML)。

UML

  • 用途:可视化系统结构与行为(如序列图)。
  • 标准化:由 OMG 制定,ISO 采纳。

二、软件构造基本原则

软件构造 = 将设计转化为可工作软件,核心是管理复杂性

1. 最小化复杂性(Minimizing Complexity)

  • 策略
    • 分解:拆分为小模块。
    • 编码简洁:函数 <30 行,避免炫技代码。
    • 提高可读性:清晰命名(strFileName)、单一变量单一用途、充分注释。
    • 采用成熟模型:OOP、关系数据库。

2. 优先使用组合而非继承(Composition over Inheritance)

  • 组合优势:更灵活、易维护、行为定义清晰。
  • 实现:类 A “has-a” 类 B,通过委托调用功能。

3. 为验证而构造(Construction for Verification)

  • 实践
    • 遵循编码标准。
    • 代码审查(Code Review)。
    • 支持自动化测试(单元测试、集成测试、冒烟测试)。
    • 谨慎使用递归等复杂结构。

4. 拥抱复用(Reuse)

  • 资产:库、模块、API、COTS(商业现货)。
  • AI 时代:AI 辅助生成 ≠ 替代复用;复用更可靠、一致。

5. 遵循标准(Following Standards)

  • 外部:IEEE, ISO, OMG。
  • 内部:团队/项目规范。

6. 其他编程原则

  • KISS:Keep It Simple, Stupid。
  • DRY:Don’t Repeat Yourself。
  • YAGNI:You Aren’t Gonna Need It。
  • 单一职责:一个类只做一件事。
  • 开闭原则:对扩展开放,对修改关闭。

三、并发与并行计算

为何需要并行?

  • 单 CPU 速度受光速物理极限制约,无法满足计算密集型需求。

PRAM 模型(并行随机存取机)

  • 写冲突处理
    • EREW:独占读写。
    • CREW:并发读,独占写。
    • CRCW:并发读写(Common / Arbitrary / Priority)。
  • 现实映射:多核 CPU ≈ CREW

性能定律

  • 阿姆达尔定律(Amdahl’s Law)
    • 固定问题规模。
    • Speedup ≤ 1 / (s + (1-s)/p)s = 串行部分比例。
    • 上限明显(如 s=0.1 ⇒ Speedup < 10)。
  • 古斯塔夫森定律(Gustafson’s Law)
    • 固定运行时间,扩大问题规模。
    • Speedup = p - s(p - 1)
    • 更乐观,适合大规模并行。

多处理器架构

  • UMA / SMP:统一内存访问,共享总线,CPU 数量受限。
  • NUMA:非统一内存访问,本地内存快,远程慢,可扩展性强。

弗林分类法(Flynn’s Taxonomy)

  • SISD:单指令单数据(传统 PC)。
  • SIMD:单指令多数据(GPU、向量机)。
  • MIMD:多指令多数据(多核、集群)。

关键结论

  • 并行代码总是更快” — 错误!

存在线程创建、同步、通信等开销,可能得不偿失。

四、软件开发工具

工具类别核心功能与要点
IDE集成编码、编译、调试、版本控制,提升效率与质量。
代码重构不改变行为,改善内部结构(可读性、可维护性)。
GUI 构建器WYSIWYG 设计(如 Dreamweaver),自动生成界面和事件处理代码。
单元测试工具自动化验证模块功能;Copilot 等 AI 可辅助生成测试用例。
性能分析工具- 剖析(Profiling):找性能瓶颈(hot spots)。<br>- 程序切片:定位影响变量的代码,用于调试。
其他关键工具- 版本控制:Git, SVN<br>- CI/CD:Jenkins<br>- 协作:Jira, Databricks<br>- 调试:VS Debugger
cher1shed

Share
Published by
cher1shed

Recent Posts

JDBC

一、简介 JDBC就是使用Ja…

7 天 ago

多线程拓展

1 线程状态 1.1 状态介绍…

4 月 ago

Commons-io方法大全

1,IOUtils(数据相关)…

4 月 ago

Catherine

隐约觉得的会发生的事情还是终究…

5 月 ago

Zotero简单使用教程

最近发现文章里的图片加载不出来…

5 月 ago

结果到底重不重要

今天看到一个很有意思的辩题,也…

6 月 ago