軟件質量與測試第4周小組作業:WordCount優化
阿新 • • 發佈:2018-04-08
結果 eat run continue spec 過程改進 href 兼容 odin
軟件質量與測試第4周小組作業:WordCount優化
一、GitHub地址
https://github.com/fusidic/WC
二、PSP表格
PSP2.1 | PSP階段 | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 30 | 20 |
· Estimate | · 估計這個任務需要多少時間 | 30 | 20 |
Development | 開發 | 470 | 550 |
· Analysis | · 需求分析 (包括學習新技術) | 30 | 20 |
· Design Spec | · 生成設計文檔 | 20 | 20 |
· Design Review | · 設計復審 (和同事審核設計文檔) | 30 | 20 |
· Coding Standard | · 代碼規範 (為目前的開發制定合適的規範) | 30 | 30 |
· Design | · 具體設計 | 30 | 40 |
· Coding | · 具體編碼 | 180 | 240 |
· Code Review | · 代碼復審 | 30 | 30 |
· Test | · 測試(自我測試,修改代碼,提交修改) | 120 | 150 |
Reporting | 報告 | 90 | 90 |
· Test Report | · 測試報告 | 30 | 30 |
· Size Measurement | · 計算工作量 | 30 | 30 |
· Postmortem & Process Improvement Plan | · 事後總結, 並提出過程改進計劃 | 30 | 30 |
合計 | 590 | 660 |
三.模塊接口設計
處於任務分配的考量,我們小組將整個任務分成了輸入控制
內容讀取
分析核心
輸出控制
幾個功能模塊,同時在組長17002的建議下,我們采用了Kotlin來進行模塊的編寫,因為Kotlin簡潔,同時兼容Java,可以用Junit進行單元測試。
我負責的模塊,主要完成文件及參數讀取的功能,入口為ArgChecker類中的check函數
fun check(pindex: Int, pc: Int, msg: String): Boolean { if (pindex <= -1) return false if (pindex + 1 == pc) { throw IllegalArgumentException(msg) } return true }
checkOutputArg()檢驗輸入參數的合法性
fun checkOutputArg(oindex: Int, args: Array<String>): Boolean {
val ofname = args[oindex + 1]
if (Options.values().map { it.value }.contains(ofname)) {
throw IllegalArgumentException("invalid output file name")
}
return true
}
對於不同參數功能的調用則放在了主函數中
for (value in Options.values()) {
val index = args.indexOf(value.value)
if (index == -1) {
continue
}
when (value) {
Options.C -> {
checker.check(index, pc, "-c error")
cc = CharCounter().count(ifile)
}
Options.W -> {
checker.check(index, pc, "-w error")
wc = WordCounter().count(ifile)
}
Options.L -> {
checker.check(index, pc, "-l error")
lc = LineCounter().count(ifile)
}
else -> {
}
}
}
文件的字數統計則簡單的采用了Kotlin中的庫函數file.readText().length
四、設計測試用例與測試
對於CharCounter(),使用了Junit對其進行了單元測試,測試的文本是某網頁上的若幹段文字(位於類CounterTest中),通過文本軟件獲得了測試文本的字符數,然後編輯其測試程序
package test.com.dashmrl.wc.counter
import com.dashmrl.wc.counter.CharCounter
import org.junit.Test
import java.io.File
import kotlin.test.assertEquals
/**
* Author fusidic
* Time 10:25
* Date 2018/4/8
* Email [email protected]
*/
class CharCounterTest : CounterTest() {
private val results = arrayOf(
282,
83,
53,
57,
62,
127,
87,
157,
73,
38,
62,
46,
162,
100,
69,
65,
47,
35,
9,
139
)
@Test
fun count() {
inputs.forEach {
val c = CharCounter().count(createIntputFile(it, "input.txt"))
assertEquals(results[inputs.indexOf(it)],c,"not equals,exit!!")
}
}
}
測試得到所有結果都與標準相符。
而對於參數輸入的測試,因為參數的判斷寫在主函數中,在其他功能模塊都完成了的情況下,ArgChecker的測試采用了黑盒測試的方法,通過bat腳本對其進行了黑盒測試。
wcPro.exe
wcPro.exe -c
wcPro.exe -w
wcPro.exe -l
wcPro.exe input.txt
wcPro.exe -c input.txt
wcPro.exe -w input.txt
wcPro.exe -l -o result.txt input.txt
wcPro.exe -c -w -l -o result.txt input.txt
以下列舉某次測試的結果,對非法輸入給出了警告:
PS C:\Users\Arith\Desktop> .\wcPro.exe -w
java.lang.IllegalArgumentException: no enough args!!
at com.dashmrl.wc.WCKt.main(WC.kt:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:81)
at com.exe4j.runtime.WinLauncher.main(WinLauncher.java:94)
五、小組貢獻分
0.27
六、參考鏈接
http://www.cnblogs.com/ningjing-zhiyuan/p/8654132.html
鄒欣 代碼規範與代碼復審
軟件質量與測試第4周小組作業:WordCount優化