1、作業概述

這個作業屬于哪個課程 軟件工程-計科21級12班-計算機學院-廣東工業大學
這個作業要求在哪里 團隊作業6——復審與事后分析-計科21級12班
這個作業的目標 事后諸葛亮分析報告

作業gitee鏈接

2、成員信息

姓名 學號 身份 博客園主頁
李夢承 3121004702 隊長 yeaihe
劉師華 3221004766 隊員 shzhlh
譚茵 3221004812 隊員 TanYinn
詹慧丹 3221004855 隊員 muggle1116
陳鑫杰 3121004688 隊員 heart-knot
甘盛培 3121004692 隊員 G03P
江卓穎 3121004699 隊員 jiangzhuoying

3、擬作的團隊項目描述:基于知識圖譜的醫療問答機器人


4、事后諸葛亮分析報告

一、設想和目標
1、我們的軟件要解決什么問題?是否定義得很清楚?是否對典型用戶和典型場景有清晰的描述?

解決不同用戶人群對醫療問題的咨詢。定義清楚。對典型用戶和典型場景的清晰描述如下:

面向學齡兒童,由于人口老齡化趨勢導致年輕人的壓力增大,越來越多的年輕人選擇外出打拼,將孩子交給祖輩看護,但是祖輩的科學知識并不充裕,存在很多封建土方,比如孩子發燒通過厚被悶汗出熱治病,但是這其實沒有任何正效應,甚至可能導致加重發燒,需要一個準確的醫療診斷機器人,避免因誤判或過晚發現身體上的異常,容易造成不可估量的無法挽回后果

面向青年群體,青年身體有異常習慣通過挺兩天嘗試自愈,但是并非每種情況都可以靠身體自愈,而且為了方便,通常選擇網絡查病,但例如百度,經常隨便一問都是癌癥征兆或者晚期,不僅沒實際效果,而且會導致心理焦慮,需要一個即時的醫療咨詢機器人,及時保障自身健康

面對中老年群體,他們的記憶力下降,容易忘記藥物的服用時間和劑量頻率,需要一個便捷的醫療問答機器人,防止影響治療效果

2、我們達到目標了么(原計劃的功能做到了幾個?按照原計劃交付時間交付了么?原計劃達到的用戶數量達到了么?)

達到目標了。原計劃的功能有實體識別、關系抽取、數據導入、實體規范化、意圖識別、對話機器人、多輪對話,均實現了。按原計劃交付時間交付了。為了進一步提高用戶的使用體驗,我們推出的是微信端,即通過添加我們的機器人微信號,直接聊天咨詢,因為推廣效果不佳,僅達到預期的第一階段用戶數量(25)

3、和上一個階段相比,團隊軟件工程的質量提高了么?在什么地方有提高,具體提高了多少,如何衡量的?

提高了,我們進一步優化了模型代碼,找了更多的數據集進行訓練,讓機器人識別用戶的輸入識別得更加精準,提高了大約12%,衡量方法為觀察優化前后同樣輸入識別正確的頻率。

4、用戶量,用戶對重要功能的接受程度和我們事先的預想一致么?我們離目標更近了么?

用戶對功能的接受程度與我們事先的預想存在較小的差別,主要在于不同人群用戶使用我們項目的目的與我們的預期不同,呈現混合情況,即不同人群詢問內容差別不大。因為得出了真實的使用情況,所以我們得到了優化進步的機會,離目標更近了

5、有什么經驗教訓?如果歷史重來一遍,我們會做什么改進?

如果重來一遍,提前加設一次調研,充分調查用戶如果使用我們的項目,會是什么目的,確保主要思路不偏

二、計劃
1、是否有充足的時間來做計劃?

有,每周制定計劃的時間均為周一早晨,早晨時間充足,且思考較為理性

2、團隊在計劃階段是如何解決同事們對于計劃的不同意見的?

通過投票表決,少數服從多數,但可以提出強烈建議,讓計劃進行重新討論

