程序1:
void GetMemory(char *p, int num) {
p = (char *)malloc(sizeof(char), num); return; }
int main() {
char *str = NULL; GetMemory(str,100); strcpy(str, “Hello World.”); printf(str); return 0; }
程序2:
void GetMemory(char *p, int num) {
p = (char *)malloc(sizeof(char), num); return; }
int main() {
char *str = NULL;
GetMemory(&str, 100); strcpy(str, “Hello World.”); printf(str); return 0; }
程序3: int main() {
char *str = (char *)malloc(100); strcpy(str, “Hello ”); free(str);
if (str != NULL) {
strcpy(str, “World.”); printf(str); }
return 0; }
参考答案:
程序1:系统运行崩溃。
原因: GetMemory(str,100)并没有将申请到的内存传回到调用程序,str一直是NULL,
从而导致非法内存访问,使程序崩溃。 程序2:显示“Hello World.”,但将产生内存泄漏。
原因: GetMemory(&str,100)申请到的内存没有被释放。 程序3:显示“Hello World.”但有时系统运行异常。
原因: 在free(str)释放内存空间后,str仍然指向原来空间地址,成为“野指针”。如果这时系统将所释放的空间分配给其他程序使用,将会造成系统运行异常。 7. 请选择一种编程语言,编写一份完整的代码检查清单。 参考答案: 略。
第10章 软件测试(习题与参考答案)[选择题]
1. ( )在软件开发的过程中,若能推迟暴露其中的错误,则为修复和改正错误所花费的代价就会降低。(B) A. 真 B. 假
2. ( )好的测试是用少量测试用例运行程序,发现被测程序尽可能多的错误。A. 真 B. 假
3. ( )好的测试用例应能证明软件是正确的。A. 真 B. 假
4. ( )白盒测试仅与程序的内部结构有关,完全可以不考虑程序的功能要求。A. 真 B. 假
5. ( )等价类划分方法将所有可能的输入数据划分成若干部分,然后从每一部分中选取少数有代表性的数据作为测试用例。A. 真 B. 假
6. 使用独立测试团队的最好理由是(A. 软件开发人员不需要做任何测试B. 测试人员在测试开始之前不参与项目C. 测试团队将更彻底地测试软件D. 开发人员与测试人员之间的争论会减少7. 类的行为应该基于( )进行测试。A. 数据流图 B. 用例图 C. 对象图 D. 状态图
8. 下面的( )说法是正确的。 (A) )。(C)
(D) C,D,E)
B) A) A) ((( (A. 恢复测试是以各种方式迫使软件失效从而检测软件是否能够继续执行的一种系统 测试。
B. 安全测试是检测系统中的保护机制是否可以保护系统免受非正常的攻击。 C. 压力测试是检测在极限环境中使用系统时施加在用户上的压力。
D. 功能测试是根据软件需求规格说明和测试需求列表,验证产品的功能实现是否符合需求规格。
E. 安装测试是保证应用程序能够被成功地安装。 [练习题]
1. 请说明验证和确认的区别。 参考答案:
验证(Verification)与确认(是检查当前阶段的产品(或制品)是否保持上一阶段的产品(或制品)需求,确认是检查最终产品是否满足客户需求。2. 软件测试包括哪些类型的测试?这些测试之间的区别是什么?参考答案:
软件测试包括单元测试、集成测试、系统测试和验收测试等。? 单元测试集中于每一个独立的模块;? 集成测试集中于模块的组装;? 系统测试确保整个系统与系统的功能需求和非功能需求保持一致;? 验收测试是用户根据验收标准(通常来自项目协议)的可用性、功能和性能测试。3. 单个组件经过代码审查和测试,其有效性已经得到了全面验证,请解释为什么仍然需要进行集成测试。 参考答案:
单个组件正常工作并不意味着所有组件集成在一起可以正常工作,会引起许多新问题,便发现与接口有关的各种错误。4. 请给出一个小例子说明穷举测试一个程序实际上是不可能的。参考答案:
假设一个程序P有输入量整数,按黑盒方法进行穷举测试,可采用的测试数据组的个数为试一组数据需要1毫秒,一年工作因此,即使是一个简单的程序,穷举测试也是不可能的。5. 请结合等价类方法给出getNumDaysInMonth参考答案:
月的等价类:① 31天的月份;②年的等价类:① 闰年;②输入参数 序号
测试用例描述 month year
期望输出
Validation)是贯穿软件生命周期的规范化评估方法,其中验证
X和Y及输出量Z,在字长为365× 24小时,完成所有测试需getNumDaysInMonth( 30天的月份;③ 非闰年 ,在开发环境或模拟真实环境中执行因为组件相互连接时接口 32位的计算机上运行。若232×232 5亿年。
int month, int year)方法的测试用例,其中 2月 以X、Y取 264。如果测 集成测试正是将通过单元测试的各个组件组装在一起进行综合测试,=方法根据给定的月份和年份返回该月份的总天数。1 2 3 4 5 6 7 8 9 10
一个月31天,非闰年 一个月31天,闰年 一个月30天,非闰年 一个月30天,闰年 2月,非闰年 2月,闰年 无效年份0 无效年份负数 无效月份0 无效月份13 7 7 6 6 2 2 6 2 0 13 1901 1904 1901 1904 1900 2000 0
-2000 1291 1315 31 31 30 30
28 29 无效 无效 无效 无效
6. 现在要对一个自动饮料售货机软件进行黑盒测试,该软件的规格说明如下: 一个自动售货机软件可以销售单价1元5角的盒装饮料。该售货机只接收1元和5角两种硬币,若投入1元5角硬币,按下“可乐”、“雪碧”或“红茶”按钮,则送出相应的饮料;若投入的硬币少于1出饮料的同时退还多余的硬币。请设计测试该软件的全部测试用例。参考答案: 输入参数 序号 投入硬币 饮料按钮 期望输出 1 无 可乐
显示错误信息 2 无 雪碧
显示错误信息 3 无 红茶
显示错误信息 4 5角 可乐
显示错误信息,并退5 5角 雪碧
显示错误信息,并退6 1元 红茶
显示错误信息,并退7
1元5角
5角,则显示错误信息并退出硬币;若投入的硬币多于 5角硬币 5角硬币 1元硬币 1元5角,则送元