提示:本章是全书的基础,考试通常侧重于名词解释(如什么是软件工程、软件危机)和简答题(如优良软件的特性、职业道德)。请重点关注标记了 🔥 的内容。
1. 软件与软件工程的基础定义 (Definitions)
1.1 什么是软件 (What is Software?) 🔥
核心定义: 不仅仅是计算机程序 (Computer programs),还包括:
- 相关文档 (Associated documentation):需求文档、设计文档、用户手册等。
- 配置数据 (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)(必背):
- 软件描述 (Specification):定义软件应该做什么(需求分析)。
- 软件开发 (Development):设计和编程。
- 软件有效性验证 (Validation):测试,验证软件是否符合客户需求。
- 软件演化 (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) 🔥
助教提示:这是一道经典的简答题。请记住这四个关键词。
软件不仅要功能正确,还必须具备以下特性:
- 可维护性 (Maintainability):软件能适应客户需求的变更。
- 理由:软件生命周期中大部分成本在于维护。
- 可信赖性 (Dependability):包括可靠性、安全性和保密性。
- 理由:系统崩溃不能造成物理或经济损失。
- 有效性/效率 (Efficiency):不浪费系统资源(内存、处理器时间)。
- 可用性 (Usability):用户界面友好,易于使用。
4. 挑战与新趋势 (Challenges & Trends)
4.1 当前面临的三大挑战
- 遗留系统 (Legacy systems):如何维护和更新旧的、但通过核心业务的系统。
- 多样性 (Heterogeneity):系统需要跨网络、跨硬件运行。
- 交付时间 (Delivery):缩短开发周期,更快交付的压力。
4.2 软件工程教育的新技术趋势 (PPT P12 特别提及)
- 大模型与AI:
- 从面向人的需求工程 $\rightarrow$ 面向机器的意图表达(NLP、Prompt Engineering)。
- 代码生成后的验证成为主要工作(代码评审、测试用例生成)。
- 核心观点:AI 正在改变软件开发模式,从“写代码”转向“调教模型”和“验证代码”。
5. 职业道德 (Professional Responsibility) 🔥
核心原则:软件工程师不仅要有技术能力,还必须诚实守信,遵守职业道德。
5.1 四大责任领域
- 机密性 (Confidentiality):无论是否签署保密协议,都应尊重雇主/客户的机密。
- 能力 (Competence):不要冒充专家,不要接受超出自己能力范围的工作。
- 知识产权 (Intellectual Property Rights):尊重专利、版权,保护雇主/客户的知识产权。
- 计算机滥用 (Computer Misuse):不利用技术技能滥用他人计算机(从玩游戏到传播病毒)。
5.2 道德准则 (Code of Ethics) - 8项原则 (ACM/IEEE)
- Public (公众):公众利益至上。
- Client and Employer (客户与雇主):符合公众利益前提下,为客户/雇主服务。
- Product (产品):确保产品达到最高标准。
- Judgment (判断力):保持独立、完整的职业判断。
- Management (管理):管理者应倡导合乎道德的方法。
- Profession (职业):维护职业声誉。
- Colleagues (同事):支持和公平对待同事。
- 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 调查:项目失败原因多为需求不完整、缺乏用户交流、资源不足。
总结(本章核心思想)
这一章实际上是在回答三个问题:“什么是软件工程?”(它是为了解决软件危机而诞生的工程化学科)、“好的软件是什么样的?”(它必须可维护、可信赖、高效且好用)、以及**“工程师应该怎么做?”**(遵守过程模型,严守职业道德)。
对于复习,请务必背熟 软件工程的定义、软件过程的四个基本活动 以及 优良软件的四个属性,这些是后续所有章节的基石。