3、你原計劃的工作是否最后都做完了?如果有沒做完的,為什么?

原計劃的工作絕大部分都已實現,實現了機器人的version1本地端和version2微信端,但還有version3網頁端正在進行最后的調試,因為涉及到項目過大,需要服務器具有更多的運行內存,正常租借的阿里云服務器只有2G運行內容,這是不夠用的

4、有沒有發現你做了一些事后看來沒必要或沒多大價值的事?

有,比如我會因為強迫癥,反復修改自己編寫的代碼,包括代碼里面的warning,但這些warning并不會對程序產生任何影響

5、是否每一項任務都有清楚定義和衡量的交付件?

有,項目的任務細分為每個模塊和每個version,模塊從選擇、數據集、訓練、優化、測試多個方面,都有具體的計劃和分配,所以每次交付都是確保質量的交付

6、是否項目的整個過程都按照計劃進行,項目出了什么意外?有什么風險是當時沒有估計到的,為什么沒有估計到?

項目的絕大部分過程都是按照計劃進行,出現的意外為項目過大,服務器運行內存不夠用,容易導致出現服務器卡死的風險,這個風險就是沒有估計到的,因為上傳服務器之前,運行測試都是在我的筆記本上進行的,而我買的是游戲本,所以配置完全足夠運行項目,因此忽略了服務器的承受能力

7、在計劃中有沒有留下緩沖區,緩沖區有作用么?

計劃中的緩沖區均設置在周末,因為周一至周五需要上課,項目推進受到一定的影響,所以緩沖區可以用來緩和成員的壓力,確保項目開發有條不紊的進行

8、將來的計劃會做什么修改?(例如:緩沖區的定義,加班)

將來的計劃會在任務的時間設定上做修改,因為已經進入了考試月,所以需要設置更多的換沖區,但是如果越過緩沖區還是沒完成任務,就需要在深夜進行加班

9、我們學到了什么?如果歷史重來一遍,我們會做什么改進?

如果重來一遍,應該拋開個人不良習慣,杜絕強迫癥,還因重新討論前端界面的開發,因為團隊中只有一名前端開發成員,團隊應該再多招一位前端開發人員

三、資源
1、我們有足夠的資源來完成各項任務么?

有,雖然過程中單個2G服務器不夠使用,但我們后面再加了另外一個2G的服務器,最終項目可以上線

2、各項任務所需的時間和其他資源是如何估計的,精度如何?

所需時間的估計都是根據任務的具體難度設定的,且參照當天課內作業的數量做微調。其他資源主要為硬件資源和數據資源,硬件資源充足,數據資源靠各搜索引擎獲取,精度均達一定程度,時間上確保了在原計劃時間完成,其他資源上確保了項目的可信度和響應速度

3、測試的時間,人力和軟件/硬件資源是否足夠?對于那些不需要編程的資源(美工設計/文案)是否低估難度?

人力資源足夠,因為我們團隊有5位成員,測試的時候都是一起測試,而測試所用軟件/硬件資源都是成員及成員周圍人的電子設備,因為做客戶端使用,所以資源充足。

對于那些不需要編程的資源確實有點低估難度,美工設計方面因為都是學習網絡上的優秀范例,沒有什么大問題,主要是文案(即博客撰寫),為了做到盡最大程度描述清楚本團隊的工作,所以都是投入了大量精力

4、你有沒有感到你做的事情可以讓別人來做(更有效率)?

其實還是有的,比如模塊的測試,我本身主要是開發人員,所以測試的時候容易思想偏向于我編程時的想法,測試效果往往不佳,影響團隊的測試進度,這可以讓其他成員來做

5、有什么經驗教訓?如果歷史重來一遍,我們會做什么改進?

如果重來一遍,租用更大運行內存的服務器,確保項目部署的硬件需求得到滿足,并進一步提高回復的響應速度

四、變更管理
1、每個相關的員工都及時知道了變更的消息?

