软件工程期末攻略

一、软件工程概述

软件的概念与特点

软件工程方法学分为:传统方法学(生存周期方法学)和面向对象方法学

  1. 软件 = 程序+数据+文档
    软件是__程序,以及开发、使用和维护程序所需的所有文档__。
    程序:计算机可以接受的一系列指令,运行时可以提供所要求的功能和性能。
    数据:使得程序能够适当地操作信息的数据结构。
    文档:描述程序的研制过程、方法和使用的图文资料。

  2. 软件特点:复杂性, 不可见性, 一致性 , 可变性

软件危机

软件危机是指计算机软件开发维护时所遇到一系列问题。

  1. 软件危机包含两方面内容:

    • 如何开发软件以满足对软件日益增长的需求;

    • 如何维护数量不断增长的已有软件。

  2. 软件危机的表现:

    • 对软件开发成本和进度失控
    • 功能和实际需求不匹配
    • 软件质量不可靠 (可靠性差)
    • 软件难以维护
    • 没有适当文档资料
    • 软件成本在计算机系统中所占比例逐年上升,居高不下
    • 软件开发生产率低
  3. 软件危机的原因:(取反可消除软件危机)==>简答题

    • 主观原因:
      忽视需求分析
      轻视软件维护
      没有认识到程序只是软件的一部分
      没有认识到软件开发只是漫长的软件生命周期中一个比较次要阶段
      越到后期引入变动付出代价越高昂
    • 客观原因:
      软件是逻辑实体、缺乏可见性,管理和控制困难
      软件不会磨损,维护意味着修改原来设计,维护困难
      软件规模庞大,程序复杂性随规模增加指数上升

软件工程

软件工程定义:软件工程是指导计算机软件开发和维护的工程学科。IEEE定义为:

  1. 将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,即工程化应用到软件上;
  2. 对 1 中所述方法的研究。
    软件工程三要素: 方法(回答怎么做)、工具、过程(何时做)。

软件生命周期

软件生命周期定义:

  • 即软件从定义、开发、维护直到报废、结束其使用的全过程。
  • 由软件定义、软件开发和运行维护三个时期组成

软件生命周期的基本任务

  1. 基本任务:三时期八阶段===>简答题

    • 三个时期:软件定义、软件开发、软件维护
    • 八个阶段:问题定义、可行性研究(可行性研究报告)、需求分析(软件需求规格说明书)、概要设计、详细设计、编码和单元测试、综合测试、运行维护
      image
  2. 软件维护

    • 软件维护的基本类型,软件维护哪个工作量最大/最小?

      改正性维护 17%——21%

      适应性维护 18%——25%

      完善性维护 50%——60%

      预防性维护 4%

      • 副作用的概念是一些不期望的行为引进所带来的错误
        分为代码副作用,数据副作用和文档副作用三种

软件生命周期模型

软件生命周期模型:软件过程模型,是软件开发模型的直观表达(大题)
image

要会区分判断

瀑布模型(整体开发模型)

快速原型开发模型(非整体开发模型)

增量模型(非整体开发模型)

螺旋模型

二、传统方法学

软件工程各个阶段的基本任务和结束标准

结构化软件开发方法由:结构化分析、结构化设计、结构化实现组成

结构化分析方法

  1. 数据模型:E—R图
  2. 功能模型:数据流图(DFD图)[要求会画]
  3. 行为模型:状态转换图(包含的元素,状态,事件)
  4. 数据字典:是描述数据的信息集合

