当前位置:文档之家› 软件工程

软件工程

华东交通大学软件学院上机/实验报告册专业:软件工程班级:软件工程9班姓名:刘悦学号:2923课程名称:软件工程教师:袁朝晖学期: 大二上2016年12月20日实验一:数据流图实验一、实验目的通过绘制数据流图掌握数据流图的基本原理,并能对简单问题进行数据流图的分析,独立地完成数据流图的分析与设计。

此外,学会使用Case工具完成数据流图与系统流程图的分析与实现。

二、实验内容实验内容如下:a)用visio绘制出如下定货系统的SFD(系统流程图)的模型。

图1 某定货系统SFDb)用visio绘制教材中分别绘制出定货系统的DFD的顶层模型、第一层模型与第二层模型。

(具体参考课本上P69~P70的图3、4,图3、5与图3、6)c)用visio 绘制如下图所示的取款手续的数据流图。

图2 取款手续d)请结合目前的银行柜台取款手续,对图2的取款数据流图进行改进,绘制当前银行柜台取款过程的顶层与第一层数据流图。

三、实验结果:系统流程图基本物理元素绘制数据流之后得到完整的系统流程图(SFD)顶层模型基本元素完整的顶层数据流图,如下图:完整的顶层模型当前银行柜台取款过程的顶层数据流图: 储户检查账户余额余额信息储户文件登录现款储户第一层数据流图:储户信息查询账户余额余额信息储户文件信息查核取款信息储户取款单存折取款信息取款信息登录付款结算单现款日历年月日实验二: 软件设计实验一、实验目的学会使用Case 工具完成描述软件结构的软件结构图与软件层次图的设计,并熟练地掌握几种常用的软件详细设计的工具,如程序流程图、盒图、PAD 图与判定表,并能把给定的软件问题描述转化为过程设计结果。

二、实验内容1、软件结构设计:(1) 采用visio 绘制教材的图4、26中的软件结构图;(2) 采用visio 绘制教材的图4、41的软件层次图。

(3) 分析如下所示的数据流图,并把它转换成软件结构图,然后用visio 把结果画出来。

(注意,请用结构图)图1 某系统的数据流图2、软件的详细设计:某航空公司规定,乘客可以免费托运重量不超过20公斤的行李,当行李重量超过20公斤,对头等舱的国内乘客超重部分每公斤收费6元,对其她舱的国内乘客超重部分每公斤收费8元,对外国顾客超重部分每公斤收费比国内乘客多1、5倍,对残疾乘客超重部分每公斤收费比正常乘客少一半。

实验包含三部分的内容:a)用word设计描述其详细设计结果的PAD图、判定表。

b)用viso画出它的程序流程图,并计算它的Mccabe程序复杂度。

(要求把计算过程写到实验报告中)三、实验结果1、(1)、采用visio绘制教材的图4、26中的软件结构图;实验包含三部分的内容:e) 用word设计描述其详细设计结果的PAD图、判定表。

f) 用viso画出它的程序流程图,并计算它的Mccabe程序复杂度。

(要求把计算过程写到实验报告中)三、实验结果1、(1)、采用visio绘制教材的图4、26中的软件结构图;(2)、采用visio绘制教材的图4、41的软件层次图(3)、分析如下所示的数据流图,并把它转换成软件结构图,然后用visio把结果画出来。

2 PAD图 :判定表:程序流程图:计算Mccabe程序复杂度:步骤1:将程序流程图退化成有向图,将程序流程图的每个处理框退化成一个节点,将控制流箭头退化成连接各节点的有向弧。

步骤2:在有向图中,由程序出口到入口连接一条虚有向弧,使有向图达到强连通。

步骤3:计算V(G)=m-n+1V(G)就是有向图的G中的环数,m就是有向图G中的弧数,n就是有向图G中的节点数因此环形复杂度为:V(G)=17-13+5=9,所以McCabe程序复杂度为9。

实验三: 软件测试实验一、实验目的学会使用CASE工具完成软件测试用例的设计以及初步完成对单元测试,深刻理解单元测试的基本原理及CASE工具的基本使用。

二、实验内容1、单元测试的逻辑覆盖测试验证实验:运用Nunit工具完成对如下例子的单元测试,要求分别完成语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖与路径覆盖测试的测试用例编写以及测试。

要求首先按格式编写出该测试所需要的测试用例,然后编写测试程序,对其进行测试,最后把您写的测试用例按格式记录到实验报告中。

测试用例的格式如下:{[输入], [期望结果]},对于本例请遵循如下格式:{[A,B,X],[X]}图1 单元测试逻辑覆盖的验证实验此外,请测试如下情况:(1). 如果将第1个判定中的“AND ”错写成了“OR ”,用数据{[2,0,3],[2、5]}(首先,该组数据满足何种逻辑覆盖)对程序进行测试,可否发现错误?为什么?请先测试,然后把结论记录到实验报告中。

(2). 如果将第2个判定中的“x>1”错写成了“x<=1”,则用数据{[2,0,3],[2、5]}对程序进行测试,可否发现错误?为什么?请先测试,然后把结论记录到实验报告中。

(3). 如果将第1个判定中的“AND ”错写成了“OR ”,则用数据(A>1) and (B=0)(A=2) or (X>1)X = X/A X = X+1TTFF{[3,0,1],[1/3]}与{[2,1,2],[3]}(首先,该组数据满足何种逻辑覆盖)对程序进行测试,可否发现错误?为什么?请先测试,然后把结论记录到实验报告中。

