软件工程概论复习

tech2022-10-31  128

软工复习

第一章

1.软件=程序+数据+文档

2.软件的特性: (1)形态特性 (2)智能特性 (3)开发特性 (4)质量特性 (5)生产特性 (6)管理特性 (7)环境特性 (8)维护特性 (9)废弃特性 (10)应用特性

3.软件分类: (1)系统软件:操作系统、数据库管理系统、设备驱动程序、通信和网络处理程序 (2)支撑软件:①纵向支撑软件:需求分析工具、设计工具、编码工具、测试工具、维护工具等。②横向支撑软件:项目管理工具、配置管理工具等。 (3)应用软件:商业数据处理软件等 (4)可复用软件

4.软件危机:软件的发展速度远远滞后于硬件的发展速度,不能满足社会日益增长的软件需求。软件开发周期长、成本高、质量差、维护困难。

5.软件危机发生原因: (1)缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作计划很难制定 (2)软件人员与用户的交流存在障碍 (3)软件开发的过程不规范,缺少方法论和规范的指导 (4)随着软件规模的增大,其复杂性往往会呈指数级升高 (5)缺少有效的软件评测工具,提交用户的软件质量差,在运行种暴露大量的问题

6.软件工程的目标:运用先进的软件开发技术和管理方法来提高软件的质量和生产率

7.软件工程的基本目标: (1)付出较低的开发成本 (2)达到要求的软件功能 (3)取得较好的软件性能 (4)开发的软件易于移植 (5)需要较低的维护费用 (6)能按时完成开发工作,及时使用

8.软件质量特性: (1)功能性 (2)可靠性 (3)易用性 (4)效率 (5)维护性 (6)可移植性

9.软件的生存周期:软件定义,软件开发,运行维护。

10.开发过程种的典型文档: (1)软件需求规格说明书 (2)项目计划 (3)软件测试计划 (4)软件设计说明书 (5)用户手册

11.各阶段所要完成的任务: (1)软件定义时期:①问题定义②可行性研究③需求分析 (2)软件开发时期:①概要设计②详细设计③编码④测试 (3)软件维护时期:维护

12.软件工程方法学的三要素:方法、工具、过程。 方法——>技术支持,即如何做 工具——>自动化或半自动化环境 过程——>规定了完成各项工作的步骤

第二章

1.瀑布模型: (1)特点: ①阶段间具有顺序性和依赖性 ②推迟实现的观点 ③质量保证的观点 (2)优点: ①可强化开发人员采用规范化的方法 ②严格规定了每个阶段必须提交的文档 ③要求每个阶段提交的所有产品必须都是经过验证的 (3)缺点: ①最终开发出的软件产品不能真正满足用户需求 ②瀑布模型只适用于项目开始时需求已确定的情况

2.快速原型模型: (1)特点:所完成的功能往往是最终产品的一个子集 (2)优点: ①有助于满足用户的真实需求 ②能正确描述用户需求 ③按线性顺序进行 ④不会出现因文档错误而进行较大的返工 ⑤在设计和编码阶段发生的错误的可能性比较小 ⑥本质是快速,开发人员应该尽可能快地建造出原型系统,用于获知用户的真正需求

3.增量模型: (1)优点: ①在较短时间内向用户提交一些有用的工作产品 ②逐步增加产品的功能 ③项目失败风险较低 ④优先级最高的服务首先交付 (2)需要注意的问题: ①新构件集成时,必须不破坏已开发出的产品 ②软件体系结构必须是开放的,即向现有产品种加入新构件的过程必须简单、方便

4.螺旋模型: (1)四个象限: ①目标设定 ②风险评估与弱化 ③开发与验证 ④计划 (2)优点: ①有利于已有软件的重用,把软件质量作为软件开发的一个重要目标 ②减少了过多测试或测试不足带来的风险 ③维护和开发之间并没有本质区别 (3)缺点: 是风险驱动的

5.喷泉模型: 迭代和无间隙的特性

6.统一过程: 用UML进行面向对象软件工程的框架 (1)统一过程的核心过程是工作流:业务建模、需求、分析与设计、实现、测试、部署 (2)统一过程阶段:初始阶段、细化阶段、构造阶段、移交阶段

7.软件复用是提高软件生产率及软件质量的最有效的途径

8.敏捷开发: (1)敏捷原则: 1)最优先的是尽早、持续地交付有价值的软件 2)在开发后期,也欢迎需求变更 3)经常交付可运行的软件 4)业务人员和开发人员必须天天都在一起工作 5)围绕有积极性的个体构建项目 6)面对面交谈 7)可运行软件是进度的首要度量标准 8)提倡可持续的发展速度 9)不断关注优秀的技能和好的设计 10)简单 11)最好的设计、架构、需求出自于自组织团队 12)每隔一段时间,反省并调整

