第三周上机任务--1-1--找错与测试用例

本文详细记录了一次面向对象编程基础实验的目的、内容、测试用例设计与测试结果,包括程序错误分析与解决策略,旨在帮助理解面向对象程序的基本结构与测试方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验目的:1. 熟悉面向对象中的基本概念和术语
2. 掌握面向对象程序的基本结构
3. 学会定义并使用类和对象

4.设计比较完备的测试用例完成对小程序的测试
实验内容:(1)通过单步执行,观察其执行过程,并学会查看对象的取值;
(2)通过撞错,观察当程序发生错误时的各种表现.

* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br> * 作<wbr><wbr><wbr> 者:<wbr><wbr><wbr><wbr><wbr><wbr>雷恒鑫<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br> * 完成日期:<wbr><wbr><wbr><wbr><wbr><wbr><wbr>2012<wbr> 年<wbr><wbr><wbr><wbr><wbr>02<wbr> 月<wbr><wbr><wbr><wbr><wbr>03<wbr><wbr> 日<br> * 版 本号:<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><br> * 对任务及求解方法的描述部分<br> * 输入描述:1. 违反封装原则,直接给私有成员赋值、访问私有对象等;<br> 2.在实现对类成员函数时不指定作用域;<br> 3.调用 stud1.set_data()函数时,实参出现不当类型;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

* 问题描述:.......

* 程序输出:......

* 问题分析:……
* 算法设计:……

#include <iostream>
using namespace std;
class Student    
{
public:   
	void set_data(int n, char *p,char s);
	void display( );
private: 
	int num;
	char name[20];     
	char sex;     
};

void Student::set_data(int n, char *p,char s)
{
	num=n; 
	strcpy(name,p); 
	sex=s;
}
void Student::display( )     
{
	cout<<"num: "<<num<<endl;
	cout<<"name: " <<name<<endl; 
	cout<<"sex: " <<sex<<endl;   
} 
int main()
{
	Student stud1,stud2;      
	stud1.set_data(1,"He",'f');
	stud2.set_data(2,"She",'m');
	stud1.display();
	stud2.display();
	return 0;
}

正确的运行结果:


测试用例设计及测试结果:
(1) 遵循“判定/条件测试”覆盖原则(设计足够的测试用例,使得判定表达式的每个条件的所有可能取值至少出现一次,并使每个判定表达式所有可能的结果也至少出现一次),我设计了三组测试用例,测试方案及结果如下
A.违反封装原则,直接给私有成员赋值、访问私有对象

int main()
{
	Student stud1,stud2;
	num=1;
	name[20]="he";
	sex=f;
	stud1.set_data(1,"He",'f');
	stud2.set_data(2,"She",'m');
	stud1.display();
	stud2.display();
	return 0;
}


调试结果:6 error(s):1.error C2065: 'num' : undeclared identifier

2.error C2440: '=' : cannot convert from 'char [3]' to 'int'

(2)在实现对类成员函数时不指定作用域;

void set_data(int n, char *p,char s)
{
	num=n; 
	strcpy(name,p); 
	sex=s;
}
void display( )     
{
	cout<<"num: "<<num<<endl;
	cout<<"name: " <<name<<endl; 
	cout<<"sex: " <<sex<<endl;   
} 

调试结果:3 error(s):1.error C2065: 'num' : undeclared identifier
2.error C2065: 'name' : undeclared identifier
3.error C2065: 'sex' : undeclared identifier
(3)调用 stud1.set_data()函数时,实参出现不当类型

int main()
{
	Student stud1,stud2;      
	stud1.set_data(v,"He",'f');
	stud2.set_data(o,"She",'m');
	stud1.display();
	stud2.display();
	return 0;
}

调试结果:2 error(s):1.undeclared identifier
2.error C2065: 'o' : undeclared identifier

注意哟:
如果把“f”改为1,屏幕就会输出笑脸

int main()
{
	Student stud1,stud2;      
	stud1.set_data(1,"He",1);
	stud2.set_data(2,"She",2);
	stud1.display();
	stud2.display();
	return 0;
}


哈哈,好玩吧。
经验积累:
1. 程序的测试也是技术活,需要考虑各种可能的情况,设计用于测试的输入,将执行结果与预期的结果对比后才能得出结论。程序工作并不是能输出结果(不管对错)就视为完成。
2.
上机感言:
撞错和测试都是很有用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值