WordCount优化

Posted chaindreamjet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WordCount优化相关的知识,希望对你有一定的参考价值。

1.Github地址

https://github.com/chaosrings/wcPro

2.PSP表格

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 20

 20

· Estimate

· 估计这个任务需要多少时间

 20

 20

Development

开发

 380

 470

· Analysis

· 需求分析 (包括学习新技术)

 20

 30

· Design Spec

· 生成设计文档

 0

 0

· Design Review

· 设计复审 (和同事审核设计文档)

 0

 0

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

 30

 30

· Design

· 具体设计

 30

 60

· Coding

· 具体编码

 60

 90

· Code Review

· 代码复审

 60

 60

· Test

· 测试(自我测试,修改代码,提交修改)

 180

 200

Reporting

报告

 100

 90

· Test Report

· 测试报告

 60

 60

· Size Measurement

· 计算工作量

 10

 10

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 30

 20

 

合计

 500

 580

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.接口实现

我负责输入控制模块的实现。

设计了一个Scanner类,提供以下接口:

无参构造函数和析构函数:

Scanner()
{
}

~Scanner()
{
}

 

主要接口:getString()方法

输入参数是txt文件路径的字符串,返回该文件的内容的字符串。

需求要求只处理txt文件,而不处理其他文件,所以做一个判断即可。

如果是txt文件则返回该文件内容的字符串,否则输出提示语,然后返回空字符串。

string getString(const string &path)
{
	if (path.substr(path.length() - 4, 4) == ".txt")
	{
		ifstream in(path);
		stringstream buffer;
		buffer << in.rdbuf();
		string content(buffer.str());
		return content;
	}
	else
	{
		cout << This is not a ".txg" file !";
	}
	return "";
}

  

4.测试用例设计

只需要测试getString()方法

 

白盒测试:

程序结构简单,只有一个结点,只需设计两个测试用例即可全部覆盖。

测试用例 预期输出 实际输出
test.txt 成功读取出文件内容的字符串 成功读取
test.c 输出“This is not a ".txt" file !”且返回空字符串 输出“This is not a ".txt" file !”且返回空字符串

 

 

 

 

黑盒测试:

需求中要求只处理txt文件,我们根据需求等方面来设计黑盒测试。

 

如果只分为txt文件和非txt文件,等价类太少实在设计不出20个测试用例。

我们稍微细分一下

 

  工作路径 其他路径
存在的txt文件 等价类1 等价类2
存在的非txt文件 等价类3 等价类4
不存在的txt文件 等价类5 等价类6
不存在的非txt文件 等价类7 等价类8

 

 

 

 

 

比如我们测试txt文件与数个非txt文件,它们只有文件格式不同,文件内容全部相同。

测试用例 预期输出 实际输出
blacktest.txt 成功读取出文件内容的字符串 成功读取
blacktest.c 输出“This is not a ".txt" file !”且返回空字符串 输出“This is not a ".txt" file !”且返回空字符串
blacktest.doc 输出“This is not a ".txt" file !”且返回空字符串 输出“This is not a ".txt" file !”且返回空字符串

 

 

 

 

我们测试其他路径下的文件

测试用例 预期输出 实际输出
D:\\blacktest.txt 成功读取出文件内容的字符串 成功读取
D:\\blacktest.c 输出“This is not a ".txt" file !”且返回空字符串 输出“This is not a ".txt" file !”且返回空字符串
D:\\blacktest.doc 输出“This is not a ".txt" file !”且返回空字符串 输出“This is not a ".txt" file !”且返回空字符串

 

 

 

 

我们测试不存在的文件

测试用例 预期输出 实际输出
notexist.txt 成功读取出文件内容的字符串 成功读取(虽然是空串)
notexist.c 输出“This is not a ".txt" file !”且返回空字符串 输出“This is not a ".txt" file !”且返回空字符串
notexist.doc 输出“This is not a ".txt" file !”且返回空字符串 输出“This is not a ".txt" file !”且返回空字符串

 

 

 

 

我们测试在其他路径下不存在的文件

 

测试用例 预期输出 实际输出
D:\\notexist.txt 成功读取出文件内容的字符串 成功读取(虽然是空串)
D:\\notexist.c 输出“This is not a ".txt" file !”且返回空字符串 输出“This is not a ".txt" file !”且返回空字符串
D:\\notexist.doc 输出“This is not a ".txt" file !”且返回空字符串 输出“This is not a ".txt" file !”且返回空字符串

 

 

 

 

(就算写了很多感觉不必要的测试用例也不知道怎么凑起20个测试用例了)

 

5.单元测试脚本

 白盒测试:

TEST_CLASS(ScannerWhiteBoxTest)
{
private:
	Scanner * scannerTest;
public:
	TEST_METHOD_INITIALIZE(setUp)
	{
		scannerTest = new Scanner();
	}
	TEST_METHOD_CLEANUP(tearDown)
	{
		delete scannerTest;
	}
	TEST_METHOD(TestGetString)
	{
		Assert::AreEqual<string>("For the witcher,Heartless cold.", scannerTest->getString("test.txt"), L".txt fail");

		Assert::AreEqual<string>("", scannerTest->getString("test.c"), L".c fail");
	}
};

 黑盒测试:

TEST_CLASS(ScannerBlackBoxTest)
{
private:
	Scanner * scannerTest;
public:
	TEST_METHOD_INITIALIZE(setUp)
	{
		scannerTest = new Scanner();
	}
	TEST_METHOD_CLEANUP(tearDown)
	{
		delete scannerTest;
	}
	TEST_METHOD(TestGetString)
	{
		Assert::AreEqual<string>("For the witcher,Heartless cold.", scannerTest->getString("blacktest.txt"), L".txt fail");

		Assert::AreEqual<string>("", scannerTest->getString("blacktest.c"), L".c fail");

		Assert::AreEqual<string>("", scannerTest->getString("blacktest.doc"), L".doc fail");

		Assert::AreEqual<string>("For the witcher,Heartless cold.", scannerTest->getString("D:\\\\blacktest.txt"), L".txt fail");

		Assert::AreEqual<string>("", scannerTest->getString("D:\\\\blacktest.c"), L".c fail");

		Assert::AreEqual<string>("", scannerTest->getString("D:\\\\blacktest.doc"), L".doc fail");

		Assert::AreEqual<string>("", scannerTest->getString("notexist.txt"), L".txt fail");

		Assert::AreEqual<string>("", scannerTest->getString("notexist.c"), L".c fail");

		Assert::AreEqual<string>("", scannerTest->getString("notexist.doc"), L".doc fail");

		Assert::AreEqual<string>("", scannerTest->getString("D:\\\\notexist.txt"), L".txt fail");

		Assert::AreEqual<string>("", scannerTest->getString("D:\\\\notexist.c"), L".c fail");

		Assert::AreEqual<string>("", scannerTest->getString("D:\\\\notexist.doc"), L".doc fail");
	}
};

  

运行结果:

技术分享图片

 


以上是关于WordCount优化的主要内容,如果未能解决你的问题,请参考以下文章

spark 例子wordcount topk

第四周作业WordCount优化

WordCount 优化版测试小程序实现

第4周小组作业:WordCount优化

第4周小组作业:WordCount优化

WordCount优化