是的,每次變更管理都會在gitee上發布issue,并在微信群復述,確保每個相關成員都及時知道

2、我們采用了什么辦法決定“推遲”和“必須實現”的功能?

在需要變更的時候,臨時讓所有人做出決定,票決是否進行計劃變更

3、項目的出口條件(Exit Criteria – 什么叫“做好了”)有清晰的定義么?

有,我們定義,當項目通過設定的16個不同配置的設備(6臺筆記本+10臺手機)的測試,實現在0.5s內回復本地端咨詢,在1s內回復微信端咨詢,就認為該項目已經足夠好,可以發布

4、對于可能的變更是否能制定應急計劃?

能,因為前面所提,變更都是根據票決得出的,所以在等待票決結果的時間段就可以利用起來制定應急計劃

5、員工是否能夠有效地處理意料之外的工作請求?

大致上可以有效地處理,主要是掛在服務器上運行時,因為項目比較大,在運行程序的時候,因為運行內存不夠的時候,會自動關掉neo4j,這個時候只需要再跟服務器建立一個連接,再次開啟neo4j數據庫,程序就可以正常運行

6、我們學到了什么?如果重來一遍,我們會做什么改進?

任務和更改的及時通知是非常重要的,如果重來一遍,會提前確保任務不需要修改,避免臨時的加改對項目開發進度的拖延

五、設計/實現
1、設計工作在什么時候,由誰來完成的?是合適的時間,合適的人么?

設計工作在確認選題后的一周內就完成,參與人員為全團隊成員,之后的開發任務都是按照設計內容進行,后續沒有出現較大的矛盾,所以是合適的時間,合適的人

2、設計工作有沒有碰到模棱兩可的情況,團隊是如何解決的?

有,比如設計界面的時候,因為選擇困難癥,難以做出決定,我們會選擇票決和投骰子,因為團隊總共五名成員,所以每次都可以得出決策結果

3、團隊是否運用單元測試(unit test),測試驅動的開發(TDD)、UML,或者其他工具來幫助設計和實現?這些工具有效么?比較項目開始的UML文檔和現在的狀態有什么區別?這些區別如何產生的?是否要更新UML文檔?

運用了單元測試,在每個模塊開發完成之后,是用pycharm和VS studio進行單元測試,其他工具因為開發時間緊湊就沒有使用。UML文檔在一開始的設計工作就完成制定,因為設計工作前后持續了一周,且結合了全團隊成員的想法,所以在后期開發過程中沒有產生區別,沒有更新UML文檔

4、什么功能產生的Bug最多,為什么?在發布之后發現了什么重要的bug?為什么我們在設計/開發的時候沒有想到這些情況?

多輪對話功能產生的Bug最多,因為多輪對話需要調用多個模塊,實體識別,意圖識別,對話緩存,特別是在對話緩存模塊,因為是使用json文件進行緩存信息,且意圖識別模塊使用所需,存放緩存時還得確保是指定模板形式

在發布之后沒有發現重要的bug

5、代碼復審(Code Review)是如何進行的,是否嚴格執行了代碼規范?

代碼復審是團隊成員交換審核其他人寫的代碼,確保代碼的可讀性和易讀性,同時執行代碼規范

6、我們學到了什么?如果重來一遍,我們會做什么改進?

如果重來一遍,應該多督促成員線下一起編程,這樣討論問題的效率可以得到大幅提升,歧義想法也可以及時探討

六、測試/發布
1、團隊是否有一個測試計劃?為什么沒有?

有,每項測試,測試數據均為100條,30%為測試人員結合自身生活生成,40%為網絡收集,30%為交叉測試人員生成,例如實體識別模塊,測試數據為“我昨天晚上腸胃炎犯了,而且頭痛”,實體識別模塊識別出“腸胃炎”疾病實體和“頭痛”癥狀實體,意圖識別模塊測試數據“你是機器人嗎”,模塊識別出這句話的意圖是閑聊意圖范圍中的isrobot,多輪對話模塊測試數據“心臟病是什么”->“那怎么治療呢”,模塊識別出“那怎么治療呢”的意圖是醫療咨詢范圍中的詢問治療方法,但對應槽位并沒有填充信息,于是繼承上一句對話的槽位信息,即做到了多輪對話

