1、1引言1.1 编写目的本测试报告为学生信息管理系统项目的测试报告,目的在于测试总结以及分析测试结果,描述系统是否符合需求。学生信息管理系统是应用于学校学生信息的管理以及维护的软件。可以方便的管理学生信息,维护以及修改学生信息。1.2 项目背景随着高校学生数量的增多,信息复杂度增加,十分有必要通过学生信息管理系统来完成学生信息的管理,修改及维护。开发学生信息管理系统在当今高校是十分有必要的。1.3 用户群 使用于学校。1.4 基本定义五类测试错误类型。A类:严重错误,包括以下各种错误:n 由于程序所引起的死机,非法退出n 死循环n 因错误操作导致的程序中断n 功能错误n 数据通讯错误B类:较严重
2、错误,包括以下各种错误:n 程序错误n 程序接口错误C类:一般性错误,包括以下各种错误:n 操作界面错误(包括数据窗口内列名定义、含义是否一致)n 打印内容、格式错误n 删除操作未给出提示n 与日常生活不符D类:较小错误,包括以下各种错误:n 界面不规范n 辅助说明描述不清楚n 错误操作未给用户提示n 提示窗口文字未采用行业术语1.5 参考资料1编程思想,机械工业出版社,2007 2软件测试方法和技术(第二版),清华大学出版社2 测试概要测试目的:在于为执行测试提供用例,指导测试的实施,查找分析缺陷,评估测试质量并执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。测试声明:测试人员在软件
3、开发过程中的任务: 1、寻找Bug; 2、软件各种属性的组合程度良好; 2、避免软件开发过程中的缺陷; 3、衡量软件的品质; 4、关注用户的需求。2.1 测试环境2.1.1 软件硬件配置表2-1配置表环境VC+6.0硬件配置 CPU:CPU奔腾以上内存:512M以上硬盘:500G或以上软件配置VC+6.0 2.1.1 运行界面运行界面如下:44 图2-1 系统开始界面2.2 测试执行此次测试严格按项目测试计划执行,按时完成了测试计划规定的测试对象的测试。针对测试计划规定的测试策略,在测试执行中都有实现,在测试执行过程中,依据测试计划和测试用例,对系统进行了完整的测试。2.3 测试用例1. 增添
4、模块功能测试:主要测试学生信息能否按一定要求与格式正确输入。流程图及测试用例:如下图。 (1) 字段名称描述标识符0001测试项add模块用例:1. 12. lee3. 1234. 12345678905. 136. n7. m8. 1994 11 339. 1994 2 2910. 1994 11 3111. 1994 2 2812. anhui13. bozhou14. shatu15. lizhuang16. 12317. 1832990100418. 731261371输入正确选择输入姓名输入错误的学号输入正确的学号输入错误的年龄输入错误的性别输入正确的性别输入日期超过31天非闰年二月
5、天数为29天输入非大月天数为31天输入正确的日期输入province输入city输入county输入village输入错误的电话号码输入正确的电话号码输入邮箱测试用例间的关联 2. 删除模块功能测试: 测试能否按学生姓名或者学号正确删除学生信息。 流程图及测试用例:如下图。字段名称描述标识符0002测试项delete模块1.22.23.1000014.y5.26.27.10000000028.n9.210.111.lucky12.y13.2测试用例间的关联0001(2)3、修改模块功能测试: 测试能否正确的按要求修改学生信息并保存。 流程图及测试用例:如下图。字段名称描述标识符0003测试项m
6、odify模块用例:1.32.53.14.lucky5.lee6.17.Lucky8.19.y10.y11.212.2213.100000000214.315.y16.317.2318.Y19.420.Y21.422.F23.Y24.Y25.526.2048 8 2527.1993 3 328.X29.Y30.Y31.632.Anhui bozhou shatu lizhuang33.Y34.Y35.736.1832990100437.Y38.Y39.840.73126*41.Y42.n按照修改模块流程图输入测试用例间的关联0001(3)4、 查找功能功能测试: 测试能否按照学生姓名或者学号正
7、确的查找到学生信息。流程图及测试用例:如下图。(4)字段名称描述标识符0004测试项search模块用例:451HansLee42521231000000001按照查找模块流程图输入测试用例间的关联0001 5、排序模块功能测试:测试能否根据学生学号正确排序。测试用例:如下图。 6、其他功能及缺陷测试: 显示功能以及菜单显示功能还有系统退出功能。有的模块并不能很好的处理好用户随意格式的输入,并不能很好的友好显示错误。如增添模块的用例所示,程序陷入死循环。 2.4 .1功能性 A. 可以合理增添查询学生信息。B. 可以删除学生信息。C. 可以合理修改学生信息。D. 可以查询到任意已录入学生信息。
8、E. 可以对已录入学生进行排序。F. 可以输出显示学生信息。2.4.2 易用性程序界面提示友好丰富,可以很好的根据提示完成操作。2.5 单元测试及其测试用例 Add等价类划分Add等价类划分name输入合理等价类不合理等价类姓名1.合理的名字2.有数字3.有特殊字符(除连字符外)测试用例:2.123 3.Add等价类划分school number输入合理等价类不合理等价类学号1.数字字符2.有非数字字符测试用例:2.asd456456Add等价类划分age输入合理等价类不合理等价类年龄1.数字字符2.有非数字字符测试用例:2.asdAdd等价类划分sex输入合理等价类不合理等价类性别1.m或f
9、2.非m或f的任意字符测试用例:2.manAdd等价类划分brithday输入合理等价类不合理等价类生日日期1.68位数字字符和2位空格字符2.有非数字字符3.少于6位数字字符4.多于8位数字字符5.不是2位空格字符年份范围6.在19852000之间7.小于19858.大于2000月份范围9.在112之间10.等于011.大于12日期范围12.当为闰年2月时在129之间13.当为平年2月时在128之间14.当为1,3,5,7,8,9,12月时在131之间15.当为其他月时在130之间16.等于017. 当为闰年2月时大于2918.当为平年2月时大于2819.当为1,3,5,7,8,9,12月时
10、大于3120.当为其他月时大于30测试用例:2.asdc 6 25 3.2014 4.2014625625625 5.2014624 7.1111 6 24 8.3333 6 24 10. 2014 0 1 11.2014 13 33 16.2014 1 0 17.2008 2 31 可以检查出错误 18.2013 2 29 可以检查出错误 19.2013 1 33 可以检查出错误 20. 2013 4 33 可以检查出错误Add等价类划分city输入合理等价类不合理等价类城市1.现有的城市名称2.字符的随意组合测试用例:woAdd等价类划分county输入合理等价类不合理等价类国家1.现有国
11、家名称2.字符的随意组合测试用例:woAdd等价类划分village输入合理等价类不合理等价类城镇1.现有城镇名称2.字符的随意组合测试用例:woAdd等价类划分phone number输入合理等价类不合理等价类手机号1.以1开头的 11位数字字符2.非数字字符3.少于114.多于115.不以1开头测试用例:2.aaaaaaaaaaa 可以检查出错误3.aa 4.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 5.01314151617 可以检查出错误Add等价类划分e-mail address输入合理等价类不合理等价类邮箱号1.符合邮箱地址规则2.不符合地址规则测试用
12、例:123#123#123#Delete等价类划分Delet等价类划分Search输入合理等价类不合理等价类选择1.1或22.非1或2的其他数字字符3.其他字符测试用例:2.3 可以检查出错误3.a Delet等价类划分change输入合理等价类不合理等价类选择1.y或n或Y或N2.其他字符测试用例:2.a 可以检查出错误Modify等价类划分Modify等价类划分Search输入合理等价类不合理等价类选择1.输入1或22.非1或2的其他数字字符3.其他字符测试用例:2.3 可以检查出错误3.aModify等价类划分name或number输入合理等价类不合理等价类选择1.存入的名字或学号2.任
13、意的字符测试用例:2.123 可以检查出错误Modify等价类划分option输入合理等价类不合理等价类选择1.输入18之间的任意数字2.非1或8的其他数字字符3.其他字符测试用例:2.0 可以检查出错误 3.a2.6 集成测试 2.6.1 集成测试概要2.6.1.1 集成测试定义 此阶段测试基于单元测试的完成。主要目的检测系统是否达到需求对业务及数据流的处理是否符合标准,检测系统对业务流处理是否存在逻辑不严谨及错误检测需求是否存在不合理的标准及要求。2.6. 2 集成测试实现此阶段将前面的模块测试进行汇总由于大多数测试已经做过,汇总一起就只进行了简单的测试看是否各模块之间有影响。 2.7 系
14、统测试 2.7.1 系统测试概要2.7.1.1 系统测试定义 用于核实用户与软件之间的交互。系统测试的目标是确保用户界面会通过测试对象的功能来为用户提供相应的访问或浏览功能。2.7.1.2系统测试实现 主要通过功能测试实现。与综合测试相同。3改进建议 在整个系统测试执行期间,项目组开发人员能够提出的各种缺陷,在一定程度上较好地保证了测试执行的效率以及测试最终期限。但是在整个软件测试活动中还是暴露了一些问题,如,测试执行时间相对较少,测试通过标准要求较低;细节性错误较多,测试时对管理平台不够熟悉,使用时效率偏低;测试时对系统了解不够透彻,测试执行时存在理解偏差,导致提交无效缺陷。通小组的协力合作
15、,学生信息管理系统如期完成并达到交付标准。建议:需求提出方可以再使用该系统的基础上,继续搜集用户的使用需求反馈,并结合市场同类产品的优势,在今后的版本中不断补充并完善功能。l 在项目开始的时候应该制定编码标准,需求变更标准,开发和测试人员都严格按照标准进行,可以在后期减少因为开发,测试不一致而导致的问题,同时也可以降低沟通成本。l 发布版本的时候,正确布置测试环境,减少因为测试环境出现的无效bug。l 开发人员解决bug的时候,填写bug原因以及解决方式,方便bug的跟踪。l 开发人员在开发版本上发现bug,可以通知测试人员,因为开发人员发现的bug很有可能在测试版本上出现,而测试人员和开发人
16、员的思路不同,有可能测试人员没有发现该bug,而且,这样可以保证发现的bug都能够被跟踪。4 测试结论存在致命错误系统不合格,需要重新修改某些语句。下面从各方面说明系统存在的问题:4.1 功能系统正确的实现了用户对学生信息增、删、改、查和排序的需求,小巧便捷。4.2 易用性现有系统实现了如下易用性:1. 输入方式可理解性2. 输入限制的正确性 3.操作提示信息正确性,一致性,可理解性 4.输入限制提示信息的正确性,可理解性,一致性5.学生信息增、删、改、查及显示的易用性现有系统存在如下易用性缺陷:1. 界面排版不美观,尤其是显示学生信息时2. 输入解释性说明不够详尽4.3 可靠性现有系统的可靠
17、性控制不够严密,很多控制是通过用户输入,错误的输入有可能引起未知的错误,导致系统进入死循环。现有系统的容错性不高,如果系统出现错误,无返回值,系统易崩溃。此为严重错误。4.4安全性 程序中输入一些特定序列可能引起死循环。5 心得体会通过本次测试学生信息管理系统项目,总结测试阶段的测试以及分析测试结果,基本预期完成了系统,软件测试的真正意义在于发现错误,而不在于验证软件是正确的,再严密的测试也不能完全发现软件当中的错误,要确保软件基本可用,要加强软件的响应的环节,还要增强软件的可移植性和兼容性,白盒测试来解决系统缓冲溢出,黑盒测试来解决用户交互的bug,从而全方面的提高系统的可用性,健壮性,安全
18、性,稳定性,通过小组成员的通力合作,基本完成了软件功能,但是软件中还存在很多问题,需要进一步完善提高,比如程序中很多函数的判断语句带有scanf()函数,当输入一系列特定的不合理数据时会使程序进入死循环。系统有待修改与完善。6 附件(程序代码)#include #include #include /include the prototype of exit()#include const int NUMLEN = 11 ;const int NAMLEN = 20 ; / name lengthconst int PHOLEN = 12 ; / max length of phone numb
19、erconst int MAILEN = 20 ; / mail length / The following constants used in struct ADDRESSconst int PROLEN = 10 ; / province lengthconst int CITLEN = 25 ; / city lengthconst int COULEN = 25 ; / county lengthconst int VILLEN = 20 ; / village lengthint count = 0 ; / actual number of peopleint choice = 0
20、 ; / users choice used in the menustruct BIRTHDAY / struct birthdayint year ;int month ;int day ; ;struct ADDRESS / struct addresschar provincePROLEN ; / store province addresschar cityCITLEN ; / store city addresschar countyCOULEN ; / store county addresschar villageVILLEN ; / store village address
21、 ;struct STUDENT / struct studentchar nameNAMLEN ; / store namechar numNUMLEN ; / store school numberint age ;char sex ; struct BIRTHDAY bir ;struct ADDRESS addr ;char phonumPHOLEN ; /store phone numberchar mailMAILEN ; / store e-mail address ;struct STUDENT stu100 ; / the number of studentvoid Add(
22、void) ;void Get_bir(void) ; / used in Add() to get birthdaybool check(struct BIRTHDAY bir) ; / used in Cet_bir() to check birs validitybool leap_year(int year) ; / used in check() to confirm whether it is a leap yearvoid Get_addr(void) ; / used in Add() to get addressvoid Get_phonum(void) ; / used i
23、n Add() to get phone numbervoid Get_mail(void) ; / used in Add() to get e-mail address/void search_name(void) ; / search by namevoid search_num(void) ; / search by number (school number)void Display(int i) ; / display the information of someonevoid Search(void) ;/void Modify(void) ; / used to modify
24、 students informationvoid change(int i) ; / used in Modify() bool yes_or_no(void) ; / used in change()void change_name(void) ; / change information used in search by namevoid change_num(void) ; / change information used in search by numberbool confirm(void) ; / to acquire the users confirmvoid Name(
25、int i) ; / modify name, the following all used in change()void Num(int i) ; / .void Age(int i) ; / .void Sex(int i) ; / .void Bir(int i) ; / .void Addr(int i) ; / .void Phonum(int i) ; / .void Mail(int i) ; / ./void Delete(void) ; / delete informationvoid delete_name(void) ; / delete by namevoid del
26、ete_num(void) ; / delete by numbervoid del(int i) ;/void Sort(void) ; /void Menu(void) ;int get_ch() ; / get users directivevoid Show(void) ;int main(void)int n ;Show() ;Menu() ;while (1)choice = get_ch() ;switch (choice)case 1:Add() ;break ;case 2:Delete() ;break ;case 3:Modify() ;break ;case 4:Sea
27、rch() ;break ;case 5:for (n = 0; n = 15 & stucount.age = 30)printf(Age ranges from 15 to 30, try again: ) ;getchar() ;printf(Enter your sex: ) ;while(!(scanf(%c,&stucount.sex) & (stucount.sex = m | stucount.sex = f)printf(The sex is %c?n,stucount.sex) ;getchar() ;Get_bir() ; / get birthdaygetchar()
28、;Get_addr() ; / get addressGet_phonum() ; / get phone numberGet_mail() ;count + ;printf(Done!n) ;void Get_bir(void) printf(Enter your birthday like this: 2015 6 24n) ; printf(Enter your birthday: ) ; while(!(scanf(%d%d%d, &stucount.bir.year, &stucount.bir.month, &stucount.bir.day) & check(stucount.b
29、ir) Sleep(1000); printf(Wrong ! Try again: ) ; bool check (struct BIRTHDAY bir)if (2 = bir.month)if(leap_year(bir.year)if(bir.day = 29) return true ;elseprintf(%d year %d month has %d days?n,bir.year,bir.month,bir.day) ;printf( 2 month has no more than 29 days even the year is a leap year!n) ;return
30、 false ;else if (bir.day 31)printf(Have you ever seen a month that has %d days?n, bir.day) ;return false ;if(31 = bir.day)if(bir.month = 8 & bir.month % 2 = 0)return true ;elseprintf(%d month is not a solar month,so it shouldnt have more than 30 days.n,bir.month) ;return false ;else return true ;boo
31、l leap_year(int year)return (0 = year%4 & year% 100 != 0) | (0 = year%400) ? true : false ;void Get_addr(void)printf(Enter your province: ) ;while(!scanf(%s,stucount.addr.province) printf(Something went wrong! Try again: ) ;getchar() ; printf(Enter your city: ) ;while(!scanf(%s,stucount.addr.city) p
32、rintf(Something went wrong! Try again: ) ;getchar() ;printf(Enter your county: ) ;while(!scanf(%s,stucount.addr.county) printf(Something went wrong! Try again: ) ;getchar() ;printf(Enter your village: ) ;while(!scanf(%s,stucount.addr.village) printf(Something went wrong! Try again: ) ;getchar() ;voi
33、d Get_phonum(void)printf(Enter phone number: ) ;while(!(scanf(%s,stucount.phonum) & (strlen(stucount.phonum) = PHOLEN - 1 | strlen(stucount.phonum) = PHOLEN - 5) printf(Wrong! Try again: ) ;getchar() ;void Get_mail(void)printf(Enter e-mail address: ) ;while(!scanf(%s,stucount.mail) printf(Wrong! Try
34、 again: ) ;getchar() ;void Search(void)if(!count) printf(No person! Please add first.n) ;elseint choice_12 = 0 ;printf(Search by name, input 1(one); by number, input 2n) ;printf(Enter your choice: ) ;while(!(scanf(%d,&choice_12) & (1 = choice_12 | 2 = choice_12)printf(Enter 1 or 2, Try again: ) ;swi
35、tch(choice_12)case 1:search_name() ;break ;case 2:search_num() ;break ;void search_name(void)char tempNAMLEN ;printf(Enter the name: ) ;while(scanf(%s,temp)int flag = 0 ;for (int i = 0; i name)Display(i) ;flag = 1 ;break ;if (!flag)printf(No such student!n) ;printf(Enter the name carefully: ) ;continue ;if (flag)break ;void search_num(void)char tempNUMLEN ;printf(Enter the number: ) ;while(scanf(%s,temp)int