### 软件工程复习提纲
#### 一、软件工程概述
- **软件定义**:软件是指计算机系统中的程序、数据以及与之相关的文档。它由程序、数据及其相关文档组成。
- **软件危机**:
- **现象**:在软件开发过程中遇到的一系列难以克服的问题。
- **症状**:
- 开发周期延长。
- 成本超支严重。
- 功能需求不明确或频繁变更。
- 维护工作量大。
- **解决方法**:
- 强调团队合作与沟通。
- 使用先进的开发技术和工具。
- 提高人员素质和管理水平。
- **软件工程**:
- 定义:一种应用于软件开发与维护中的系统化、规范化、可度量的方法。
- 三要素:方法、工具、过程。
- 各种模型特点:
- 瀑布模型:顺序开发,每个阶段完成后才能进入下一阶段。
- 增量模型:逐步增加功能,每次迭代增加一部分功能。
- 迭代模型:多次迭代完成整个系统,每次迭代都有完整的小型系统。
- 螺旋模型:结合了瀑布模型与原型模型的优点,增加了风险评估环节。
- 生命周期:
- 需求分析:确定用户的需求。
- 设计:根据需求分析结果进行系统设计。
- 开发:编写程序代码。
- 测试:验证软件是否满足需求规格说明。
- 维护:对已发布的软件进行修改以适应环境变化。
#### 二、需求分析
- **可行性研究**:包括经济可行性、技术可行性等方面的研究。
- 经济可行性:分析项目的经济效益,计算成本和收益,公式F=P(1+i)^n不作为考试内容。
- **功能描述**:
- 结构化分析:
- 数据模型:E-R图。
- 功能模型:数据流图。
- 行为模型:状态图。
- 数据流图:
- 基础概念:至少掌握三层数据流图的绘制方法。
- 注意事项:
- 四个基本符号:源点/终点、处理、数据流、数据存储。
- 父图子图平衡原则。
- 避免无实体到实体的数据流、无实体到文件的数据流、单独的处理单元。
- 处理单元前后命名应有明显变化。
#### 三、软件设计
- **设计原则**:
- 抽象:将复杂系统分解成若干个易于理解和处理的部分。
- 模块化:将系统分解成相互独立的模块。
- 模块独立性:
- 高内聚:模块内部各部分紧密相关。
- 顺序内聚:所有处理元素都相关联且必须按特定顺序执行。
- 通信内聚:所有处理元素都操作同一数据集。
- 功能内聚:模块只执行单一功能。
- 低耦合:减少模块间的依赖关系。
- 数据耦合:通过参数传递数据。
- 控制耦合:通过参数传递控制信息。
- 内容耦合:一个模块直接访问另一个模块的内部数据。
- 信息隐藏:每个模块只对外暴露必要的接口,隐藏内部实现细节。
- **概要设计**:通过层次图来展示系统的整体架构。
- **详细设计**:包括控制域、作用域、流程图等多种表示方法。
#### 四、面向对象分析与设计
- **面向对象分析**:
- 对象模型:采用词性分析法。
- 结构、属性和服务的定义。
- **面向对象设计**:
- 利用UML(统一建模语言)进行设计。
- 九种UML图:
- 用例图:描述系统功能及参与者之间的关系。
- 类图:描述系统的静态结构。
- 序列图:描述对象间的交互顺序。
- **其他设计工具**:PAD图、NS图、判定树、判定表、伪代码等。
#### 五、软件测试
- **目标**:发现软件中存在的缺陷。
- **方法**:
- 黑盒测试:基于软件的功能性测试。
- 等价划分:将输入数据划分为有效和无效区间。
- 边界值分析:选取边界值作为测试数据。
- 白盒测试:基于软件内部逻辑的测试。
- 路径覆盖:确保每条路径都被测试过。
- 条件覆盖:确保每个条件都被测试过。
- **策略**:
- 单元测试:针对单个模块的测试。
- 集成测试:测试多个模块之间的接口。
- 系统测试:测试整个系统的功能。
- 可靠性测试:评估软件在实际运行环境下表现如何。
#### 六、软件维护与项目管理
- **软件维护**:根据软件的变化需求对其进行修改。
- 四种类型:改正性维护、适应性维护、完善性维护、预防性维护。
- **项目管理**:
- 进度管理:制定合理的项目时间表。
- 成本估算:预测项目总成本。
- 风险管理:识别并评估潜在风险。
通过以上内容的梳理与总结,我们能够清晰地了解软件工程的主要知识点,并为后续的学习与实践打下坚实的基础。