9.极限编程:策划、设计、编码、测试 (1)策划:需求获取活动 (2)设计:保持简洁原则,使用简单而不是复杂的表述,不鼓励额外功能 (3)编码:结对编程 (4)测试:XP验收测试,也称客户测试

10.其他敏捷过程模型: (1)自适应软件开发:思考、协作、学习 (2)Scrum:待定项、冲刺、Scrum例会、演示 (3)敏捷建模:有目的的模型、使用多个模型、轻装上阵、理解模型及工具、适应本地需要 (4)敏捷统一过程:建模、实现、测试、部署、配置及项目管理、环境管理

第三章

1.需求获取的任务:与客户和用户沟通,了解产品的目的是什么,客户或用户想要实现什么,系统和产品如何满足业务的要求,最终系统或产品如何用于日常工作 1)发现和分析问题,并分析问题的原因 / 结果关系 2)与用户进行各种方式的交流,并使用调查研究方法收集信息 3)按数据、过程、结构三个成分观察问题的不同侧面 4)将获取的需求文档化

2.获取并理解用户的需求是最困难的任务之一

3.需求获取的原则:深入浅出、以流程为主的原则

4.需求获取的过程: (1)开发高层的业务模式 (2)定义项目范围和高层需求 (3)识别用户类和用户代表:需求获取的主要目标是理解用户需求,客户参与是关键因素 (4)获取具体的需求 (5)确定目标系统的业务工作流 (6)需求整理与总结

5.结构化分析方法是最具代表性的传统的分析方法。它是一种面向数据流进行需求分析的方法,是一种建模技术,核心是数据字典

6.结构化分析方法的三种图: ①数据流图:用于功能建模 ②实体-关系图(ER图):用于数据建模 ③状态-迁移图(STD):用于行为建模

7.顶层数据流图的作用: 顶层数据流图( 或称 环境图 ) 仅包括一个数据处理过程,也就是要开发的目标系统。 其作用如下: (1) 确定系统在其环境中的位置, 与系统有联系的外部实体(包括硬件、软件、组织机构及人)有哪些。 (2) 通过确定系统的输入和输出与外部实体的关系确定系统的边界 ,也就是要确定哪些功能或处理属于系统范围之内,哪些属于系统范围之外,需要由其他系统处理或人工处理 。

8.在对数据流图进行分解时,需要注意以下两个问题: (1) 当对数据流图分层细化时必须保持信息连续性,也就是说,当把一个处理分解为一系列处理时,分解前和分解后的输入 / 输出数据流必须相同。 (2) 注意分层细化时对编号的处理方法。

第四章:

1.软件设计:包括一套原理、概念、实践,它的任务是回答“怎么做”

2.软件设计的原则: (1)分而治之 (2)模块独立性:高内聚、低耦合 (3)提高抽象层次:自顶向下 (4)复用性设计 (5)灵活性设计

3.耦合:是程序结构中各个模块之间相互关联的度量,取决于各个模块之间的接口的复杂程度、调用模块的方式、通过接口的信息类型 (1)内容耦合 (2)公共耦合 (3)外部耦合 (4)控制耦合 (5)标记耦合 (6)数据耦合 (7)非直接耦合

4.内聚: (1)巧合内聚:模块内没有联系或很松散 (2)逻辑内聚:几种相关功能混合,错误处理模块 (3)时间内聚:与时间有关,初始化模块,终止模块 (4)过程内聚:以特定次序执行 (5)通信内聚:使用相同的输入数据,或产生相同的输出数据 (6)信息内聚:完成多个功能,各个功能都在同一数据结构上操作,基于同一个数据结构 (7)功能内聚:所有的部分都是为了完成一项具体的功能,内聚程度最高

5.软件模块结构的改进方法: (1)模块功能的完善化 (2)消除重复功能,改善软件结构 (3)模块的作用范围应在控制范围之内:判定上移、受判下移 (4)尽可能减少高扇出结构,随着深度增大而扇入 (5)避免或减少使用病态连接 (6)模块大小要适中

第五章

1.面向对象=对象+类+继承+消息通信,对象程序的基本组成单位是类,对象是面向对象程序的核心

2.对象是包含现实世界物体特征的抽象实体,它反映了系统为之保存信息和与它交互的能力。对象=数据+作用于这些数据上的操作

