FrequencyNumber作业

一、知识铺垫

1.TDD

  • 简介
    TDD是测试驱动开发(Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。
  • 原理
    在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。
  • 基本思路
    通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。
    步骤:
    FrequencyNumber作业_第1张图片

2.Git

这部分内容我很久之前单独简单写了一下。
可以看http://www.jianshu.com/p/00641507c1d2

3.Node.js

Node.js是一个Javascript运行环境(runtime)。实际上它是对Google V8引擎进行了封装。V8引 擎执行Javascript的速度非常快,性能非常好。Node.js对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好。
PS:这是百度出来的解释,个人理解就是说是个很好的运行环境,用来做前端开发的东东,但是感觉还是很抽象,可能跟知识存储太少有关,所以这部分就稍微提一下。
npm:
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:

  • 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
  • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
  • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

PS:这部分还是比较抽象,我是按照别人的步骤一步一步安装的
详见:
http://www.runoob.com/nodejs/nodejs-npm.html

4.Jasmine

Jasmine 是一个简易的JS单元测试框架。Jasmine 不依赖于任何浏览器、DOM、或者是任何 JavaScript 而存在。它适用于所有网站、Node.js 项目,或者是任何能够在 JavaScript 上面运行的程序。

使用jasmine测试Node项目的教程:
http://www.cnblogs.com/zhaoxiaoji/p/jasmine-node.html

这里有个单独的可以直接测试的框架 :Jasmine-standalone-2.5.2,是一个文件夹形式,打开后的文件目录是:


FrequencyNumber作业_第2张图片
  • /lib 文件夹下包含了测试框架的源码等文件。
  • /src 下包含了待测试的 JS 代码。里面包含两个文件 Song.js 和 Player.js
  • /spec 下则包含了对应的测试代码,PlayerSpec.js 和 SpecHelper.js
    详细介绍:
    http://www.cnblogs.com/zhaoxiaoji/p/jasmine_intro.html
    http://www.cnblogs.com/zhaoxiaoji/p/jasmine-node.html

二、FrequencyNumber

1、要求:

它可以帮我处理一段字符串信息,这段字符串信息是由英文单词组成,每两个单词之间有空格,处理结果也为一段字符串,这个字符串应该每行只显示一个单词和它的数量,并且按出现频率倒序排列

FrequencyNumber作业_第3张图片

2、 大致步骤

1、安装nodejs (我安装的Nodejs时,npm就一起安装了)

用这个安装程序按步骤安装就好了



然后得到一个文件夹

FrequencyNumber作业_第4张图片

2、使用npm全局安装Jasmine Module

在cmd命令框中输入

npm install -g jasmine

3、初始化框架(这是我自己理解的意思)

新建一个文件夹,在当前文件夹下依次输入命令:

npm init (这时文件夹中会出现一个package.json)
npm install express (这时文件夹中会出现一个node-modules文件夹)
jasmine init (这时文件夹中会出现一个spec文件夹)
jasmine examples(这时会出现一个lib)

完成后的文件夹:

FrequencyNumber作业_第5张图片
  • Player.js 用于编写核心代码
  • PlayerSpec.js用于编写是针对与Player.js编写的测试用例
  • 由于对javascript语言不熟悉,所以代码多数借鉴于他人。

4、编写代码

由于对javascript语言不熟悉,所以代码多数借鉴于他人。


main.js:
```javascript`
main.js(=Player.js)
function main(words) {
if(words!=='')
{
let wordArray=words.split(/\s+/)
let groupWords=group(wordArray)
sort (groupWords);
return groupWords.map((e)=>format(e.word,e.count)).join('\r\n')
}
return ''
}
var group=function(wordArray)
{
return wordArray.reduce((array,word)=>
{
let entry=array.find((e)=>e.word===word);
if(entry)
{
entry.count++
}
else
{
array.push({word:word,count:1})
}
return array
},[])
}
var sort =function(groupWords){
groupWords.sort((x,y)=>y.count-x.count)
};
var format=function(word,count)
{
return word+' '+count
}
module.exports = main

***
**PlayerSpec.js:**
```javascript
describe("Word Frequency", function() {
  var main = require('../../lib/jasmine_examples/main.js')


  it('returns empty string given empty string',function(){
    var result=main('')
    var expect_string=''
    expect(expect_string).toEqual(result)
  })

  it('returns string given one word',function()
  {
    var result=main('it')
    expect(result).toEqual('it 1')

  })

  it('returns string given two different words',function()
  {
    var result=main('it was')
    expect(result).toEqual('it 1\r\nwas 1')
  })

  it('returns string given duplicated different words',function()
  {
    var result=main('it it was')
    expect(result).toEqual('it 2\r\nwas 1')
  })

  it('returns string given duplicated different words need to be sorted',function()
  {
    var result=main('it was was')
    expect(result).toEqual('was 2\r\nit 1')
  })

  it('returns string given words splited by multiple spaces',function()
  {
    var result=main('it   was')
    expect(result).toEqual('it 1\r\nwas 1')
  })

  it('returns string given full words ',function()
  {
    var result=main('it was the age of wisdom it was the age of foolishness it')
    expect(result).toEqual('it 3\r\nwas 2\r\nthe 2\r\nage 2\r\nof 2\r\nwisdom 1\r\nfoolishness 1')
  })



})

测试结果

FrequencyNumber作业_第6张图片

5、使用Git提交

依次使用 :

  • git add -A
  • git commit
  • git push (提交到GitHub上)
    用git log看一个提交记录:

    GitHub地址
    https://github.com/XiangYanFei/TDD-exercise

三、心得体会(杂谈)

   四月份的时候其实就花了好多时间去看npm nodejs jasmine...这些,但进展不多,后来慢慢就没有理会这个作业,直到前天5.17到实验室教练说两天后必须交,然后在之前的基础上又花了不少的时间去弄懂这些的联系,终于我大概理解了他们之间的关系==。这段时间对于我来说真的很忙,于是教练让我列了一个时间表来看自己近三天的时间是怎么安排的,列完后我发现其实中间还是有时间可以挤出来,同时也让自己意识到了时间管理的重要性,要想高效率的完成一件事,就要合理分配时间,并且在这段时间中专注力只在眼前的事上。
   在学习npm nodejs jasmine这些的初期,我真的是很懵逼,只有靠百度,但是百度出来的东西是零零散散的,而且里面很多语言是我现阶段看不懂的(就又得百度),教练让我们用思维导图的模式去学习,我觉得这个再理清思路上是有用的。后面就慢慢看这些的教程,别人写的博啊,也就慢慢领会到,由于现在自己的知识储备不够,理解一些东西还是有一定难度,也只能明白个大概。
   通过这次学习我觉得更重要的是对自己学习能力的一个提升吧,以前的大部分问题一百度就能直接出来结果,这次就相当于“拼图”,得到的都是一小块一小块,得自己去找联系,然后再拼起来。
   其实还有其他的感悟,就先说这么多了    bye~

你可能感兴趣的:(FrequencyNumber作业)