2、是否進行了正式的驗收測試?

團隊決定將項目上線后用戶的使用記錄作為驗收測試,確保我們的項目確實達到我們的目標,且測試結果更具客觀性

3、團隊是否有測試工具來幫助測試?很多團隊用大量低效率的手動測試,請提出改進計劃:至少一個方面的測試要用自動化的測試工具,自動化的測試結果報告,比較測試結果的差異,等等。

團隊的測試并沒有使用測試工具,因為每個模塊都是單獨的程序文件,所以我們測試時候是將數據集存入csv文件,編寫python腳本讀取數據集文件,然后輸入到模塊程序文件,來獲得測試結果,這其實也算半自動化的測試工具

4、團隊是如何測量并跟蹤軟件的效能(Performance)的?壓力測試(Stress Test)呢?從軟件實際運行的結果來看,這些測試工作有用么?應該有哪些改進?

軟件的效能,主要從識別的準確度,回復的準確度以及回復的速度跟蹤測量。壓力測試使用jmeter進行測試,模擬大量用戶從終端同時登錄和同時與服務器發送消息,測試系統正常運行的極限。從結果看,這些測試工作的作用并不明顯,因為目前使用我們軟件的用戶量遠不及壓力測試的數量,應從實際出發,測試并加快響應速度,而不是一味的折磨服務器

5、在發布的過程中發現了哪些意外問題?

發布的過程中發現的問題主要在于原本的標識方法失效,該怎么標識用戶,最后查看服務器收到的請求,找出唯一標識,如微信端使用NickName進行標識

6、我們學到了什么?如果重來一遍,我們會做什么改進?

如果重來一遍,應該使用自動化的測試工具,而不是僅僅依靠測試腳本,因為測試腳本的編寫也是需要花費一定的時間,使用現成的測試工具可以更快的推進項目開發

七、團隊的角色,管理,合作
1、團隊的每個角色是如何確定的,是不是人盡其才?

團隊的角色初步由成員自身推薦,然后在開發的過程中,逐步細化項目所需的角色定位,最后票決產生,因為票決都是根據所有人的想法而來,而想法來自于開發過程中的觀察體會,所以做出的決定都是人盡其才

2、團隊成員之間有互相幫助么?

有,主要體現在模塊測試和模塊訓練的負責成員之間,以及前后端開發成員之間,出現問題時會在群里發問,然后成員之間幫助解答

3、當出現項目管理、合作方面的問題時,團隊成員如何解決問題?

當出現矛盾時,如前文所說,通過投票表決,少數服從多數,但可以提出強烈建議,讓計劃進行重新討論,確保最終得出的解決方法都是客觀最佳的

八、總結
1、你覺得團隊目前的狀態屬于CMM/CMMI中的哪個檔次?

處于CMMI中的等級四,定量管理級,因為團隊軟件開發過程可預測,開發過程得到測量和控制

2、你覺得團隊目前處于 萌芽/磨合/規范/創造 階段的哪一個階段?

團隊處于規范和創造之間,因為我們的項目創意已經確定和大致實現,成員之間關系也已經熟絡,之間相互幫助團結合作,共同推動項目開發,且各方面的想法均已統一,達到規范,正在向創造更多的內容而努力

3、你覺得團隊在這個里程碑相比前一個里程碑有什么改進?

我們比起前一個里程碑,實現了機器人version2微信端,讓我們的項目可以被開發成員外的人使用,且可以開始進行推廣,使用微信號作為項目的使用入口,受益于微信的受眾情程度,我們的項目推廣也更加方便,機器人version3網頁端目前正在進行最后的優化調整

