软件工程:软考重点7的深度解析

发表时间: 2022-10-31 19:52

一、软件工程概述

1. 软件生存周期

  • 软件:包含程序、数据及相关文档
  • 软件工程:涉及到软件开发、维护、管理等多方面的原理、工具与环境 。最终的目的是开发高质量的软件。
  • 目的:提高软件生产率、提高软件质量、降低软件成本。

文档作用:

  • 提高软件开发过程的能见度
  • 提高开发效率,便于发现错误和不一致性;
  • 作为开发人员在一定阶段的工作成果和结束标志;
  • 记录开发过程中的有关信息,便于协调以后的软件、开发、使用和维护;
  • 提供对软件的运行、维护和培训的有关信息,便于相关人员和用户之间的协作、交流和了解;
  • 便于潜在用户了解软件的功能、性能,为选购提供选择依据。

2. 软件生成周期模型

(1)瀑布模型(Waterfall Model)

按软件生成周期为序来制定的开发模型,适合需求明确的模型,但缺乏灵活性。

原型模型的概念

在短时间先开发一个很简易的原型版本。

(2)演化模型(Evolutionary Model)

基于原型模型,对需求缺乏准确认识的情况下,根据用户使用过程中提出的意见和建议对原型不断重复改进,缺点是要对用户要求加以控制。

(3)增量模型(Incremental Model)

基于原型模型,把需求先划分多个模块,每个模块可进行增量开发。

(4)螺旋模型(Spiral Model)

适合风险比较大的项目,加入了风险分析。

(5)喷泉模型(Fountain Model)

以用户需求为基础,适用于面向对象开发。开发要重复多次。

(6)统一过程(Unified Process)

用例和风险驱动,以架构为中心。

(7)敏捷方法(Agile Development)

尽可能早地、持续地对有价值的软件的交付,强调是快速、时效性高,不强调文档。

3. 软件开发方法

(1)结构化方法

自上向下逐层分解。

(2)面向对象开发方法

面向对象分析、设计与实现,适合比较复杂的项目模型。

(3)Jackson方法

面向结构的开发方法。

(4)原型化方法

需求不清晰、业务不确定的情况。

二、软件需求分析

(1)可行性分析

  • 技术可行性
  • 经济可行性
  • 操作可行性

(2)需求分析

  • 功能需求
  • 非功能需求
  • 设计约束

三、软件设计

(1)软件设计的原则

  • 抽象:内聚(模块内的交互程度)、耦合(模块间的交互程度),希望高内聚、低耦合;
  • 模块化
  • 信息隐蔽
  • 模块独立

(2)内聚和耦合

内聚类型:

  • 功能内聚:最强的内聚,完成一个单一功能;
  • 顺序内聚:前一个功能的输出是后一个功能的输入;
  • 通信内聚:所有处理元素集中在一个数据结构的区域上;
  • 过程内聚
  • 暧时内聚(时间内聚):同时执行的动作组合在一起
  • 逻辑内聚
  • 偶然内聚:功能间没有任何联系

耦合

非直接耦合:模块间没有直接关系,模块间不传递任何信息。

四、软件测试

1. V模型

2. 软件测试的过程

(1)单元测试、模块测试

一般使用白盒测试(知道内部结构和程序流等)

(2)集成测试

黑盒测试,按系统设计说明书进行测试。

(3)确认测试

黑盒测试,检查软件的功能、性能和其他特征是否与用户的需求一致。

(4)系统测试

墨盒测试,把软件放在实际的硬件和网络环境中进行测试,主要测试软件的非功能需求和质量属性是否得到满足。

3. 黑盒测试与白盒测试

  • 语句覆盖:被测程序的每个语句至少执行一次(最弱的覆盖标准)。
  • 判定覆盖:判定条件(if)至少获得一次真、假值。
  • 条件覆盖:每个判定语句中的每个逻辑条件的各种可能值至少满足一次。
  • 路径覆盖:覆盖所有可能的程序运行路径。
  • 判定/条件覆盖:同时满足判定和条件覆盖。
  • 条件组合覆盖:……

4. 测试原则与注意事项

(1)测试原则

  • 尽早测试、测试应贯穿在开发的各个阶段;
  • 测试工作应避免由开发者承担;
  • 设计测试方案的时候,不仅要确定输入数据,还要根据系统功能确定预期的输出结果;
  • 设计测试用例时,要输入不合理的数据或条件;
  • 测试程序中要检验程序是否做了该做的事、还要确认不要多做了事情;
  • 测试要有计划,测试计划、测试用例作为文档的一部分保存;
  • 测试用例精心设计 ,便于重复使用。

(2)测试注意事项

  • 发现错误较多的模块,在纠正错误后,遗留的错误也比较多;
  • 测试的目的是为了发现错误,而不是验证程序没有错误;
  • 通过软件测试不可能完全发现错误;
  • 不可能保证程序100%没问题;
  • 测试工作由开发方负责,从需求阶段提出;
  • 开发时将质量也构建进产品;
  • 测试人员与开发人员要密切合作;
  • 软件测试的目的不仅要找出缺陷,还要随时提供质量相关信息。

五、软件运行与维护

  • 可理解性
  • 可测试性
  • 可修改性

软件维护类型:

  • 正确性维护:更正程序错误。
  • 适应性维护:使用软件适应新技术变化或管理需求变化。
  • 预防性维护:为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件的变化,主动增加预防性的功能。
  • 完善性维护:扩充功能和改善性能。

六、程序员职业素养

1. 软件工程基本原理

  • 用分阶段的生命周期计划严格管理,将复杂问题简化处理;
  • 坚持进行阶段评审;
  • 严格的版本管理;
  • 采用现代程序设计技术,但不追求最新技术;
  • 审查记录;
  • 开发小组人员少而精;
  • 知识管理。

2. 软件工程的最终目标

  • 正确性
  • 可用性
  • 可靠性
  • 友好性
  • 可读性
  • 健壮性:不合理的数据操作可以检查、纠正、提示;
  • 效率
  • 可移值性

3. 程序员的职业素养

  • 有团队精神和较强的沟通能力
  • 文档与知识管理
  • 版本管理
  • 编码规范
  • 测试体系