這是一篇軟工課程做業博客html
項目 | 內容 |
---|---|
這個做業屬於哪一個課程 | 北航2020春軟件工程 006班(羅傑、任健 週五) |
這個做業的要求在哪裏 | 我的博客做業-軟件案例分析 |
我的課程目標 | 系統地學習軟件工程理論知識與實踐方案 |
這個做業在哪一個具體方面幫助我實現目標 | 學習如何分析一款軟件的功能需求與用戶羣像 |
在上一篇博客中我簡單介紹了OCR Form Tools及其本地部署,這篇博客則將進一步評測整個軟件。前端
本工具的數據存儲基於Azure存儲服務,下文使用的均爲開發老師提供的測試倉庫,內含5份訓練用表單pdf文件。同時本地有一份相同格式的表單pdf文件,做爲測試數據用。vue
運行後看到初始界面。react
能夠看到總體界面設計走的是微軟在10年後一向的扁平風,dark theme的配色讓人一會兒聯想起其王牌產品vs和vsc。點擊New Project嘗試新建一個表單識別項目:ios
這個表單的各類verify都是齊全的,placeholder和鍵入提示也很是清晰。web
注意到這裏須要添加一個新的Connection才能與Azure存儲服務創建關聯。界面中很貼心地提供了「Add Connection」按鈕,也能夠直接點擊界面左側的小插銷圖標進入Connection管理頁面並完成添加。算法
完畢後回到剛纔的新建項目表單。繼續完成其他的信息填寫並建立新的表單識別項目vuex
進入編輯器,看到待標註的pdf預覽頁面。docker
爲了訓練識別模型,咱們須要把待標註的表單中,咱們感興趣的信息(如姓名、地址、電郵)標註出來,做爲不一樣的特徵以備模型使用。爲了區分這些信息,咱們要將其標上不一樣的tagjson
首先添加名爲Name的tag並將它的類型設爲string
點選pdf文檔中的名字字段John Singer,看到選框變色後按下提示的標註鍵「1」,看到名字被紅框框選並出如今右側Name tag下,標註成功。
依次添加Email、Zipcode、ExpDate、Amount幾個tag,併爲其指定string、integer、date、number類型,來測試不一樣類型tags的標註;在所有五份pdf上完成上述tags的標註
能夠看到已標註的文件會有一個小圖標標記。
標註用的pdf閱讀器支持滾輪縮放與拖拽移動,因爲作了ocr預處理因此文本點選十分便利,按提示鍵入數字標註,鍵入delete刪除,鍵鼠配合下能夠迅速完成標註。五份文件的五種tags標註我在十分鐘內所有完成,效率至關高。
標註完成後點擊左側train按鈕進入訓練頁面
點擊右側的train訓練一個新模型,完成後返回了模型信息和各tag的預測準確率
訓練獲得模型後點選左側predict頁面,嘗試使用剛剛訓練的模型預測一份新的pdf。Browse選擇文件後在左側預覽,而後點擊predict開始預測
完成後返回結果和置信度
能夠看到各個tags都被正確框選了。因爲這個pdf並無出如今訓練集裏,所以說明模型訓練很成功。注意到還能夠下載json格式的預測結果(原文太長,這裏截取其中一段):
"fields":{"Email":{"type":"string","valueString":"jaimeg@outlook.com","text":"jaimeg@outlook.com","page":1,"boundingBox":[2.045,6.0200000000000005,3.345,6.0200000000000005,3.345,6.15,2.045,6.15],"confidence":0.99,"elements":["#/analyzeResult/readResults/0/lines/25/words/0"],"fieldName":"Email","displayOrder":1},"Zipcode":{"type":"integer","valueInteger":5001,"text":"05001","page":1,"boundingBox":[7.2250000000000005,6.55,7.58,6.55,7.58,6.655,7.2250000000000005,6.655],"confidence":0.999,"elements":["#/analyzeResult/readResults/0/lines/33/words/0"],"fieldName":"Zipcode","displayOrder":2},"Amount":{"type":"number","text":"45.00","page":1,"boundingBox":[6.54,7.84,6.875,7.84,6.875,7.95,6.54,7.95],"confidence":1,"elements":["#/analyzeResult/readResults/0/lines/42/words/0"],"fieldName":"Amount","displayOrder":4},"ExpDate":{"type":"date","text":"10 / 21","page":1,"boundingBox":[4.49,7.88,4.92,7.88,4.92,8.01,4.49,8.01],"confidence":1,"elements":["#/analyzeResult/readResults/0/lines/38/words/0","#/analyzeResult/readResults/0/lines/39/words/0","#/analyzeResult/readResults/0/lines/40/words/0"],"fieldName":"ExpDate","displayOrder":3},"Name":{"type":"string","valueString":"Jaime Gonzales","text":"Jaime Gonzales","page":1,"boundingBox":[2.365,5.74,3.35,5.74,3.35,5.845,2.365,5.845],"confidence":0.97,"elements":["#/analyzeResult/readResults/0/lines/15/words/0","#/analyzeResult/readResults/0/lines/15/words/1"],"fieldName":"Name","displayOrder":0}}}],"errors":[]}}
自此這個項目的主體功能被咱們串通了:首先將pdf訓練集上傳到azure storage blob,鏈接並建立項目後藉助該工具對其進行標註,而後訓練模型,便可獲得一個識別該格式表單的模型。此後,將須要識別的新表單輸入訓練好的模型,便可導出格式化後的表單數據。
總的來講我很喜歡這個工具,我認爲它能夠大幅改進目前表單處理須要大量人力的境況。具體來講,我認爲優勢有:
雖然整個工具體驗過程很順滑,但我的認爲依舊存在一些小問題:
因爲課程做業要求尋找軟件Bug,我在不一樣運行環境與瀏覽器下對軟件進行了黑箱測試,發現以下問題:
首先在Docker Toolbox虛擬環境下以docker運行時,鏈接遠程倉庫會失敗。報錯信息難以被用戶理解,所以這應該是開發者意料以外的未處理異常:
因爲官方提供的docker鏡像已爲release版構建,沒有提供足夠的調試信息,同時考慮windows下模擬Docker Toolbox的網絡環境進行復現較爲複雜,所以這裏沒有進一步嘗試定位錯誤緣由,僅做出錯誤報告。
另外一個問題有關標註。在標註測試文件中的小數數據時,會發生一次點擊後單條數據被重複標註的狀況:
上圖分別爲點選測試文件CCAuth-1.pdf
和CCAuth-2.pdf
中amount字段並標註的結果,能夠發現小數都被錯誤地選擇了兩次。分析緣由多是由於pdf文檔中處理小數元素分了父子兩級,而兩級都被ocr單獨識別爲一個詞塊,而二者的碰撞框重合了,所以發生複選。針對這個問題,或許能夠考慮,當所選兩個詞塊的範圍出現重合或包含時,進行一些判斷與處理。
須要指出,這些都不是多麼嚴重的問題——前者是在極端運行環境下才會出現的偶發錯誤,相對軟件的目標羣體及使用場景而言徹底在可接受範圍內;後者則是標註時的一些小几率出現的功能缺陷,也沒有顯著下降使用體驗。
實際上,必須認可這款工具的軟件質量是很高的。我在Chrome、Firefox、Edge等多款主流瀏覽器上進行了大量黑箱測試,均沒有發現明顯的功能或顯示錯誤。
在完整運行一遍後,我對這個項目的功能已經有了大體認識。個人理解是,這是一個爲後端表單識別算法設計的表單標註工具,提供了很是高效易用的格式化表單文件標註功能,藉助其能夠快速構建訓練集;同時其也簡化了後續工做,能夠當即訓練、使用給定訓練集上訓練的識別模型。
我認爲這個工具解決的痛點有:
我理解目前這個項目暫定的用戶羣體是:
同時我認爲這個工具備潛力解決的痛點爲:
所以,我認爲這個項目將來的潛在用戶是:
爲了迎合潛在用戶,我認爲這個工具還須要完成的功能包括:
Q: 使用此服務的全部功能,估計這個軟件/網站/服務作到這個程度大約須要多少時間(團隊人數6人左右,計算機大學畢業生,並有專業UI支持)。(必答)
這個項目是一個前端項目,基於react開發。咱們合理假設,6人學生團隊中,至少2人熟練掌握vuejs或reactjs前端開發,剩餘四人的專業水平與代碼能力知足畢業要求,所以這個團隊不須要過多的學習開銷,開箱即食。總體規劃採用雙線開發模式:
package.json
能夠看到,OCR Form Tools基於pdfjs實現相關功能。考慮到文檔查閱、調整佈局等開銷,pdf預覽工做能夠由一到三我的在一個sprint內初步完成。能夠看到,開發採用自底向上的順序,前4個sprint中預期完成8個feature的實現,分爲兩組:
分組 | sprint1 | sprint2 | sprint3 | sprint 4 |
---|---|---|---|---|
第一組:核心功能線 | 【feat1】 | 【feat2】 | 【feat4】【feat5】 | (【feat5】)【feat7】 |
第二組:基礎設施線 | 【feat3】 | 【feat3】 | 【feat6】 | 【feat8】 |
後兩個sprint須要團隊總體協做完成各組件間的銜接並釋出測試版本、迭代直至產品正式發佈。
照這樣組織來計算,這個團隊開發須要大概12周的時間,其中到第10周的時候應該已經完成大部分開發工做,只剩細節潤飾。
分析這個軟件目前的優劣(和相似軟件相比),這個產品的質量在同類產品中估計名列第幾?(必答)
實際上這個軟件在我看來十分新穎,我暫時沒有接觸使用過相似軟件,所以還在進一步調研,若是想法更新將在這裏修改。
須要再次強調的是,這個軟件自己的質量很高,有理由相信即便存在同類軟件,也難以覆蓋該項目帶來的完整用戶體驗
從各方面的問題,推理出這個軟件團隊在軟件工程方面能夠提升的一個重要方面(具體建議)。
參考上文對潛在客戶的分析。我認爲這個項目還有進一步演化並解決痛點需求的巨大空間。
另外一方面,我未在這個項目下找到單元測試與e2e測試的相關代碼,可是提供了完善的ci配置(參考其azure-pipelines.yml
),所以我認爲就保證後續迭代質量而言,一些基本的測試工做能夠整合入ci
你在第一部分發現的bug,爲什麼軟件團隊不能在發佈前修復?他們是不知道,仍是有意不修復?你以爲是什麼緣由?能夠從下面的可能性中選取幾個
對於Docker Toolbox下的問題,Docker Toolbox做爲已通過時的windows下docker解決方案,市場佔有率過於小,且並不屬於前端開發時須要考慮的典型運行環境,所以極可能軟件團隊根本無心在此環境下測試並修復問題——這是合理的,不然將會引來額外開發成本但收效甚微。
對於小數標記重合的問題,因爲e2e測試等自動化手段很難覆蓋這種與輸入軟件的文件內容相關的問題,所以只能依靠手動測試的方式被發現——這種方式很難保證覆蓋率,於是軟件團隊可能碰巧因爲測試用文件均沒有相關問題、人工檢查未能覆蓋等緣由沒有發現這個bug。即便已經發現bug,因爲pdf預覽等相關組件的開發依賴第三方庫,不排除這個錯誤由第三方庫引入——若是確實如此,修復這個bug將十分困難。所以我猜想,既有可能開發團隊沒有發現這個bug,也有可能開發團隊發現了這個bug,但因爲修復性價比過低從而暫時將其擱置。