可行性分析

  1. 软件问题定义:问题定义为软件需求分析功能与性能的依据

    问题定义的主要内容有:
    (1)问题的背景。弄清楚待开发系统现在处于什么状态,为什么要开发它,是否具备开发条件等问题。
    (2)提出开发系统的问题要求以及总体要求。
    (3)明确问题的性质、类型和范围。
    (3)明确待开发系统要实现的目标、功能和规模。
    (4)提出开发的条件要求和环境要求。
    以上主要内容应写在问题定义报告(或系统目标和范围说明书)中,作为这一阶段的“工作总结”。

  2. 可行性研究任务: 用最小的代价在尽可能短的时间里确定问题能否解决,是否值得做

    主要做4方面研究: 技术可行性、经济可行性、社会因素可行性、操作可行性(项目运行方式在用户组织是否行得通)

  3. 系统流程图:

    image

  4. 数据流图DFD(大题)

    image

    1. 结构化——数据流图 - 知乎 (zhihu.com)

    2.软件工程——软件结构图设计(变换分析设计、事务分析设计、混合流设计)_软件工程变换分析法

    一般中型以上的系统的数据流图中,都会既有变换流,又有事务流。这就是所谓的混合的数据流图,其软件结构设计方法一般采用以变换流为主,事务流为辅的方法。

    image

    • 假设一家工厂的采购部每天需要一张订货报表,报表按零件编号排序,表中列出所有需要再次订货的零件。对于每个需要再次订货的零件应该列出下述数据:零件编号,零件名称,订货数量,目前价格,主要供应者,次要供应者。零件入库或出库称为事务,通过放在仓库中的CRT终端把事务报告给订货系统。当某种零件的库存数量少于库存量临界值时就应该再次订货。画出上述订货系统的数据流图

      A:首先从题目中提取四种成分

      1:考虑数据的源点和终点

      数据源点:仓库管理员
      数据终点:采购员
      2:考虑有哪些处理

      “采购部需要报表”,所以需要一个产生报表的处理
      仓库中的零件数量会发生改变,所以对事物进行的加工是另一个处理
      3:考虑数据流

      系统会把订货报表送给采购部,所以订货报表是一个数据流
      事物需要从仓库送到系统中,所以事物是一个数据流
      4:考虑数据存储

      每当有一个事物发生时就应该立即处理,但是由于每天只产生一次订货报表。因此用于产生订货报表的数据必须存放一段时间,所以有一个数据存储

      B:画数据流图

      1:基本系统模型

      任何系统的基本模型都由若干数据源点/终点以及一个处理组成,该处理代表系统对数据加工变换的基本功能
      如下

    image

    2:细化模型,描绘系统主要功能

    产生报表和处理事物是系统必须完成的两个主要功能
    细化后增加了数据存储:处理事物需要库存清单数据;产生报表和处理事物需要订货信息

    image

    3:进一步细化功能级数据流图中描绘的系统主要功能
    当一个事物发生使必须先接受它,随后按照事物的内容修改库存清单,最后如果更新后的库存量少于临界值,需要再次订货
    image

    4:考虑是否继续分解和细化
    一旦在想要分解时产生了诸如 “如何具体地实现一个功能” 这样的疑问时就表明不需要分解了
    5:检查
    分层必须保证信息的连续性
    注意编号的处理

  5. 数据字典:是描述数据的信息集合,即对数据流图中包含的所有元素定义的集合。

    1. 数据字典的内容:数据流、数据项(数据元素)、数据存储、基本加工、数据源点和数据终点
    2. 定义数据的方法:由数据元素组成数据的方式:顺序、选择、重复、可选
    3. 符号表示:
    等价 连接(和) 选一(或) 重复 可选 连接符
    = + [] {} () ```
    用|分割元素 左下限右上限 用 , 分割元素 1...9
    1到9任意值

    例题:
    北京某高校可用的电话号码有以下几类:校内电话号码由4位数字组成,第一位数字不是0。校外电话又分为本市电话和外地电话两类。拨校外电话需要先拨0,若是本市电话则接着拨8位数字(第一位不是0),若是外地电话则拨3位区码后再拨8位电话号码(第一位不是0)。

    电话号码=[校内电话|校外电话]
    校内电话=非零数字+三位数字
    非零数字=[1|2|3|4|5|6|7|8|9]
    三位数字=3{数字}3
    数字=[0...9]
    校外电话=[本市电话外地电话]
    本市电话=0+八位非零开头数字
    八位非零开头数字=非零数字+七位数字
    七位数字=7{数字}7
    外地电话=0+三位区码+八位非零开头数字
    三位区码=三位数字

    数据流图: [P62,P65(6)]

需求分析

  1. 需求分析的任务: 确定为了解决这个问题,目标系统必须做什么 ,主要是确定目标系统必须具备哪些功能

  2. 结构化需求分析基本思想为:自顶向下逐步分解

  3. 需求分析结束的标志: 需求分析阶段必须提供完整准确的系统逻辑模型,经过用户确认之后才能进入下一个阶段,这就可以有效地防止和克服急于着手进行具体设计的倾向。

  4. 数据库设计包含3步:数据库概念设计 E-R图、数据库逻辑设计 数据表及数据表之间的关系、数据库物理设计

  5. 实体联系图(E-R 图)[P72]

    E-R图三要素: 实体、属性、关系(联系)

    实体:矩形表示,矩形框内写明实体名。

    属性:椭圆形表示,椭圆内写明属性名称,并用连线与实体连接起来。如果属性较多,为使图形更加简明,有时也将实体与其相应的属性另外单独用列表表示。

    联系:菱形表示,菱形框内写明联系名,并用连线分别与有关实体连接起来,同时在连线旁标上联系的类型。

    E-R图设计步骤

    1. 确定所有的实体集合
    2. 选择实体集应包含的属性
    3. 确定实体集之间的联系
    4. 确定实体集的关键字,用下划线在属性上表明上表明关键字的属性组合
    5. 确定联系的类型,在用线将表示联系的菱形框联系到实体集时,在线旁注明1或N来表示联系的类型

    例题
    1.数据库要求提供下述服务:

    1)可随时查询书库中现有书籍的品种、数量与存放位置。所有各类书籍均可由书号惟一标识。
    2)可随时查询书籍借还情况,包括借书人单位、姓名、借书证号、借书日期和还书日期。约定:任何人可借多种书,任何一种书可为多个人所借,借书证号具有惟一性。
    3)当需要时,可通过数据库中保存的出版社的电报编号、电话、邮编及地址等信息向相应出版社增购有关书籍。约定,一个出版社可出版多种书籍,同一本书仅为一个出版社出版,出版社名具有惟一性。

    (1)满足上述需求的E-R图如图:

    image

    (2)转换为等价的关系模式结构如下:

    借书人(借书证号,姓名,单位)
    图书(书号,书名,数量,位置,出版社名)
    出版社(出版社名,电报编号,电话,邮编,地址)
    借阅(借书证号,书号,借书日期,还书日期)

  6. 状态转换图
    image

    例图:
    image

    状态是任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模式。状态规定了系统对事件的响应方式。系统对事件的响应,既可以是做一个或一系列动作,也可以是仅仅改变系统本身的状态,还可以是即改变状态又做动作。在状态图中定义的状态主要有:初态(初始状态)、终态(最终状态)、中间状态。

    在一张状态图中只能有一个初态,而终态则可以有0至多个。

    事件是在某个特定时刻发生的事情,它是对引起系统做动作或(和)从一个状态转换到另一个状态的外界事件的抽象。事件是引起系统做动作或(和)转换状态的控制信息

  7. IPO图

结构化设计

  1. 机构化设计分为总体设计和详细设计

  2. 结构化设计方法的步骤
    ① 首先研究、分析数据流图
    ② 然后根据数据流图决定问题的类型
    ③ 由数据流图推导出系统的初始结构图
    ④ 利用启发性原则来改进系统的初始结构图,直到符合要求的结构图为止
    ⑤ 修改和补充数据字典
    ⑥ 制定测试计划

总体设计

  1. 总体设计主要解决怎么做?系统如何实现的问题,是把分析阶段得到的数据模型映射成数据库设计,把数据流图映射成软件功能结构,行为模型可以用于详细设计阶段的流程、算法设计。软件功能结构反映了软件的功能组成以 及各功能模块间的逻辑关系(含接口关系)

  2. 总体设计原理:模块化、抽象、逐步求精(自顶向下,逐步细化)、信息隐藏和局部化、模块独立

  3. 模块:又称构件,是指能够单独命名并独立完成一定功能的程序语句的集合。

    抽象:即 抽出事物的本质特性而暂时不考虑它们的细节

  4. 模块独立程度的两个重要标准度量内聚 耦合
    内聚与耦合时密切相关的,模块内的高内聚往往意味着模块间的松耦合。实践表明内聚更重要。指导思想:高内聚低耦合

  5. 模块的独立性:模块独立性的概念是模块化、抽象和信息隐蔽的直接结果。

  6. 模块独立程度可以由两个定性标准度量:耦合和内聚。耦合衡量不同模块彼此间的相互依赖程度:内聚衡量一个模块内部各元素间彼此结合的紧密程度。显然,模块的耦合性越低,其独立性越强,内聚性越高,其独立性越强。

image-20220614204013813

image

  1. 软件结构的图形工具

    软件工程:4.概要设计 - 简书 (jianshu.com)

    层次图和HIPO图(带编号层次图)[连线表调用关系]
    image

    结构图(SC):[连线表调用关系]描述了一个模块调用哪些模块,没有描述模块调用的次序,也不表明模块内部的实现细节, 良好的软件结构,通常顶层的扇出数较大,中间层的扇出数较小,底层的扇入数较大

    b. 结构图的形态特征: 深度,宽度,扇入,扇出

    深度:表示软件结构中控制的层数。
    宽度:软件结构内同一个层次上的模块总数的最大值。
    扇出:一个模块直接控制(调用)的模块数目,扇出过大意味着模块过分复杂。
    一般一个设计的好的典型系统的平均扇出是3或4,扇出的上限是5到9。
    扇入:指有多少上级模块调用它,扇入大说明上级模块共享该模块的数目多。
    好的软件结构顶层扇出比较高,中层扇出比较少,底层扇入到公共的实用模块
    中,即底层模块有高扇入。

    c. 结构化设计两种信息流:变换型、事务型
    d. 结构图的符号

    (1)方框代表模块,框内注明模块的名字和主要功能。
    (2)方框之间的大箭头或直线表示模块的调用关系。
    (3)带注释的小箭头表示模块调用时传递的信息及其传递方向。尾部加空心圆的小箭头表示传递数据信息。尾部加实心圆的小箭头表示传递控制信息

image

  1. 面向数据流的设计方法(SD):变换流、事物流,(思想:数据流图转换为结构图)

  2. 结构化——概要设计 - 知乎 (zhihu.com)

详细设计(过程设计)

  1. 详细设计目的和任务

    • 详细设计目的:确定怎样具体地实现所要求的系统。得出对目标的精确描述。

    • 详细设计任务:

      • 过程设计:即设计软件体系结构中所包含的每个模块的实现算法。

      • 数据设计:设计软件数据结构。

      • 接口设计:设计软件内部各模块之间的接口

      • 编写详细设计说明书

  2. 结构程序设计方法定义:只用三种基本的控制结构就能实现任何单入口单出口的程序。三种基本控制结构:选择结构、顺序结构、循环结构

  3. 过程设计算法描述工具:图形工具(流程图,NS图,PAD图)、列表工具(判定表,判定树)、语言工具(PDL(伪码))

  4. 程序流程图:

    image

    方块为处理,平行四边形为输入输出

image

例题

现有一个短信监听系统,工作流程如下:
打开监听程序监听短信接收。 如果收到短信,
就读取短信内容并显示在文本框内;如果没有
收到短信,就继续监听。显示完短信后,如果
想结束监听,就关闭监听程序退出系统。根据
上述的工作流程画出短信监听系统的程序流程
图。
image
  1. 盒图(N-S图)

image 只能从上边进入盒子然后从下面走出盒子,除此之外没有
其它的入口和出口,所以盒图限制了任意的控制转移,保
证程序有良好的结构
  1. PAD图

image

例题

求n的阶乘,画出流程图,盒图(NS图),PAD图

流程图(对控制流程的描绘很直观) 盒图(不允许随意转移控制)
image image
PAD图(最大的特点是层次结构清晰,翻译成代码较容易。)
image
  1. 判定树、判定表、PDL

    判定表:当算法中包含多重嵌套的条件选择时判定表却能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。组成:

    • 左上部列出所有条件,左下部是所有可能的动作。
    • 右上部是表示各种条件组合,右下部是和每种条件组合相对应的动作。

    判定树:判定表变种,能够清晰地表示复杂的条件组合与应做的动作之间的对应关系,比判定表直观

    PDL:过程设计语言,也叫伪码

    例题

    1、某航空公司规定,乘客可以免费托运重量不超过30公斤的行李。当行李重量超过30公斤时,对头等舱的国内乘客超重部分每公斤收费4元,对其他舱的国内乘客超重部分每公斤收费6元,对外国乘客超重部分每公斤收费比国内乘客多一倍。根据描述绘出判定表。

    决策规则号 1 2 3 4 5 6 7 8
    条件 行李重量W≤30 Y Y Y Y N N N N
    国内乘客 Y Y N N Y Y N N
    头等舱 Y N Y N Y N Y N
    应采取的行动 免费 × × × ×
    (W-30)×4 ×
    (W-30)×6 ×
    (W-30)×8 ×
    (W-30)×12 ×

    2、某企业库存量监控的处理规则如下表:

    库存量≤0——————————————缺货处理

    库存下限<库存量≤储备定额——————订货处理

    储备定额<库存量≤库存上限——————正常处理

    库存量>库存上限 ——————————上限报警

    0<库存量≤库存下限 —————————下限报警

    要求:画出判定表及判定树。

    (1)判定表。

    决策规则号 1 2 3 4 5
    条件 库存量≤0 Y N N N N
    库存量≤储备定额 N Y Y N N
    库存量≤库存上限 N Y Y Y N
    库存量≤库存下限 N Y N N N
    应采取的行动 缺货处理 ×
    下限报警 ×
    订货处理 ×
    正常处理 ×

    (2)判定树。

    image-20220613085047014

  2. 面向数据结构设计方法:Jackson图[P115]

  3. 程序复杂度定量度量:定量的度量详细设计模块的质量。
    McCabe方法:程序的环形复杂度取决于它的程序图(流图)包含的判定结构数量

    计算方法:(P121)

    1. 流图中的区域数等于环形复杂度
    2. 流图G的环形复杂度V(G)=E-N+2,E是流图中边的条数,N是结点数。
    3. 流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。
      V(G)<=10比较科学

    在这里插入图片描述

    环形复杂度为3+1=11-9+2=4

结构化实现

结构化实现包括编码和测试

  1. 编码:将设计阶段得到的解决方案转换为可用性软件产品的过程

  2. 测试

    1. 软件测试的目标:软件测试是为了发现错误而执行程序的过程

      • 编码阶段(单元测试)
      • 测试阶段(各种综合测试)
    2. 软件测试的准测:
      (1)所有测试都应该能追溯到用户需求。
      (2)应该远在测试之前就制定测试计划。
      (3)Pareto原理:80%的错误是由20%的模块造成的。(集群现象)
      (4)应该从“小规模测试开始,并逐步进行大规模测试。
      (5)穷举测试是不可能的;测试只能证明程序有错误,但不能证明程序无错误。
      (6)为了尽最大可能的发现错误,应该由独立的第三方担任测试工作。

测试方法

软件工程黑盒白盒测试

image-20220615102805505

测试方法分为:黑盒测试,白盒测试,灰盒测试(黑加白)

黑盒测试
  1. 黑盒测试定义:又称为功能测试或数据驱动测试,指通过软件的外部展现来发现缺陷和错误。把被测试对象看成一个黑盒子,测试人员完全不考虑程序的内部结构和处理过程,只在软件的接口处进行测试,依据需求规格说明书,检查程序是否满足功能要求

  2. 黑盒测试方法(6种):等价类划分法,边界值分析法,错误推测法,因果图,决策表,场景法

    • 等价类划分法

      有效等价类: 是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合

      无效等价类: 与有效等价类的定义相反。

      【例】每个月所下发的工资只可为数字

      有效等价类:输入的工资内容为数字
      无效等价类1:输入的工资内容为字母
      无效等价类2:输入的工资内容为汉字
      无效等价类3:输入的工资内容为特殊字符

      设计测试用例时,要同时考虑这两种等价类,经受意外数据确保可靠性

    • 边界值分析法 26 :00

      边界值分析法其主要的测试点 是对“输入”或“输出”的“边界”值进行测试,通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界

白盒测试
  1. 白盒测试定义:称为结构测试、逻辑驱动测试或基于代码的测试,指通过对程序内部结构的分析,检测来寻找问题。把测试对象看作一个打开的盒子,测试人员必须了解程序的内部结构和处理过程,以检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致

  2. 白盒测试方法(2种):逻辑覆盖法(根据流程图设计测试用例),基本路径测试(根据程序控制流图设计测试用例)18 :15

    • 逻辑覆盖法的逻辑覆盖标准:覆盖强度由低到高:语句覆盖、判定覆盖、条件覆盖、判定条件(分枝条件)覆盖、条件组合覆盖、路径覆盖

    • 基本路径测试步骤

      void  Sort ( int  iRecordNum, int iType )
      1 {  
      2    int  x=0;
      3    int  y=0;
      4    while ( iRecordNum-- > 0 )
      5    {
      6	   If ( iType==0 )
      7		x=y+2;
      8     else
      9	      If ( iType==1 )
      10            x=y+10;
      11       else
      12            x=y+20;
      13    }
      14 }
      

      (1) 画出程序的控制流图。

      在这里插入图片描述

      (2) 计算程序的环形复杂度,导出程序基本路径集中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。
      有图可知:
      因为:E=10, N=8,P=3
      所以:V(G)=E-N+2=4
      V(G)=P+1=4
      (3) 导出基本路径集,确定程序的独立路径。

      1、路径1 : 4—>14
      2、路径2 : 4 —>6—>7—>13—>4—>14
      3、路径3 : 4—>6—>8—>10—>13—>4—>14
      4、路径4 : 4—>6—>8—>11—>13—>4—>14

      (4) 根据(3)中的独立路径,设计测试用例的输入数据和预期输出。

      在这里插入图片描述

黑白盒对比

image

测试策略
  1. 测试策略:单元测试,集成测试,系统测试,验收测试
  2. 系统测试三部分:功能,性能,压力

P166,P170,基本路径步骤例6.10,找到路径,覆盖测试路径

三、面向对象方法学

面向对象的特点

  1. 面向对象软件开发方法的特点:封装,继承,多态(3空),抽象属于封装

  2. 面向对象的程序设计具有如下的优点

    • 与人类习惯的思维方式一致。
    • 稳定性好。
    • 开发时间短,效率高,可靠性高。
    • 较易开发大型软件产品。
    • 可维护性好。
  3. 面向对象软件分析方法由分析,设计,实现组成

  4. 面向对象程序设计基本要素有类和对象

  5. 用例图三类角色之间的关系:

    • 参与者的与用例之间的关系:关联
    • 用例之间的关系:包含,扩展
    • 参与者之间的关系:泛化
  6. 面向对象分析模型由三部分组成:功能模型、动态模型、对象模型

  7. 面向对象软件的方法中基本概念:

面向对象分析

对象模型

  1. 类图

    类的符号:类图由三个部分组成:第一个部分是类名,第二个部分是属性,第三个部分是操作

image

类名在它的命名空间中唯一。类名以大写字母开头,省略多个单词之间的空格。

属性和操作在类的范围内必须无二义。属性和操作是以小写字母开头后续单词的首字母大写,且同样省略空格。

抽象类抽象操作斜体表示。

  • 公有可见性(+):对能看到这个类的任何元素都可见。
  • 保护可见性(#):对这个类及其子类的其他元素可见。
  • 私有可见性(-):对这个类的其他元素可见。
  • 可见性(~):对同一个包中的其他元素可见
  1. 类间的关系符号:类的基本联系包括关联、泛化(就是继承)、依赖、细化(就是接口实现)UML类图
    参考关系符号

    关系符号

    • 多重性的语法如下:(可用于关联、聚集、组合)

      • 不标默认精确到1个。

      • * 数目不限(0个或多个)。

      • 0..*:0个或多个。

      • 1..*:1个多多个。

      • 0..1:0个或1个。

      • 3..7:指定范围(3~7个,包含3和7)

    • 关联体现了一种语义关系,可自关联,通常用名词词组来标注,关联包括聚集、组合,关联主要用于类间通过属性建立结构关系的地方。

      • 聚集表明一种整体-部分的层次结构,关联的特殊形式

        复合聚集:整体没了部分就不存在

        共享聚集:整体无,部分仍在

      • 组合是关联更强的聚合。部分与整体共存亡,是物理包容。菱形所在的一端是整体,另外一端是部分

      泛化描述的“是一种”的关系,不能有多重性指定

      依赖:仅当被建模的关系不是结构关系时,才考虑使用依赖,依赖有很多种类,比如:实现(realize)、使用(usage)、实例化(instantiate)、调用(call),派生(derive)、访问(access)、引入(import)等。

      image

      例题:商场购物卡

      • 若某商场中发行一种购物卡用户可以根据自己的需要提出申请去办理购物卡
      • 商场的卡管理员可以根据申请,创建新的购物卡
      • 用户可以向购物卡预存费用,商场卡管理员为该用户添加相应的预存费用
      • 用户可以用购物卡在商场进行消费,每进行一次消费,售货员就从购物卡中扣除相应的费用
      • 当购物消费每满一定数额时,商场自动在卡中添加奖励费

      解答:

      • 购物卡是一个类。

      • 直接对购物卡类进行操作的有商场卡管理员类售货员类,商场卡管理员和售货员都是用户,他们继承用户类的特性。

      • 商场卡管理员可以添加预存费用,形成一个加款记录类

      • 售货员可以从卡中扣除费用,形成一个消费记录类

      • 当消费每满一定数额时,商场会在卡中添加奖励费,形成一个奖励记录类

        preview

动态模型

  1. 顺序图表现了导致行为从一个类流动到另一个类的关键类和事件

    顺序图

    image

  2. 协作图:通常用于描述系统的逻辑架构——层、子系统、包

功能模型

  1. 用例图:描述系统功能。用例图的组成参与者、用例、关系系统边界四个要素。

    • 参与者:与系统交互的用户或其他软硬件系统,用小人形表示
    • 用例:系统中执行的一系列动作,用椭圆表示。
    • 关系:参与者与用例、参与者之间、用例之间的联系
    • 系统边界:定义由谁或什么使用系统,用矩形框表示
  2. 用例之间的关系

    关系 解释 图示
    include 包含关系 image
    extend 扩展关系 image
    association 关联关系 image
    generalization 泛化关系 image

例题分析

  • 参与者:购物卡管理员、售货员。
  • 用例:创建新卡、为卡添加预存费用、消费。
  • 创建新卡、为卡添加预存费用、消费都需要相关人员登录操作。

img

面向对象设计

体系结构图

类图

面向对象实现

四、统一建模语言UML

分析设计图库目录

顺序图用例图面向对象特点

静态建模机制

用例图
类图和对象图

动态建模机制

状态图
顺序图
协作图
活动图

简答题

  1. 软件危机的原因:(取反可消除软件危机)==>简答题

    1. 主观原因:
      忽视需求分析
      轻视软件维护
      没有认识到程序只是软件的一部分
      没有认识到软件开发只是漫长的软件生命周期中一个比较次要阶段
      越到后期引入变动付出代价越高昂
    2. 客观原因:
      软件是逻辑实体、缺乏可见性,管理和控制困难
      软件不会磨损,维护意味着修改原来设计,维护困难
      软件规模庞大,程序复杂性随规模增加指数上升
  2. 面向对象的程序设计具有如下的优点:

    1. 与人类习惯的思维方式一致。面向对象技术以对象为核心,尽可能接近人类习惯的抽象思维方法,并尽量一致的描述问题空间和描述解空间。
    2. 稳定性好。面向对象方法用对象模拟问题域中的实体,以对象间的联系刻画实体
    3. 开发时间短,效率高,可靠性高。面向对象技术可以重复使用一个对象类。
    4. 较易开发大型软件产品。面向对象技术开发大型软件时,把大型产品看作是-系列相互独立的小产品,降低了开发时技术和管理方面的难度。
    5. 可维护性好。由于面向对象的软件稳定性比较好,容易修改, 容易理解,易于测试调试
  3. 黑盒测试定义:又称为功能测试或数据驱动测试。把被测试对象看成一个黑盒子,测试人员完全不考虑程序的内部结构和处理过程,只在软件的接口处进行测试,依据需求规格说明书,检查程序是否满足功能要求。

    黑盒测试方法(6种):等价类划分法,边界值分析法,错误推测法,因果图,决策表,场景法

  4. 软件生命周期

    (1)由三个时期:软件定义、软件开发、软件维护组成
    进一步划分为八个阶段:问题定义、可行性研究(可行性研究报告)、需求分析(软件需求规格说明书)、概要设计、详细设计、编码和单元测试、综合测试、运行维护,是软件产生到消亡的过程

    image

    (2)软件生命周期分为几个阶段?完成的基本任务是什么?

软件生命周期分为三个时期:软件定义,软件开发,软件维护。
软件生命周期分为八个阶段:
软件定义时期:问题定义,可行性研究,需求分析。(系统分析)
软件开发时期:概要设计,详细设计,(系统设计)编码和单元测试,综合测试(系统实现)
软件维护时期:运行维护

八个阶段的主要任务:

问题定义:确定系统的目标、规模和基本任务
可行性研究:从经济、技术、法律等方面分析确定系统是否值得开发,及时建议停止不值得开发的项目,避免人力,物力和时间的浪费
需求分析:确定软件系统应具备的具体功能。
概要设计:确定系统设计方案、软件的体系结构,确定软件由哪些模块组成以及这些模块之间的相互关系
详细设计:详细设计描述应该如何具体的实现系统。
软件实现和单元测试:进行程序设计和单元测试
综合测试:通过综合测试过程,查找软件设计中的错误并改正,确保软件质量。
运行维护:在软件运行期间,通过各种必要的维护,使系统改正错误或修改扩充功能以适应环境变化,从而延长软件的使用寿命,提高软件的效益。

在软件生命周期各个阶段中,软件维护阶段所占时间最长

  1. 软件生存期模型也称为软件过程模型、是从软件项目需求定义直至软件运行维护为止,跨越整个生存周期的系统开发、运行和维护所实施的全部过程、活动和任务的结构框架。软件生存期模型包括澡布模型、快速原型模型、增量模型、螺旋模型、统一过程、敏捷过程等。
  2. 模块独立程度可以由两个定性标准度量:耦合和内聚。耦合衡量不同模块彼此间的相互依赖程度:内聚衡量一个模块内部各元素间彼此结合的紧密程度。显然,模块的耦合性越低,其独立性越强,内聚性越高,其独立性越强。
posted @ 2022-06-19 22:38  KMP  阅读(1345)  评论(0编辑  收藏  举报