软工期末复习
数据流图
0层图
1层图
1层图就是对0层图的加工细分
2层图
2层图就是对1层图的某个加工进行细分
例子1
例子2
E-R图
数据字典
例子3
例子4
软件结构图
1
例子1
例子2
按照下列环境描述,完成系统结构化分析和设计部分工作。要求:根据要求画出该系统的数据流图,并将其转换为软件结构图。
高考录取统分子系统有如下功能:
(1)计算标准分:根据考生原始分计算,得到标准分,存入考生分数文件。
(2)计算录取线分:根据标准分、招生计划文件中的招生人数,计算录取线,存入录取线文件。
判定表和判定树
判定表
例子1
例子2
构造表的时候对于有多少列,那么就只看条件。看每种条件有多少种情况,然后做乘法
本题就是2的三次方为8
有相同列的可以合并
判定树
根据最终的判定表去画判定树
程序流程图
盒图
while是成立了才会执行循环
until是不成立才会执行循环
例子
直接先画一个大正方形
判断一个三角形是否为等边三角形
例子2
例子3课堂练习
PAD图
while中是c为否跳出来循环进行下一步
until中是c为是跳出来循环进行下一步
在题中就看跳出来的时候对应是还是否
例子
例子2
黑白盒测试(找测试用例)
等价类划分法(黑盒测试)
测试用例设计时有效等价类要尽可能多的覆盖,对于每一个无效等价类都要有其测试用例
例子
无效的等价类必须有一个对应的
例子2
例子3
例子4
白盒测试(打开盒子看里面)
白盒测试不用看细节,只是为了找不同的测试用例,只看其中的判定和条件即可
白盒测试有六种,以下按照覆盖程度递增次序
语句覆盖:每个语句都要执行一次,说明测试的条件要使得能够到达每个句子
判定覆盖(分支覆盖):判定就是条件的逻辑组合。每个判定真假至少一次,即判定的所有情况都要测试到
条件覆盖:每个条件都要判一次真假
判定条件覆盖:每个判定要取一次真假,每个条件要取一次真假(在条件覆盖中选择满足判定覆盖的用例),然后判定与判定之间再组合
路径覆盖
组合覆盖:组合条件覆盖,以每个判定或者说每个分支为单位,给出里面所有的条件组合(n个条件对应2的n次方个结果)
https://www.bilibili.com/video/BV1zL4y1A785?t=16.4
路径覆盖:把出现的所有路都走一遍
怎么看所有路,用树图画出来
UML
UML (Unified Modeling Language)为面向对象软件设计提供统一的、标准的、可视化的建模语言。
结构图(静态图)
类图
- 类的定义
-
代码与类图的转化
-
类之间的关系
关联:谁使用谁,谁拥有谁。比如学生使用电脑,比如水獭吃海胆,就是关联关系。就是两个对象之间没有依赖关系,有其他某种关系
聚合:整体与部分,谁包括谁。比如项目组中包括组员
组合关系:整体与部分,整体生命结束时候,部分生命也结束。比如一个游客中心包含大堂和卫生间,如果游客中心被拆除,那么大堂和卫生间的生命也结束。这是生命相关的聚合
泛化/继承:比如乌龟,猴子,大象都是动物类的子类。箭头子类指向父类
例子1
例子2
例子3
例子4
行为图(动态图)
用例图(参与者与功能)
三部分:(系统)参与者,用例(功能),关系
Use Case:用例一般是用“动宾”短语命名
角色:主动角色在系统左边,被动角色在系统右边
关联:参与者能使用的功能就是关联
泛化:继承,是参与者与参与者,或者用例与用例之间的关系。泛化的属于同种类型但存在差异,重在实体上。用带空心三角箭头实线从子用例指向父用例
包含《includes》:每次执行基本用例时,就会执行包含用例。用带箭头的虚线《includes》从基本用例指向包含用例。是用例之间的关系,一个用例可包含几个步骤,重在过程上
拓展《extends》:拓展用例是基本用例在某些条件下会触发跳转到扩展用例,扩展用例相当于基本用例在某些条件才执行的备选用例。用带箭头的虚线《extends》从拓展用例指向基本用例
例子1
例子2
例子3
顺序图(时序图)
交互图,显示系统内外的交互过程
任何复杂的交互,都可以分解为自己与自己、自己与别人、别人与别人的多个简单交互
基本元素
构建图:
- 小人:参与者用小人表示
- 矩形:对象用矩形表示
- 垂直虚线:生命线为垂直的虚线
- 横向线:对象之间的消息位于两条虚线之间
对象之间的消息:
- 实线:请求消息用实线表示
- 虚线:虚线表示回复的消息或者说是从接收对象返回到请求对象的消息
(所以对于一条消息要明确它是一个主动的请求消息还是对某个请求消息的回复消息)
- 竖向矩形:激活框,激活框显示对象执行期间的时间。
在对象生命线上,活跃的部分加上激活框。
参与者是外部对象,不需要激活框。
-
选择框:表示在两个消息或多个消息之间进行选择,这些选择一般是相互排斥的
(用选择框的一般是对应了两种情况,用两个框分别给出对应情况的消息是什么样的)
比如这里就对应了验证银行卡后的两种情况,一种是银行卡有效,一种是银行卡无效
例子
例子2
例子3
几个图的关系
状态图
描述一个对象在其生命周期中的各种状态
基本元素
- 实心圆:状态图的开始
- 圆角矩形:状态。由状态名和活动两个部分组成
关闭状态:源状态,没有活动,只写状态名即可
启动状态:目标状态
- 空心圆内+实心圆:状态图结束
- 事件:触发动作,用矢量直线表示
例子1
例子2
活动图
展现了从一个活动到另一个活动的控制流程,显示系统的活动顺序
基本元素
- 实心圆:开始结点,一个活动图中只能有一个开始结点
- 圆角矩形:动作结点
- 空心菱形:决策结点(分支的开始)/合并结点(分支的合并),注意合并时候也要有
- 黑色粗线分开:Fork结点,表示多个过程并行执行,即异步操作(两者独立不相关)
- 黑色粗线合并:join结点,异步活动结束后,再合并为同一个流程运行
- 空心圆+实心圆:活动图结束,一个活动图中可以有多个结束结点
例子1
例子2
泳道图:
将活动图按照角色进行分组,把流程中的活动划分到对应的角色之下
UML练习题
https://blog.youkuaiyun.com/tir_zhang/category_11750080.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=11750080&sharerefer=PC&sharesource=weixin_57014764&sharefrom=from_link
软件生命周期模型
瀑布模型
特点:
1),阶段间具有顺序性和依赖性
2),推迟实现的观点
3),质量保证的观点
优点:
1),可强迫开发人员采用规范的方法(例如:结构化技术);
2),严格地规定了每个阶段必须提交的文档;
3),要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
缺点:
1),“瀑布模型是由文档驱动的”在可运行的软件产品交付给用户之前,用户只能通过文档来了解产品是什么样子的。但是通过写在纸上静态的规格说明,很难全面正确的认识动态的软件产品。
适用范围:
需求明确,小规模软件开发。
快速原型模型
特点:
快速建立起能够在计算机上运行的程序(最终产品功能的一个子集)。
优点:
软件产品的开发基本上是线性的
缺点:
必须迅速地构建原型然后根据用户意见循序的修改原型
适用范围:
用户需求不明确,需要通过构建原型来清楚的了解用户的真实需求。
增量模型
特点:
把软件产品作为一系列的增量构件来设计,编码,集成和测试。每个构件有多个相互作用的模块构成,并且能够完成特定的功能。使用增量模型时,第一个增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能。
优点:
1),能够在较短的时间内向用户提交可完成部分工作的产品;
2),逐步增加产品功能可以使用户有较充裕的时间学习适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。
缺点:
1),较难把每个新的增量构件集成到现有的软件体系结构中,而又不破坏原来已经开发出的产品。
2),增量模型本身是自相矛盾的,它一方面要求开发人员把软件当做一个整体,另一个方面又要求开发人员把软件构件序列,每个构件本质上都独立于另一个构件,除非开发人员有足够的技术能力协调好这一明显的矛盾,否则增量模型开发出来的产品可能并不能令人满意。
适用范围:
软件开发周期较长的软件,有持续的合作。
4螺旋模型
特点:
螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险,即是在每个阶段之前都增加了风险分析过程。
优点:
1),对可选方案和约束条件的强调有利于已有软件的重用,也有利于把软件质量作为软件开发的一个重要目标;
2),减少了过多测试(浪费资金)或者不足(产品故障多)所带来的风险;
3),在螺旋中维护的只是模型的另一个周期,在维护和开发之间没有本质的区别;
缺点:
除非软件开发人员具有丰富的风险评估经验和这方面的专门知识,否则将出现真正的风险,当项目实际上正在走向灾难时,开发人员可能还认为一切正常。
使用范围:
内部软件开发的大规模软件项目。
5喷泉模型
特点:
面向对象的软件开发
优点:
1),对生命周期各阶段的区分变得不重要,不明显了;
2),分析阶段得到的对象模型也适用设计阶段和实现阶段;
3),提高软件项目开发效率,节省开发时间
缺点:
1),开发过程过分无序;
2),面向对象范型本身要求经常对开发活动进行迭代或求精;
3),在开发过程中需要大量的开发人员,因此不利于项目的管理。
适用范围:
面向对象的软件开发过程