文章目录
- 前言
- 软工上课情况
- 考后感
- 题型分析
- 概念部分
- 大题部分
- 数据流图和数据字典
- 数据流图
- 数据字典
- 结构化设计工具
- 程序流程图
- 盒图(N-S图)
- PAD图
- 判定表和判定树
- PDL(伪码)
- 软件测试
- 白盒测试法
- 语句覆盖
- 判定覆盖,条件覆盖,判定/条件覆盖
- 组合覆盖
- 路径覆盖
- 黑盒测试法
- UML建模与设计
- 用例图
- 类图
- 顺序图
- 状态图
前言
这篇文章就是针对北理工计科
同学写的,帮你轻松通过软工课程。
本文既有上课的基本情况,也有针对考试的要点指导,这是精心筛选,针对老师最后一节课的重点以及题型写的笔记,保你一天速通软件工程
软工上课情况
我们老师使用雨课堂进行点名,没有定位,期末采取70%(16取10次)的签到,只要满足10次(大约),平时分就给到位。
然后是项目,建议早点去选,选网上有现成代码的单人项目,不然会很麻烦,像我们就是一个文献阅读助手,这玩意需要用知识图谱之类的,门槛挺高,不如电梯调度和计算器之类的东西,一大把代码。
考后感
考完了,我写了1小时,提前交卷出来,速速学习计组去。
大题是数据流图+黑盒测试+两道UML,所以说UML是重中之重,我自己这块没时间学了,就只能草草过了,所以那两个大题我假设拿一半的分吧。大题估计有个10(数据流图)+12(黑盒测试)+10(剩下的题)=32
值得一提的是填空,专有名词确实多,我背的还是不到位,还好填空意思差不多对了就行,姑且按照一半拿分吧,有条件多背点,这20分就都到手了。我自己按10算。
选择和判断比较轻松,40分我估计30是有的。
所以最后卷面分大概有72。要达到72卷面,需要的是把复习文档过一遍(3h)+大题学习(2h)+复习文档加固记忆(1h)。如果想高一些,就要加强记忆,加强UML的学习,即便如此,一天也足够了。
你说ppt用不用看呢?其实没啥必要,ppt没有详略结合,全是平铺直叙,需要详细的不够详细,不用详细的又很啰嗦,建议以复习文档为核心,不懂得去看看ppt,然后需要加强的去看b站视频。
不说了,复习(学习)计组去了,还有4章没看呢(乐)
题型分析
闭卷
- 单选题,15题,30分
- 判断题,10题,10分
- 填空题,20个空,20分
- 综合题,4题,40分
下面详细分解一下:
- 60分客观题
- 直接看老师给的复习pdf
- 填空题都可以在书上找到原话,考概念,目标,方法,原则,不需要你去算,放心就行。
- 概念得精准一些,发挥你们的记忆力,就那几个概念,理顺逻辑,背会很容易的
- 其他东西大概意思差不多就行,关键是理解,记住一些术语。
- 40分大题
- 这个得好好学一下
- 重点分布在详细设计步骤的建模+测试
- 题型一(数据流图):数据流图,一般三层,必考(顺便学学数据字典)
- 题型二(结构化设计工具):程序流程图,盒图(NS图),PAD图,会看PDL描述。
- 题型三(软件测试方法):白盒测试,黑盒测试。会分析,会写测试用例,会和程序流程图结合考,先画一个,然后分析
- 题型四(面向对象分析与设计):OOA建模,使用UML语言画作业里考出来的那几类经典UML图。面向对象设计,将OOA的分析建模转化为OOD设计建模。
概念部分
这一部分来自于老师给的复习文档,13页,我在里面标出了重点的东西,同时加入一些我个人的注解,还有一些加粗黑体,那个也是重点。
下面我截图把我标记出来的东西放出来,这个东西也不绝对,只是我自己觉得把这些标出来比较好记。
大题部分
数据流图和数据字典
参考视频
数据流图
数据流图,画出了数据流随着处理而变换的过程,没有物理部件,是纯粹的逻辑描述。
首先明确符号,网上讲的和我们ppt会略有差异,以ppt为准。关于数据库和处理的写法,我觉得写成那种带标号的比较好,数据处理的标号=数字,层数增加后=数字+.+数字,数据库的标号=F+数字(哈哈,这也算数据字典表示了)
DFD的整体结构大致如下,输入输出,往里有中间数据,然后中间数据会和数据储存进行一个交换。
视频里给的是一个两层DFD,流程如下:
- 先确定输入输出,然后中间直接画一个大圈儿,标出各自的名字
- 逐层细化,先划分子系统,然后子系统再继续划分
- 注意,一个模块对外的输入输出接口是不可以变的,要保证各层DFD的一致性
我们的ppt里给出了3层的DFD,当然他那个自己加了很多东西,其实题目给的信息没那么多。
首先,顶层确定了输入输出,数据流,还有这个系统的名字。
第一层精化,基本是按照题目来的,三个处理+三个储存。但是他取名字,比如什么三元组库,策略库,历史文件,语法语义信息,这些东西你没点背景知识真的不懂的,你自己做只能笼统一些,比如日志信息就行。
之后我们继续分解精化,基本还是按照题目给的,可以看到数据处理的序号变化了,层级更深。黑板模型的部分,这个例子又自由发挥了,加了很多题目没给的,但是大致也是按照题目框架来的。
数据字典
数据字典可以定义DFD中的所有元素
,包括但不限于数据流,分量,储存,处理(虽然我不知道具体是什么,但是你记住DD和DFD是一致的就行)。有一点儿正则式的感觉,总之就是对数字规则的描述。
这个和编译原理的文法很像。描述的时候可以自顶向下,逐层分解。
结构化设计工具
程序流程图
好用,但是混乱:
- 经典流程图有三种
单入口单出口
的基本结构。顺序和选择老生常谈,经典的循环结构是while结构,先判断,再循环。 - 扩展的流程图。扩展了选择:do-case,扩展了循环:do-until
- 修正的程序结构设计。增加了break
盒图(N-S图)
是更加紧凑,结构化的流程图,从上到下看就可以,不需要去绕来绕去
PAD图
不咋常考,主要应用是翻译成代码,给人看不是很方便。
判定表和判定树
用于描述复杂的选择结构,判定树和判定表是等价的,互相转化。
PDL(伪码)
这个也是老生常谈了
软件测试
白盒测试法
参考视频
测试程序结构,是否按照我们的逻辑执行。
测试方案有如下几种,覆盖程度从弱到强,每种可以使用一组测试用例,来实现我们的测试目标:
- 语句覆盖:能够让所有语句都执行一次
- 判定覆盖:让每个判定表达式都获得一次真 和 假。注意,是和,都要测试一次。
- 条件覆盖:条件覆盖要比判定覆盖更强。比如A>B&&A>C,判定覆盖只需要这个是真/假就行,两个结果,但是条件覆盖需要把ABC进行若干种组合
- 判定/条件覆盖:
- 条件组合覆盖:这个最强,ABC直接穷举, 2 3 2^3 23种测试方案
- 路径覆盖:覆盖所有可能出现的路径
给出我们要用的测试用例,接下来讲解。
语句覆盖
这个是最浅的覆盖。
为什么浅呢,我们不需要去吧判断情况都测试一次,我们只需要让action1和action2都执行一次就行,很简单。说白了,语句覆盖是在测试你这个语句本身有没有bug,而不是测试控制逻辑。
判定覆盖,条件覆盖,判定/条件覆盖
这三个很像,都是要去测试控制结构的,所以应当加以区分。
- 判定:A and B,C or D,这是两个判定,是整体
- 条件:A,B,C,D都是条件,是判定的基本元素
需要注意,a>b这种,是条件,而a>b and c>d,是判定,所谓判定,就是用逻辑符号(and,or) 连接起来的表达式,一定是要用逻辑符号连。
所以判定覆盖,只需要:
- 把整体的TF值进行一次排列组合, 2 2 2^2 22种
- 将判定对应的条件写出来
- 此时你会发现,一个条件组合,竟然能覆盖两个判定组合,所以最后只需要两个用例。结合后面的条件覆盖来说,如果只是TF的话,你会发现两条足够做到判定覆盖了。
而条件覆盖,如果没看过例子,或许会以为需要对ABCD进行组合,是 2 4 2^4 24种,其实不然,这就变成了穷举覆盖了,不可能的。我们只需要各取一次就行,并不需要把所有的组合取一次,你说你弄个TTTF和TTTT,ABC就重复取两次了,所以这反而是浪费的。
所以我感觉,条件覆盖反而更加少,两条就足够测试完毕了。前面的判定覆盖其实也是一样的,先根据判定写出来条件,然后取两列作为覆盖用例。
判定/条件覆盖,理论上需要覆盖我们前面的123456,似乎需要6个例子,但是你会发现,当test1满足5的同时,也覆盖了1和3,所以判定/条件覆盖又巧合般的只需要两个用例。我觉得,做这个的时候:
- 以条件覆盖为基准,看看这个组合能覆盖多少个判定
- 如果最后有遗漏,那就补上就可以
组合覆盖
组合:一个判定的各种条件穷举组合
哈哈,看到这里我又下意识地想要去穷举,其实不然,我们只需要穷举判定内部的条件,而不需要穷举判定之间
分别列出AB和CD的穷举,然后4行写下来就完事,很简单,再多来一些穷举仍然是如此的。甚至你不一定非要4行,交叉也行,但是需要用4个用例把下面这个表覆盖一次。
路径覆盖
倒着说。先说路径覆盖,其实就是找一下有多少个分支,然后分支排列组合就可以。下图中有两个分支,分别是(a|b)c(d|e)f,那么我们直接2×2,就可以排出4种路径,然后根据路径编写测试用例。
黑盒测试法
测试程序功能,是否正确实现了我们的功能。
- 等价类划分法。就是你觉得这个集合里,任何两个测试用例的效果本质上是一样的,那么就任选一个就可以。
- 边界值分析法。结合等价类同时使用,选取<=>边界值的三种用例来测试功能对于特殊异常值的处理是否正确
黑盒测试划分等价类我觉得可以层次划分:
- 首先是最顶层的,输入格式
- 其次是每个部分的输入范围
- 年
- 月
每个条件都编个号,方便后面覆盖的时候写题。
UML建模与设计
参考视频
用例图
元素:
- 活动者
- 用例
- 用例箭头,上面写者关系
类图
学过JAVA的会心一笑。
顺序图
- 方块代表类
- 矩形条代表激活
- 虚线代表类存在
- 箭头代表交互
状态图
学过数字逻辑的会心一笑