4、你覺得目前最需要改進的一個方面是什么?

最需要改進的一個方面應該是,意圖識別的精確度,因為醫療咨詢能拿到的開源數據集實在是太少了,下一步應該與醫院達成合作,獲得醫院的數據集

5、對照敏捷開發的原則, 你覺得你們小組做得最好的是哪幾個原則? 請列出具體的事例

整個開發過程保持每1-2天線下開會一次,確保信息互換及時

成員之間有問題會相互探討,因為宿舍離得比較近,必要的時候會直接串宿舍

6、代碼管理的質量具體應該如何提高? 代碼復審和代碼規范的質量應該如何提高?

代碼編寫的規范要求每位成員都遵守,且保留一定的注釋,確保不同任務的成員之間不同任務的代碼可以看懂,增強代碼的易讀性

7、整個程序的架構如何具體提高? 如何通過重構等方法提高質量,如何衡量質量的提高?

架構需要對整個項目都有比較深入的理解,從算法模型,到前后端框架

每次完成issue和每日任務的時候,將新模塊加入到程序中,就重構一次,確保一日一重構

質量的提高可以從程序運行的代碼覆蓋率,以及用戶的使用體驗衡量

8、其它軟件工具的應用,應該如何提高?

先通過搜索網絡上別人關于軟件工具的使用指導,學會基本操作之后,自己上手進行實操

9、項目管理有哪些具體的提高?

通過發布issue和群通知,每天制定一定的任務目標,周末作為緩沖區,確保每一小階段的目標都可以完成,同時也確保開發過程中遇到的問題,可以及時得到解決

10、項目跟蹤用戶數據方面,計劃要提高什么地方?例如你們是如何知道每日/周活躍用戶等數據的?

由于項目需要記錄用戶的對話緩存信息,用于多輪對話進行槽位繼承,所以我們本身就需要跟蹤用戶數據,我們會將用戶的對話信息以json文件進行記錄,并在本地創建備份。通過將緩存文件夾中的文件進行最后修改時間排序,對應時間就是每日/周活躍用戶

11、項目文檔的質量如何提高?

用組長進行編寫,對應任務的負責成員輔助編寫,確保文檔的正確性

12、對于人的領導和管理, 有什么具體可以改進的地方?

還需要多招一個前端開發成員來分擔一定的開發任務,這樣也能推進項目更快的開發

5、會議照片

6、貢獻分

名字 角色 團隊貢獻分 可驗證的貢獻
李夢承 算法開發、架構 22 深度學習的模型開發訓練、對話機器人構建
劉師華 產品需求分析、撰寫文檔 21.5 制定計劃,進行需求分析,撰寫文檔、次要測試
譚茵 產品需求分析 21 產品設計與需求分析、次要測試
詹慧丹 測試 20 計劃和組織測試人員對產品進行測試
陳鑫杰 后端開發 19 java開發測試、測試
甘盛培 后端開發 18.5 后端緩存開發、測試
江卓穎 后端開發 18 后端管理開發、主要設計

7、改進建議總結

用戶調研:在未來的項目中,確保提前進行充分的用戶調研,以便更好地理解用戶需求和期望。這將有助于確保項目滿足用戶的實際需求。
自動化測試工具:考慮使用更多的自動化測試工具,以提高測試效率和準確性。這將有助于在不斷變化的項目中更快地發現潛在問題。
服務器資源規劃:為了避免服務器資源不足的問題,建議在項目開始時就考慮到服務器的容量需求,并在必要時增加服務器資源。這將確保項目在部署時不會受到硬件限制。
團隊協作和溝通: 你的團隊已經做得很好,繼續確保團隊成員之間的有效溝通和協作,以及任務的合理分配和追蹤。
前端開發人員:鑒于前端開發的重要性,確保團隊中有足夠的前端開發人員,以確保項目的前端開發進展順利。