第二周作业 WordCount

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

GitHub

https://github.com/dashmrl/WC.git

解题思路

将不同的选项参数交由不同的函数处理。

空格、逗号和句号作为分隔符,连续空格视为一个空格。

支持的参数使用枚举类来定义,过滤掉不支持的参数。

程序设计实现

  • 参数枚举类

    enum class Options(val value: String) {
        C("-c"),// 字符数
        W("-w"),// 单词数
        L("-l"),// 行数
        O("-o")// 输出文件
    }
    
  • 参数检查函数

    fun checkArgs(pindex: Int, pc: Int, msg: String): Boolean {
        if (pindex <= -1) return false
        if (pindex + 1 == pc) {
            throw IllegalArgumentException(msg)
        }
    
        return true
    }
    
  • 单词统计函数

    fun calWordCount(ifile: File): Int {
        println("start calculating word count")
        return ifile.readLines().sumBy {
            it.split(
                    ' ', ',', '.',
                    ignoreCase = false,
                    limit = 0).filter { it.isNotEmpty() }.size
        }
    }
    
  • 输出结果函数

    fun outputResult(input: String, cc: Int, wc: Int, lc: Int, of: File) {
        val sb = StringBuilder(input)
        if (cc != -1) {
            sb.append(",").append(Options.C.value).append(":").append(cc)
        }
        if (wc != -1) {
            sb.append(",").append(Options.W.value).append(":").append(wc)
        }
        if (lc != -1) {
            sb.append(",").append(Options.L.value).append(":").append(lc)
        }
        if (of.exists() && of.isFile) {
            of.delete()
        }
    
        println("write the result to ${of.absolutePath}")
        of.writeText(sb.toString())
    }
    

测试 bat 脚本

WordCount.exe -c input.txt
WordCount.exe -w input.txt
WordCount.exe -l -o result.txt input.txt
WordCount.exe -c -w -l -o result.txt input.txt

总结

系统测试在测试中占比非常小的部分,收益远没有单元测试高。

jar 包打包成 exe 不论对于测试和作业,都显得非常多余,找打包软件花费至少半天时间。

posted on 2018-03-20 10:45  dashMrl  阅读(114)  评论(0编辑  收藏  举报

导航