免费预览已结束,剩余18页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北京化工大学北方学院课程设计报告一、 引言1.1编写目的测试分析报告是把测试的结果写成文档,并对测试结果进行分析,为纠正软件的缺陷提供依据,也为软件验收和交付打下基础。是软件开发的另一里程碑。及时记录测试阶段的工作过程和工作成果,如实反映测试过程中所解决的各种问题,把集成测试和确认测试的结果以文件形式加以记载,使开发者能在第一时间对遇到的问题做迅速反应。1.2 背景软件名称:线性方程组求解 具体要求:输入是N(N256)元线性方程组Ax=B,输出是方程组的解,也可能无解或有多组解。1.3算法说明首先将线性方程组做成增广矩阵,对增广矩阵进行行变换。对元素aii,在第i列中,第i行及以下的元素选取绝对值最大的元素,将该元素最大的行与第i行交换,然后采用高斯消元法将新得到的aii消去第i行以下的元素。一次进行直到ann。从而得到上三角矩阵。再对得到的上三角矩阵进行回代操作,即可以得到方程组的解。2、 正文 (1)设计部分该软件用于求解线性方程组的解。执行过程:(1) 首先执行main()(主函数),输入待求解方程组的增广矩阵的行数,接着输入增广矩阵。i. 调用uptrbk(double *A,int N)(上三角变换函数), 在此函数中又调用了两个函数:FindMax(int p,int N,double *A)和 ExchangeRow(int p,int j,double *A,int N)。ii. FindMax()函数用于找出列向量中绝对值最大项的标号,ExchangeRow()用于交换两行。iii. uptrbk()函数将矩阵行数N、增广矩阵指针A、行号p传给FindMax()函数,找出绝对值最大项的标号;iiii. 接着将绝对值最大项的标号传给ExchangeRow()函数, 最终将绝对值最大的那行换到第一行。(2) 最后执行回代函数,求出方程组的解。源代码:#include#include#include/在列向量中寻找绝对值最大的项,并返回该项的标号int FindMax(int p,int N,double *A)int i=0,j=0;double max=0.0;for(i=p;imax) j=i;max=fabs(Ai*(N+1)+p);return j;/交换矩阵中的两行void ExchangeRow(int p,int j,double *A,int N)int i=0;double C=0.0;for(i=0;iN+1;i+)C=Ap*(N+1)+i;Ap*(N+1)+i=Aj*(N+1)+i;Aj*(N+1)+i=C;/上三角变换,A为增广矩阵的指针,N为矩阵的行数。void uptrbk(double *A,int N)int p=0,k=0,q=0,j=0;double m=0.0;for(p=0;pN-1;p+)/找出该列最大项的标号j=FindMax(p,N,A);/交换p行和j行ExchangeRow(p,j,A,N);if(Ap*(N+1)+p=0)printf(矩阵是一个奇异矩阵,没有唯一解!);break;/消去P元素以下的p列内容。for(k=p+1;kN;k+)m=Ak*(N+1)+p/Ap*(N+1)+p;for(q=p;qN+1;q+)Ak*(N+1)+q=Ak*(N+1)+q-m*Ap*(N+1)+q;printf(n增广矩阵高斯列主元消去后的矩阵为:n);for(j=0;j=0;k-)temp=0.0;for(i=k+1;i256|N=0)printf(输入的数字不再范围之内!);printf(n);return 0; else A=(double*)calloc(N*(N+1),sizeof(double); printf(请输入待求解方程组的增广矩阵(%d行%d列):n,N,N+1);for(i=0;iN*(N+1);i+)scanf(%lf,&Ai);system(cls); printf(方程的增广矩阵为:n);for(i=0;iN*(N+1);i+)if(i%(N+1)=0)printf(n);printf(%lft,Ai);uptrbk(A,N); /上三角变换X=backsub(A,N); /回代函数printf(nn方程组的解为:n);for(i=0;iN;i+)printf(X(%d)= %lfn,i+1,Xi);free(A);free(X);exit(0);程序流程图如下:(2) 测试部分2.测试过程及其结果2.1测试方案按测试技术分,本测试用到了白盒测试和黑盒测试;对于白盒测试技术,用到了路径覆盖法,上体包括语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,条件组合覆盖及物理路径覆盖法,对于黑盒测试技术,用决策表法;对于黑盒测试。按测试方式分,本测试用到了静态测试和动态测试;2.2单元测试2.2.1黑盒测试黑盒测试技术就是根据功能需求来设计测试用例,验证软件是否按照预期要求工作。黑盒测试通常把程序看做一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下进行测试。采用黑盒测试技术并不需要提供源代码,如果用户不能或者不愿意提供源代码,黑盒测试是可行的方法。(1) 采用边界条件法:边界条件法是对等价类方法的扩张,因为长期的测试工作,发现大量错误是发生在边界条件上,而不是发生在内部。因此,针对输入集合、输出集合和操作集合等价类的边界条件而设计出来的一些测试用例,更容易揭露软件中的缺陷。 /在列向量中寻找绝对值最大的项,并返回该项的标号int FindMax (int p, int N, double *A)int i=0,j=0;double max=0.0;for(i=p; imax) j=i;max=fabs(Ai*(N+1)+p); return j;变量为N(行数),p(行号),且范围分别为0N=256, 0=pN用例N(行数)p(行号)预期输出实际输出100输入的数字不在范围之内!输入的数字不在范围之内!210j=0j=03125124j=50j=504256255j=45j=455257256输入的数字不在范围之内!输入的数字不在范围之内!(2)采用因果图法:因果图法提供了一种把需求规格说明书转化为决策表的系统化方法。等价类划分法和边界条件法着重考虑输入条件本身的属性,但未考虑输入条件之间的逻辑关系。因果图法是一种帮助人们系统的选择一组高效的测试用例的方法,他适合检查程序输入条件的各种情况。/交换矩阵中的两行void ExchangeRow(int p,int j,double *A,int N)int i=0;double C=0.0;for(i=0;i=0;k-)temp=0.0;for(i=k+1;iN;i+)temp=temp+Ak*(N+1)+i*Xi;Xk=(Ak*(N+1)+N-temp)/Ak*(N+1)+k;return X;原因输入N输入A结果返回X因果图:1211输入N输入A 返回X 决策表:12输入输入A111输入N201输出返回X11012.2.2白盒测试白盒测试也称结构测试或逻辑驱动测试,通过了解软件系统的内部工作过程,设计测试用例来检测程序内部动作是否按照规格说明书规定的忠诚进行,按照程序内部的结构测试程序,检查程序中的每条通路是否都能按照预定要求正确工作。2.2.2.1 基于条件路径覆盖条件路径覆盖对于每个判定中所包含的若干个条件,应设计足够多的测试用例,使得判定中的每个条件都至少取一次“真值”和“假值”。(1)int FindMax(int p, int N, double *A) 该函数用于找出列向量中绝对值最大项的标号。开始i=0,j=0,max=0,i=pimaxj=i;max=fabs(Ai*(N+1)+p);结束return ji+ s a b Y N c Y N d e f g测试用例测试数据预期结果测试路径CASE1N=1,p=0返回绝对值最大项下标sabcdebfgCASE2N=3,p=1返回绝对值最大项下标sabcdebcefg(2)double* backsub(double *A,int N) 该函数为回代函数。开始 s*X=NULL,temp=0.0; k=0,i=0;XN-1=A(N-1)*(N+1)+N/A(N-1)*(N+1)+N-1;k=0k=N-2temp=0.0,i=k+1iNXk=(Ak*(N+1)+N-temp)/Ak*(N+1)+k;temp=temp+Ak*(N+1)+i*Xi;i+k-return X结束 a b c Y d N e Y f N g h j k l测试用例测试数据预期结果测试路径CASE1N=1进行上三角变换sabcklCASE2N=2进行上三角变换sabcdefgehjkl(3) void ExchangeRow(int p,int j,double *A,int N) 该函数用于交换两行。开始i=0,c=0.0iN+1C=Ap*(N+1)+i;Ap*(N+1)+i=Aj*(N+1)+i;Aj*(N+1)+i=C;i+结束 s a b Y N c d e测试用例测试数据预期结果测试路径CASE1N=1交换两行sabcdbcdbeCASE2N=2交换两行sabcdbcdbcdbe2.3集成测试:集成测试就是策略就是在分析测试对象的基础上,描述软件模块集成的方式、方法。集成测试的基本策略较多。如大爆炸集成、自底向上集成、自顶向下集成、三明治集成、协议集成和高频集成等方法。本软件系统比较小,而且它的每个模块都通过了充分的单元测试,所以本软件系统的集成测试策略采用大爆炸集成。测试方法采用自动化测试技术。2.3.1 测试软件与测试过程 测试过程中使用的测试软件是C+ Test,整个测试过程分为动态测试、静态测试和源代码测试。2.3.1.1动态测试:void uptrbk(double*,int):该函数实现增广矩阵的上三角变换问题分析:(1)问题出现位置:57: printf(n增广矩阵高斯列主元消去后的矩阵为:n); 58: for(j=0;j printf(%lft,Aj); 63: 64: 65: /下面是回代函数 66: double* backsub(double *A,int N) 67: 在此段代码62行处可能发生访问越界。(2)问题出现位置:7: 8: int i=0,j=0; 9: double max=0.0; 10: for(i=p;i if(fabs(Ai*(N+1)+p)max) / fabs()求浮点数的绝对值 13: 14: j=i; 15: max=fabs(Ai*(N+1)+p); 16: 17: 在此段代码12行处可能出现数组越界。(3)问题出现位置:7: 8: int i=0,j=0; 9: double max=0.0; 10: for(i=p;i if(fabs(Ai*(N+1)+p)max) / fabs()求浮点数的绝对值 13: 14: j=i; 15: max=fabs(Ai*(N+1)+p); 16: 17: 在此段代码12行处可能出现数组越界。覆盖率:2.3.1.2静态测试:问题分析:(1)问题出现位置:38: 39: /找出该列最大项的标号 40: j=FindMax(p,N,A); 41: /交换p行和j行 42: ExchangeRow(p,j,A,N); 43: if(Ap*(N+1)+p=0) 44: 45: printf(矩阵是一个奇异矩阵,没有唯一解!); 46: break; 47: 48: /消去P元素以下的p列内容。 在此段代码43行处发生访问越界,导致访问冲突。(2)问题出现位置:324: _CRTIMP char * _cdecl gets(char *);325: _CRTIMP int _cdecl _getw(FILE *);326: _CRTIMP void _cdecl perror(const char *);327: _CRTIMP int _cdecl _pclose(FILE *);328: _CRTIMP FILE * _cdecl _popen(const char *, const char *);329: _CRTIMP int _cdecl printf(const char *, .);330: _CRTIMP int _cdecl putc(int, FILE *);331: _CRTIMP int _cdecl putchar(int);332: _CRTIMP int _cdecl puts(const char *);333: _CRTIMP int _cdecl _putw(int, FILE *);334: _CRTIMP int _cdecl remove(const char *);在此段代码57行处调用printf()函数时传递参数出现问题。2.3.1.3编码规则测试:(1)问题出现位置:55: 56: 57: printf(n增广矩阵高斯列主元消去后的矩阵为:n); 58: for(j=0;j if(j%(N+1)=0) 61: printf(n); 62: printf(%lft,Aj); 63: 64: 65: /下面是回代函数 C+Test 编码规范规定,条件语句的语句块要用大括号括起来,而程序中没有。(2)问题出现位置:98: A=(double*)calloc(N*(N+1),sizeof(double); 99: printf(请输入待求解方程组的增广矩阵(%d行%d列):n,N,N+1); 100: 101: for(i=0;i system(cls); /清除屏幕上所有显示 104: 105: printf(方程的增广矩阵为:n); 106: for(i=0;i main() 84: 85: int N=0,i=0; 86: double *A=NULL,*X=NULL; 87: printf(n请输入待求解方程组的增广矩阵的行数:); 88: scanf(%d,&N); C+Test 编码规范规定,函数应明确返回类型,而此函数没有明确表示。(4)问题出现位置:85: int N=0,i=0; 86: double *A=NULL,*X=NULL; 87: printf(n请输入待求解方程组的增广矩阵的行数:); 88: scanf(%d,&N); 89: 90: if(N256 | N for(i=p;imax) / fabs()求浮点数的绝对值 13: 14: j=i; 15: max=fabs(Ai*(N+1)+p); C+Test 编码规范规定,分号与下一条语句之间应加一个空格,而此程序中没有。(6)问题出现位置:83: main() 84: 85: int N=0,i=0; 86: double *A=NULL,*X=NULL; 87: printf(n请输入待求解方程组的增广矩阵的行数:); 88: scanf(%d,&N); 89: 90: if(N256 | N=0) 91: 92: printf(请输入0-256的数字!); 93: printf(n); C+Test 编码规范规定,经过%的位置编号:1应该是数字格式的,且描述变量的大小。2.4系统测试:系统测试是通过与系统规格做比较,发现软件与系统需求规格不相符合或与之矛盾的地方。它将软件作为整个基于计算机系统的一个元素,与计算机硬件、外设、某系支持软件、数据和人员等其他系统元素结合起来,在实际运行(使用)环境下,对计算机系统进行测试。对所编写的高斯列主元程序进行编译和链接,然后执行得如下所示的窗口,我们按命令输入增广矩阵的行数为4,输入4行5列的增广矩阵:按回车键后,程序执行得如下所示的结果:实例增广矩阵行数增广矩阵输出结果121 3 52 5 72323 12 4 5634 45 21 102 3 8 11三、 结论31总结采用高斯列主元消去法解线性方程组得到的结果和实际的计算结果是一致的,高斯列主元消去法比较简单,在提高近似值解的精度上是非常起作用的,而且又具有计算量不大、算法组织容易,且对于有唯一解的线性方程组都可以计算,要求的条件比较低等等优点。不过,由于消去的循环次数比较多,当要解决比较大的线性方程组时计算就比较慢了。但对于一般的方程组,高斯列主元
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026及未来5年干燥蛤蜊粉末项目可行性研究报告(市场调查与数据分析)
- 2026及未来5年带放大镜怀表项目可行性研究报告(市场调查与数据分析)
- 6-12-Dihydro-6-12-dioxoindeno-1-2-b-fluorene-2-8-dicarboxylic-acid-生命科学试剂-MCE
- 权威数学试题及答案
- 电子复合材料课件
- 2026年铁路货运效率提升措施报告及2023-2027年行业展望
- 2026年动漫行业报告:二次元享受释放青春活力
- 2026年汽车行业降本增效策略研究报告
- 2026年医疗行业热点借势与品牌传播报告
- 2026年互联网保险行业监管政策与市场分析报告
- 社会保障资金管理信息系统一体化社保模块项目采购需求
- 第10课《 一元钱的体验》课件【海燕版】综合实践活动 四年级下册
- 化工职称考试试题及答案
- 快速康复外科理念ERAS与围手术期护理课件
- 海阔天空二声部合唱谱
- 网络社交情感表达-深度研究
- 矿山生态修复培训课件
- (正式版)HGT 6313-2024 化工园区智慧化评价导则
- 数学竞赛空间解析几何部分课件
- 麻醉科提高术中自体血输注率医院持续质量改进PDCA项目汇报书
- 江苏省昆山、太仓、常熟、张家港四市2023-2024学年八年级上学期期中英语试卷
评论
0/150
提交评论