UML图(设计模式照搬)
一个方框三个格子,第一格是名字,第二格是成员变量,第三格是成员函数+ public- private# protected- products:List<Product>
函数:+ walk(参数):void=默认返回值
单向关联:实线箭头,单方向持有对象(每个人都有一张船票)
双向关联:一根实线,互相持有对方对象(顾客买了什么产品(ArrayList),产品被哪个顾客买了)
自关联:一根实线箭头自己指向自己(point类内部有一个point对象)
强调”整体-部分”的关系(不一定非得持有多个部分的变量)
聚合关系:空心菱形+实线(菱形部位是多的),一个部门有很多员工(-List<Workers>),所以用聚合(部门与劳工的关系)
组合关系:实心菱形+实线,表示更强烈的聚合关系,一但整体对象不存在,那么部分对象也不会存在(身体与器官的关系)
依赖关系:虚线箭头,某个类的函数通过局部变量,或函数传递的参数是另一个类(人读书,书是一个对象,但是人只有”读”的函数和书有关,所以只构成依赖关系.)
继承关系:实线三角箭头(子类指向父类)耦合度最大的一种关系(你先是一个人才是一个学生,那么学生类继承”人类”)
实现关系:虚线三角箭头(实现的指向被实现的)某个类实现某个接口的时候可以用
耦合度:泛化(继承)/实现>组合>聚合>关联>依赖
方法(函数)应向父类集中,数据应向子类集中(保持抽象)
数据流图
1 | +----------+ |
输入->圈住,处理->输出
两个方框的实体之间不能有数据流.
变换数据流图
好多步骤,链很长(一直变换)
事务数据流图
树形结构,不同结局(决策点)
软件结构图
两次分解.
第一次分解是一拆三,第二次分解是具体功能细分,看类型.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19+------+
| 模块 |
+------+
----------
调用
○-------->
数据(传递)
●-------->
控制信息
模块
/|\
输入 处理 输出
/|\/|\/|\
各种子函数,比如"获取xxx",计算xx,保存xx
复杂度
程序复杂度: 判断数+1
环路复杂度: V-E+2(边数-顶点数+2)=原子判定数+1
流图
把程序流程图转成流图删掉所有判定,仅用圈节点箭头表示,注意 and 和 or要拆开成不同节点
测试用例设计
白盒:
判定覆盖:每个if的真假取到就行
条件覆盖:每个原子语句都真假取到:(a&&b)a和b都要取到真假
路径覆盖:所有路径取过一遍.
黑盒:
等价类分析:合法的,不合法的
MTTF
第一问是标记重捕.
MTTF = IT/[K(ET-Ec)]
其中IT=程序长度,K=常数,ET=总错误数,Ec=已改正错误数
首先根据给出的式子算常数k,然后根据第二个式子算剩下的错误
用例图
小人
矩形
直线代表这个人能用的功能
虚线箭头A—>B include:A是主模块,A被调用B必被调用
A<—B extend:A是主模块,A被调用B不一定被调用
时序图
虚线生命线,直线箭头是请求,虚线箭头是回显.
最后用实线方框圈住生命线的活跃时期.
判定表
xxx是各种人,aaabbbccc是状态,这个人有没有这个状态,有就是1,没有就是0.
√是这个状态有没有被调用.
xxx 1
xxx 0
xxx 1
aaa √
bbb
ccc
Jackson图
全部都是矩形方块.
元素标干什么(或编号).1
2
3 A
/|\
B C D //代表A的模块先做B再C再D1
2
3I*代表循环
S o代表分支(只能选一个)
数字代表执行几次.
UML状态图
实心圆代表起始节点,实心圆+外面套一个圈代表结束节点,中间所有元素原型或判定的菱形.
工程网络图
用一个圆表示节点.1
2
3
4
5
6
7
8
9
10
11# 假设下面是个圆.
+-+-+
|A|3|# 最早开始时间(最短路)
| +-+
| |5|# 最晚开始时间
+-+-+
# 下面是边.
114(20)
------------>
# 边权 能拖延的最长时间
程序流程图
最经典的哪个菱形判定…那个图
PAD图
没劲.
N-S盒图
没劲.(这三者都用于描述程序,只是画图方法不太一致,看一眼就懂了)