第二周个人作业

软件质量测试wordCount说明

项目github地址wordCount

PSP表格

PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 90
· Estimate · 估计这个任务需要多少时间 90 90
Development 开发 10 10
· Analysis · 需求分析 (包括学习新技术) 10 10
· Design Spec · 生成设计文档 0 0
· Design Review · 设计复审 (和同事审核设计文档) 0 0
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 5 10
· Design · 具体设计 5 5
· Coding · 具体编码 10 10
· Code Review · 代码复审 10 10
· Test · 测试(自我测试,修改代码,提交修改) 60 60
Reporting 报告 50 60
· Test Report · 测试报告 50 90
· Size Measurement · 计算工作量 10 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 10 10
合计 350 500

//作业实在太多了吧

解题思路

拿到题目以后我不想用java因为不熟悉,想早点做完,因为还有很多场面试要准备。

于是用我熟悉的JavaScript来做,可惜了,最后nodejs的打包工具始终编译不成,所以我就直接给了node的命令行

这个程序本身是非常简单的,完全不用面向对象,也完全没有画流程图

使用说明

请安装node v8.0以上,安装node的方法在这里

将命令中所有的exe改成node,如下

//my.exe -c file.c改成

node -c file.c

程序设计实现

四个分步函数:

//计算行数
function countLines(data){
    var lines = data.split('\n');
    console.log(`${filename},'行数: '${lines.length} `);
}


//计算单词数
function countWords(data){
    var words = data.split(/\s/);
    // console.log(words);
    console.log(`${filename},'单词数: '${words.length} `);
    return words.length;
}

//计算字符数
function countLetters(data){
    var letters = data.split('');
    console.log(`${filename},字符数: ${letters.length} `);
    return letters.length;
}


//写文件
function writeData(data){
    var wd = new Promise((resolve,reject)=>{
        fs.writeFile(outname,data,function(err){
            if(err){
                console.log(err);
                reject(err);
            }else{
                resolve();
            }
        })
    })
    wd.then(()=>{
        console.log('data has been writen in '+outname);
    })
}

一个异步获取数据函数


function processFunc(fn){
    getData().then((data)=>{
        // console.log(data);
        // console.log(countLines(data));
        // console.log(countWords(data));
        // console.log(countLetters(data));
        // writeData(data);
        // console.log(fn(data));
        fn(data);
    }).catch(err=>{
        console.log(err);
    })
}

一个主函数

function main(){
    switch(choice){
        case '-c':
            processFunc(countLetters);
            break;
        case '-w':
            processFunc(countWords);
            break;
        case '-l':
            processFunc(countLetters);
            break;
        case '-o':
            processFunc(writeData);
            break;
    }
}

测试样例设计过程

测试原理

根据白盒测试原理:

白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、路径覆盖和程序变异。
白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。六种覆盖标准发现错误的能力呈由弱到强的变化:

  1. 语句覆盖每条语句至少执行一次。
  2. 判定覆盖每个判定的每个分支至少执行一次。
  3. 条件覆盖每个判定的每个条件应取到各种可能的值。
  4. 判定/条件覆盖同时满足判定覆盖条件覆盖。
  5. 条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
  6. 路径覆盖使程序中每一条可能的路径至少执行一次。

具体样例

test1.txt

仅设计一个单词

hello

test2.txt

设计一个单词加上一个空格和换行

hello  

test3.txt

设计一个单词一个空格和一个换行

hello  

test4.txt

设计多个单词多行

helo $
jkjk %
jkdkl

test5.js

换一种文件类型

var a = 'string';
b = a;

test6.cpp

换一种文件类型

int a = 10;
std::cout <<a<<std::cend;

test7.html

换一种文件类型

<div>test</div>
<script></script>

test8.css

换一种文件类型

.div{
    position:absolute;
}

test9.c

换一种数据类型

int a = 4;
print_s(a);

test10.xml

换一种数据类型

<json></json>

参考链接:没有参考

posted on 2018-03-19 18:48  陈默1996  阅读(179)  评论(4编辑  收藏  举报