(4).如果将第2个判定中的“x>1”错写成了“x<=1”,则用数据{[3,0,1],[1/3]}与{[2,1,2],[3]})对程序进行测试,可否发现错误?为什么?请先测试,然后把结论记录到实验报告中。

(5).如果将第2个判定中的“x>1”错写成了“x<=1”,则用数据{[2,0,3],[2、5]}与{[1,1,1],[1]}(首先,该组数据满足何种逻辑覆盖)对程序进行测试,可否发现错误?为什么?请先测试,然后把结论记录到实验报告中。

(6).如果将第1个判定中的“a>1”错写成了“a<=1”,且把“b=0”错写成了“b<>0”,则用数据{[2,1,1],[2]}与{[1,0,2],[3]}对程序进行测试,可否发现错误?为什么?请先测试,然后把结论记录到实验报告中。

(7).如果将第1个判定中的“a>1”错写成了“a<=1”,且把“b=0”错写成了“b<>0”,则用数据{[2,1,1],[2]}、{[2,0,2],[2]}、{[1,1,1],[1]}与{[1,0,2],[3]}对程序进行测试,可否发现错误?为什么?请先测试,然后把结论记录到实验报告中。

2、循环结构测试现有一个简单循环,需要对其进行测试,其程序伪代码如下:Int i,a;Input(i,a);While(i<=10){a += 2;if(a>4){a *= 2;a += 3;}Else{If(a>1)a -= 4;elsea += 5;}i++;}a *=4;Output(a);要求为该程序设计满足简单循环的所有测试用例,记录到实验报告中。

3、等价类划分及边界值测试的验证实验:有如下算法A与B均就是非负整型变量(注:int型),如果10<A<100,则B=A*20-5,如果0<A<=10,则B=A*15+20,如果A>=100,则B=A*100-200,请分别用等价类划分方法与边界值分析方法设计测试用例,然后编写测试程序完成测试。

并把测试结论写入到实验报告中。

三、实验结果:1、(1)语句覆盖:不能发现错误,因为and比or要求的要严格一些,故and可以满足的数据or也一定可以满足。

(2)不能发现错误,第二个判定or只要满足一个条件即可,因为A=2必然成立,故第二个条件一定为真,所以不能发现错误。

(3)语句覆盖与判定覆盖:第一组测试数据不能发现错误,因为第一组数据可以满足第一个判定的and判定,肯定可以通过or判定条件。

而第二组测试数据可以发现错误,因为A=2,B=1,只有A满足条件而B不能满足条件,痛多AND返回0。

又由于把and错写成了or,返回值为1,影响了X的值,所以能发现错误。

(4)第一组测试数据能发现错误。

经过第一个阿婆那段,执行c操作结果得到X=1/3,第二个判定条件就是X<=1,判定成功返回值为1,进行e操作,最后得到结果X=4/3。

与期望结果不同,系统想、提示错误,故能发现错误。

第二组测试数据不能发现错误。

她、因为第一个判定条件就是B=0,而B实际值为1判定不成功,将进行操作b,进行第二个判定时,因为判定条件为A=2,此时X=2,故判定成功返回1,进行e操作,最后得结果X=3与期望结果相同,不能发现“x>1”错写成了“x<=1”。

故不能发现错误。

(5)判定覆盖条件、语句覆盖、判定覆盖与条件覆盖第一组测试数据不能发现错误,在第2个判定时,因为A = = 2正确,满足条件,进行e操作。

最后x = 2、5,与期望结果相同。

所以不能发现“x>1”错写成了“x<=1”对于第二组测试数据,因为对于第二个判定A=2,而A的实际值为1,此时后面的判定X>1或者X<=1对结果就有影响了,错写之后由于X=1,对于X<=1判定成立,返回1,影响X的值,故能发现错误。

(6)第一组测试数据不能发现错误,因为原本执行路径就是abe。

出错后执行路径仍为abe,所以不能发现错误。

第二组测试数据也不能发现错误,因为原本执行路径就是abe。

出错后执行路径仍为abe,所以也不能发现错误。

(7)第一组测试数据不能发现错误,因为原本执行路径就是abe。

出错后执行路径仍为abe,所以不能发现错误。

第二组测试数据可以发现错误,因为原本执行路径就是ace。

出错后执行路径仍为abe,所以能发现错误。

第三组测试数据不能发现错误,因为原本执行路径就是abd。

出错后执行路径仍为acd,所以不能发现错误。

第四组测试数据不能发现错误,因为原本执行路径就是abe。

出错后执行路径仍为abe,所以也不能发现错误。

程序代码:#include<stdio、h>void main(){int A,B;float X,Y;printf("请输入A,B,X:\n");scanf("%d%d%f",&A,&B,&X);printf("请输入期望值Y:");scanf("%f",&Y);if(A>1&&B==0){ X=X/A;if(A==2||X>1) X=X+1;}else{ if(A=2||X>1) X=X+1;else {printf("输出X的值:");printf("%f",X);}}printf("输出X的值:");printf("%f\n",X);}循环结构程序:#include<iostream、h>void main(){int i,a;cout<<"请输入i与a:"<<endl; cin>>i>>a;while(i<=10){a=a+2;if(a>4){a=a*2;a=a+3;}else {if(a>1)a=a-4;else a=a+5;}i++;}a=a*4;cout<<a<<endl;}测试用例:(i,a)为(11,2)(1,5)(1,1)(1,-3)。

相关主题