3.对象可分为五类:物理对象、角色、事件、交互、规格说明

4.类:在程序中,通过一种抽象数据类型来描述对象

5.封装:利用抽象数据类型将数据和基于数据的操作封装在一起

6.继承:一种联结类的层次模型,能表述不同类之间的共性

7.多态:面向对象编程的一个特性,解决一个程序中同名的不同方法共存问题,主要通过子类对父类的继承来实现

8.UML关系:依赖、关联、泛化、实现

9.依赖:两个事物之间的语义关系,表示其中一个事物的变化会影响到另一个事物

10.关联:是一种结构关系,它描述了两个或多个类的实例之间的连接关系,分为普通关联、限定关联、关联类、聚合与复合。

11.泛化:一般类和特殊类之间的继承关系。 一般类也称为泛化类 特殊类也称为特化类

一个类可以继承另一个类,一个对象不能继承另一个对象

泛化可分为普通泛化和受限泛化

普通泛化:抽象类通常作为父类 受限泛化:有4个约束条件:交叠、不相交、完全、不完全

12.UML 中有哪些关系?解释类图中聚合和关联的相同点和不同点。 在 UML 中,常见的关系有泛化、聚合、关联、依赖和实现。 在类图中, 关联是一种结构关系,它描述了两个或多个类的实例之间的连接关系。聚合描述了整体和部分之间的结构关系 。按照关联关系的定义,聚合属于一种特殊的关联关系,只不过这种关联关系具有明确的整体 - 部分含义而已。从耦合度的角度看,聚合关系要强于关联关系。

13.UML的几种图: (1)用例图:用于需求分析阶段,建立需求模型 (2)类图:显示了类、类的内部结构、与其他类的联系(联系指类元之间的关系),包括关联、聚合、泛化三种关系 (3)顺序图:描述对象之间的动态交互关系,着重表现对象间消息传递的时间顺序,主要符号有:参与者、对象、对象的生命线、消息 (4)通信图 (5)状态图:描述一个特定对象的所有可能的状态以及引起状态转换的事件,包括:一系列状态、事件、状态之间的转移 (6)活动图:描述从活动到活动的流,由起始状态、终止状态、动作、状态转移、决策、守护条件、同步棒、泳道组成 (7)构件图:描述软件构件及构件之间的依赖关系,显示代码的静态结构 (8)部署图:描述处理器、设备、连接。显示系统硬件的物理拓扑结构及在此结构上执行的软件

第七章

1.体系结构的重要作用: (1)体系结构的表示有利于风险承担者(项目共利益者)交流 (2)体系结构突出了早起设计决策 (3)软件体系结构是可传递和可复用的模型

2.典型的体系结构风格: (1)数据流风格:管道 / 过滤器、批处理序列 管道 / 过滤器风格的优点: ①良好的隐蔽性,高内聚、低耦合 ②将整个系统的输入 / 输出行为可以看成是多个过滤器 ③支持软件复用 ④系统维护和增强系统性能简单 ⑤允许对死锁等进行分析 ⑥支持并行执行 缺点: ①导致进程成为批处理的结构 ②不适合处理交互的应用 ③导致性能下降,增加复杂性

(2)调用 / 返回风格:易于修改和扩展 ①主程序 / 子程序体系结构:自顶向下、逐步分解、树状结构、单线程控制、子程序正确性难于判断、子系统结构不清晰 ②面向对象风格 ③层次结构风格

(3)仓库风格: 数据库系统、超文本系统、黑板系统都属于仓库风格

3.一个模式有4个基本要素:模式名称、问题、解决方案、效果

4.抽象工厂:提供一个接口用以创建一个相联系或相依赖的对象族,而无须指定他们的具体类

5.单件:一个类只有一个实例并提供一个访问它的全局访问点

6.外观:给子系统中的一组接口提供一套统一的高层界面,是的子系统更容易使用

7.适配器:将一个类的接口转换为客户期望的另一种接口,是的原本因接口不匹配而无法合作的类可以一起工作

8.责任链:通过一条隐式的对象消息链传递处理请求。该请求沿着这条链传递,直到有一个对象处理它为止。其核心是避免将请求的发送者直接耦合到它的接受者。

9.中介者:用一个中介对象来封装一系列复杂对象的交互情景。通过阻止各个对象显示地相互吸引来降低它们之间的耦合,使得人们可以独立地改变它们之间的交互

10.观察者:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知,并被自动更新。

第八章

1.面向对象设计的准则: (1)模块化 (2)抽象 (3)信息隐藏 (4)弱耦合 (5)强内聚 (6)可重用

