软件工程综合实践专题课程第一次作业

软件工程综合实践专题课程第一次作业,对他人代码的阅读与分析。这次作业我是对网上找到的一位同学用C++语言编写的学生信息管理系统程序的分析。

在下载好程序源代码文档后,我通过阅读他的程序源代码大致了解了程序的功能,既输入、输出学生信息和通过学生学号和学生姓名对学生信息进行查询。学生信息主要包括:学生姓名、性别、家庭住址和六门学科的成绩。

之后,我将代码复制进了visual studio2017软件进行编译,软件报出了如下错误:

 

为调通程序,使程序能够运行,我将代码中所有的strcpy()函数都改成了它的安全版本:strcpy_s()函数;将程序中第80行的“Average = total / 6.0;”改为“Average = total / 6.0f;”避免数据的丢失;并将main()函数的函数类型改为int类型,在main函数末尾加上“return 0;”这行代码,使得代码更加规范。

   

在编译通过后运行程序,并按照程序提示进行输入,对程序进行测试

 

测试用例:

该测试是以学生信息管理程序为被测对象,该测试用例为黑盒测试用例。

功能描述如下:

1.打开程序后显示功能菜单界面;

2.输入所选菜单序号(应首先选择序号1,添加学生信息);

3.根据所选功能和程序提示进行输入;

4.输入序号0,退出程序。

用例ID

001

用例名称

学生信息管理程序

用例描述

程序中所有功能能够正常运行且运行结果正确

用例入口

打开学生信息管理程序

 

测试用例ID

场景

测试步骤

预期结果

备注

TC1

运行程序

运行程序

界面显示菜单

 

TC2

功能选择

选择功能序号1

界面显示“请输入第1个学生的基本信息:

请输入学生的姓名:”

 

TC3

增加学生信息

输入学生信息

返回到功能菜单界面

程序终止运行,且没有进行错误处理

TC4

输出学生信息

选择功能序号2

输出学生信息

程序界面出现乱码

TC5

增加第二个学生信息

输入学生信息

返回到功能菜单界面

程序终止运行且没有进行错误处理

TC6

输出学生信息

选择功能序号2

输出学生信息

程序界面出现乱码

TC7

用学号查找学生基本信息

选择功能序号3,并输入学生学号

输出该学生信息

找不到记录功能正常;找得到记录情况下无法测试

TC8

用学生姓名查找学生基本信息

选择功能序号4,并输入学生姓名

输出该学生信息

找不到记录功能正常;找得到记录情况下无法测试

TC9

退出程序

选择功能序号0

退出程序

 

测试后发现程序部分功能根本无法正常运行。

例如功能1:在输入学生信息时,程序被迫中止。

经过对程序进行一行一行的调试后,我发现在输入学生性别时,输入的“男”或“女”,超出了字符数组“Sex[2]”的大小,使得数组溢出,若将数组的大小改为三,则程序可以继续执行。为避免程序再出现类似的溢出情况以及减少程序运行的内存占用,我将程序中所有char类型的数组和指针都改为了string类型的变量,并将相关程序代码进行了修改,使得代码不像C语言那样复杂,也更符合C++语言的风格和使用。

 

此外,程序并没有做错误处理的过程,比如当没有输入内容时就进行输出、性别输入‘男’或‘女’之外的内容,或是课程成绩的输入没有在0~100的范围内等错误情况。当出现这些情况时,程序没有显示错误提示,而是正常运行输出。这样运行出的结果并没有意义,因此,我在程序中增加了对这些情况的错误处理,尽量减少程序无谓的运行处理。

 

另外,作为一个学生信息管理系统的程序,我认为还应该增加对文件的读写功能和对学生信息数据的修改功能,这样使程序功能更加完善,也避免关闭程序时清除缓存的同时也清除了输入的学生信息。

 

在对程序进行修改和完善后,我又一次进行了回归测试:

测试用例:

该测试是以学生信息管理程序为被测对象,该测试用例为黑盒测试用例。

功能描述如下:

1.打开程序后显示功能菜单界面,同时将student.txt文件中的内容读取到程序中;

2.输入所选菜单序号;

3.根据所选功能和程序提示进行输入;

4.输入序号0,退出程序,并将程序中的数据存回到student.txt文件中。

 

用例ID

002

用例名称

学生信息管理程序

用例描述

程序中所有功能能够正常运行且运行结果正确

用例入口

打开学生信息管理程序

 

测试用例ID

场景

测试步骤

预期结果

备注

TC1

运行程序

运行程序

界面显示菜单,并显示“文件打开成功”

 

TC2

功能选择

选择功能序号1

界面显示“请输入第1个学生的基本信息:

请输入学生的姓名:”

 

TC3

增加学生信息

输入学生信息

返回到功能菜单界面

 

TC4

输出学生信息

选择功能序号2

输出学生信息

 

TC5

增加第二个学生信息

输入学生信息

返回到功能菜单界面

 

TC6

输出学生信息

选择功能序号2

输出学生信息

 

TC7

用学号查找学生基本信息

选择功能序号3,并输入学生学号

输出该学生信息

 

TC8

用学生姓名查找学生基本信息

选择功能序号4,并输入学生姓名

输出该学生信息

 

TC9

修改学生家庭地址信息

选择功能序号5,输入学生姓名;选择修改功能序号1,输入修改的地址信息

输出该学生信息,并修改相应地址信息

 

TC10

修改学生离散数学课程成绩

选择功能序号5,输入学生姓名;选择修改功能序号2,输入修改的离散数学课程成绩

输出该学生信息,并修改相应离散数学课程成绩、

 

TC11

修改学生英语课程成绩

选择功能序号5,输入学生姓名;选择修改功能序号3,输入修改的英语课程成绩

输出该学生信息

 

TC12

修改学生C++课程成绩

选择功能序号5,输入学生姓名;选择修改功能序号4,输入修改的C++课程成绩

输出该学生信息

 

TC13

修改学生汇编语言课程成绩

选择功能序号5,输入学生姓名;选择修改功能序号5,输入修改的汇编语言课程成绩

输出该学生信息

 

TC14

修改学生数字逻辑课程成绩

选择功能序号5,输入学生姓名;选择修改功能序号6,输入修改的数字逻辑课程成绩

输出该学生信息

 

TC15

修改学生马克思主义哲学课程成绩

选择功能序号5,输入学生姓名;选择修改功能序号7,输入修改的马克思主义哲学课程成绩

输出该学生信息

 

TC16

退出程序

选择功能序号0

界面显示“文件打开成功”,并退出程序

 

 

通过测试和修改程序最终可以正常运行。

通过对这位同学的程序的阅读与分析,我认为开发一个程序的过程中除了要使得程序的功能更加完整和完善外,更重要的是对程序的测试,只有在这个过程中不断全面、反复的测试才能保证程序的功能有效率更高,同时也能降低修改代码的成本、时间和工作量。

posted @ 2019-03-05 11:34  _Xmy  阅读(224)  评论(0编辑  收藏  举报