提示:本章是全书的基础,考试通常侧重于名词解释(如什么是软件工程、软件危机)和简答题(如优良软件的特性、职业道德)。请重点关注标记了 🔥 的内容。

1. 软件与软件工程的基础定义 (Definitions)

1.1 什么是软件 (What is Software?) 🔥

核心定义: 不仅仅是计算机程序 (Computer programs),还包括:

  1. 相关文档 (Associated documentation):需求文档、设计文档、用户手册等。
  2. 配置数据 (Configuration Data):让程序运行所需的参数设置。

助教解读

考试陷阱:如果题目问“软件就是代码吗?”,一定要回答 False软件 = 程序 + 数据 + 文档

分类

  • 通用软件 (Generic products):为公开市场开发(如 Excel, 微信)。
  • 定制软件 (Customized products):为特定客户开发(如某银行的内部管理系统)。

1.2 什么是软件工程 (What is Software Engineering?) 🔥

核心定义: 软件工程是一门工程学科 (Engineering discipline),涉及软件生产的所有方面 (All aspects)

  • 核心手段:采用系统化 (Systematic)、有组织 (Organised) 的方法。
  • 依据:根据问题类型、开发约束和可用资源,选择合适的工具和技术。

1.3 软件工程 vs 计算机科学 (SE vs CS)

  • 计算机科学 (CS):关注理论 (Theory) 和基础 (Fundamentals)。
  • 软件工程 (SE):关注实践 (Practicalities),即如何开发和交付有用的软件。
  • 关系:CS 是 SE 的理论支撑,但目前的 CS 理论还不足以完全支撑 SE 的所有实践。

2. 软件过程与方法 (Process & Methods)

2.1 软件过程 (Software Process)

定义:以开发或演化软件为目标的一系列活动。 🔥 四大通用活动 (Generic Activities)(必背):

  1. 软件描述 (Specification):定义软件应该做什么(需求分析)。
  2. 软件开发 (Development):设计和编程。
  3. 软件有效性验证 (Validation):测试,验证软件是否符合客户需求。
  4. 软件演化 (Evolution):根据需求变更修改软件(维护)。

2.2 软件过程模型 (Software Process Model)

定义:从特定视角对软件过程的简化描述。 常见模型例子

  • 瀑布模型 (Waterfall):按部就班,一步一个脚印。
  • 演化开发 (Evolutionary development):边做边改,迭代。
  • 形式化变换 (Formal transformation):数学化推导(较少见)。
  • 基于复用的集成 (Integration from reusable components):拼积木式开发。

2.3 软件工程方法 (Software Engineering Methods)

组成要素

  • 模型描述 (Model descriptions):如图形化模型(UML图)。
  • 规则 (Rules):模型必须遵守的约束。
  • 建议 (Recommendations):设计时的最佳实践建议。
  • 过程指南 (Process guidance):指导活动的步骤。

3. 优良软件的特性 (Attributes of Good Software) 🔥

助教提示:这是一道经典的简答题。请记住这四个关键词。

软件不仅要功能正确,还必须具备以下特性:

  1. 可维护性 (Maintainability):软件能适应客户需求的变更。
    • 理由:软件生命周期中大部分成本在于维护。
  2. 可信赖性 (Dependability):包括可靠性、安全性和保密性。
    • 理由:系统崩溃不能造成物理或经济损失。
  3. 有效性/效率 (Efficiency):不浪费系统资源(内存、处理器时间)。
  4. 可用性 (Usability):用户界面友好,易于使用。

4.1 当前面临的三大挑战

  1. 遗留系统 (Legacy systems):如何维护和更新旧的、但通过核心业务的系统。
  2. 多样性 (Heterogeneity):系统需要跨网络、跨硬件运行。
  3. 交付时间 (Delivery):缩短开发周期,更快交付的压力。

4.2 软件工程教育的新技术趋势 (PPT P12 特别提及)

  • 大模型与AI
    • 从面向人的需求工程 $\rightarrow$ 面向机器的意图表达(NLP、Prompt Engineering)。
    • 代码生成后的验证成为主要工作(代码评审、测试用例生成)。
    • 核心观点:AI 正在改变软件开发模式,从“写代码”转向“调教模型”和“验证代码”。

5. 职业道德 (Professional Responsibility) 🔥

核心原则:软件工程师不仅要有技术能力,还必须诚实守信,遵守职业道德。

5.1 四大责任领域

  1. 机密性 (Confidentiality):无论是否签署保密协议,都应尊重雇主/客户的机密。
  2. 能力 (Competence):不要冒充专家,不要接受超出自己能力范围的工作。
  3. 知识产权 (Intellectual Property Rights):尊重专利、版权,保护雇主/客户的知识产权。
  4. 计算机滥用 (Computer Misuse):不利用技术技能滥用他人计算机(从玩游戏到传播病毒)。

5.2 道德准则 (Code of Ethics) - 8项原则 (ACM/IEEE)

  1. Public (公众):公众利益至上。
  2. Client and Employer (客户与雇主):符合公众利益前提下,为客户/雇主服务。
  3. Product (产品):确保产品达到最高标准。
  4. Judgment (判断力):保持独立、完整的职业判断。
  5. Management (管理):管理者应倡导合乎道德的方法。
  6. Profession (职业):维护职业声誉。
  7. Colleagues (同事):支持和公平对待同事。
  8. Self (自我):终身学习,提升自我。

6. 软件危机与历史 (Software Crisis & Context)

  • 软件危机 (Software Crisis)
    • 现象:项目超出预算、延期交付、甚至取消(PPT中 Standish Group 数据显示约 31% 项目被取消)。
    • 经典著作《人月神话》 (The Mythical Man-Month),作者 Frederick P. Brooks。
      • 核心观点:向延后的软件项目增加人力,只会让它更慢(因为沟通成本增加)。
  • 关键人物Barry Boehm(软件工程经济学、螺旋模型提出者)。

7. 行业背景 (Industry Context)

(这部分主要作为了解,考试通常不考具体数字)

  • 现状:IT行业涵盖互联网、电信、软件、电商等。
  • 特点
    • 巨头并存(Apple, Microsoft, Amazon, Google等)。
    • 中国企业(华为、阿里、腾讯等)在世界500强中占有一席之地,但在顶尖技术领域仍有差距。
    • Standish 调查:项目失败原因多为需求不完整、缺乏用户交流、资源不足

总结(本章核心思想)

这一章实际上是在回答三个问题:“什么是软件工程?”(它是为了解决软件危机而诞生的工程化学科)、“好的软件是什么样的?”(它必须可维护、可信赖、高效且好用)、以及**“工程师应该怎么做?”**(遵守过程模型,严守职业道德)。

对于复习,请务必背熟 软件工程的定义软件过程的四个基本活动 以及 优良软件的四个属性,这些是后续所有章节的基石。