第十章

1.软件测试的目的: (1)目的在于发现错误 (2)好的测试能发现(至今从未发现的)错误 (3)成功的测试发现了(至今从未发现的)错误

2.软件测试的原则: (1)尽早地和不断地进行软件测试 (2)测试用例应由测试输入数据和与之对应的预期输出结果组成 (3)程序员应尽量避免检查自己的程序 (4)在设计用例时,应包含合理的输入条件和不合理的输入条件 (5)充分注意测试中的群集现象 (6)严格执行测试计划,排除测试的随意性 (7)应当对每一个测试结果作全面调查 (8)妥善保存测试计划、测试用例、出错统计、最终分析结果报告,为未来实施的维护提供方案

3.白盒测试: 逻辑覆盖可分为: 下列样例的图见课本239 (1)语句覆盖:每个可执行语句至少被执行一次 ace【L1】 (2)判定覆盖:取真分支和取假分支至少经历一次 ace【L1】 abd【L2】 (3)条件覆盖:每个判断的每个条件的可能取值至少执行一次 ①:

通过路径条件取值ace(L1)T1 T2 T3 T4abd(L2)T1(非) T2 T3(非) T4(非)abe(L3)T1 T2(非) T3 T4(非)

②:

通过路径条件取值abe(L3)T1(非) T2 T3(非) T4abe(L3)T1 T2(非) T3 T4(非)

(4)判定-条件覆盖:每个判断的每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次 (5)条件组合覆盖:每个判断的所有可能值至少取一次 (6)路径覆盖:覆盖程序中的所有可能的路径

4.黑盒测试: (1)等价类划分:有效等价类、无效等价类 (2)边界值分析: ①规定了值的范围:应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据 例如:范围为“-1.0~1.0”,则可选取“-1.0”,“1.0”,“-1.001”,“1.001”作为测试数据

②规定了值的个数:选用最大个数、最小个数、比最大个数多1、比最小个数少1作为测试数据 例如,范围为1~255,则应取1,255,0,256作为测试数据

③其他情况与一二类似,具体可以查看课本250

5.软件测试的策略: (1)单元测试:进行正确性检验的测试工作。主要采用白盒测试,辅之以黑盒测试。包括两个辅助模块:驱动模块、桩模块 (2)组装测试:也叫集成测试或联合测试,在单元测试的基础上,将所有模块按照设计要求组装成为系统 包括:非增殖式组织方式、增殖式组织方式(自顶向下、自底向上、混合增殖测试)、组装测试的组织和实施 (3)确认测试:又称为有效性测试,验证软件的有效性,即验证软件的功能和性能及其他特性是否与用户的要求一致 ①进行有效性测试(黑盒测试) ②软件配置复查 ③α测试和β测试:只有在α测试达到一定的可靠程度时,才开始β测试 ④验收测试 ⑤确认测试的结果 (4)系统测试:对计算机系统进行一系列的组装测试和确认测试 (5)测试的类型: ①功能测试 ②回归测试 ③可靠性测试 ④强度测试 ⑤性能测试 ⑥恢复测试 ⑦启动 / 关机测试 ⑧配置测试 ⑨安全性测试 ⑩可使用性测试 ⑪可支持性测试 ⑫安装测试 ⑬互连测试 ⑭兼容性测试 ⑮容量测试 ⑯文档测试

第十一章

1.软件维护的类型: (1)改正性维护 (2)适应性维护 (3)完善性维护 (4)预防性维护

2.程序修改的三个步骤:分析和理解程序、实施修改、重新验证程序

3.修改程序: (1)制定程序的修改计划 (2)修改代码,以适应变化

4.修改程序的副作用: (1)修改代码的副作用:修改源代码时,可能引入新的错误 (2)修改数据的副作用:修改数据结构时,可能导致软件设计与数据结构不匹配,因而导致软件出错 (3)文档的副作用:必须对相关技术文档进行修改,否则就会出现错误

5.软件维护: (1)定义:是评价软件产品质量的一项重要指标 (2)子特性: ①易分析性 ②易变更性 ③稳定性 ④测试行 ⑤维护性符合性

6.提高软件维护的方法: (1)使用提高软件维护性的开发技术和工具: ①模块化 ②结构化程序设计 ③使用结构化程序设计技术,提高现有系统的维护性 (2)实施开发阶段产品的维护性审查: ①检查点审查 ②验收检查 ③周期性的维护审查 ④对软件包进行检查 (3)改进文档: 历史文档有三种:①系统开发日志②错误记载③系统维护日志

最新回复(0)