結對第二次作業


結對第二次作業


這個作業屬於哪個課程 2021春軟件工程實踐 -W班 (福州大學)
這個作業要求在哪里 結對第二次作業——頂會熱詞統計的實現
結對學號 061800217、221801133
這個作業的目標 實現對已爬取的論文列表進行操作、分析已爬取到的論文信息,提取top10個熱門領域或熱門研究方向

目錄:

  1. Github倉庫地址

  2. PSP表格

  3. 雲服務器訪問鏈接

  4. 成品展示

  5. 結對討論過程

    1. 剛開始拿到題目時,我們的討論
    1. 遇到的問題及解決方案
    1. 為實現功能進行的資料查找
    1. 結對討論截圖
  1. 設計實現
    1. 實現過程
    1. 功能結構圖
  1. 代碼說明
    1. 關鍵代碼及解釋思路
  1. 結對感受及隊友評價
    1. 結對開發項目的心路歷程與收獲
    1. 評價結對隊友

一、 Github倉庫地址

Github倉庫地址
代碼規范

二、 PSP表格

PSP2.1 Personal Software Process Stages 預估耗時(分鍾) 實際耗時(分鍾)
Planning 計划 20 10
Estimate 估計任務需要時間 20 10
Development 開發 3900 4792
Requirement analysis 需求分析 30 35
Team discussion 討論 70 70
divide the work 分工 20 10
Database design 數據庫設計 30 27
Design of implementation mode 實現方式設計 30 50
Design Spec 生成設計文檔 30 60
Learning 為實現功能進行的學習 60 220
Design Review 設計復審 40 50
Coding 具體編碼 3300 3560
Code Review 代碼復審 100 180
Connection 連接 30 30
Code Review 部署 40 70
Testing 測試 120 430
Reporting 報告 180 215
Test Repor 測試報告 90 100
Person Repor 個人報告 30 50
Size Measurement 計算工作量 20 25
Postmortem & Prrocess Improvement Plan 事后總結&提出過程改進計划 40 40
合計 4100 5017
  • 最開始我們選擇PHP語言,但是后面覺得想做前后端分離,於是前端選擇了VUE框架,選擇nodejs做后端,這導致學習時間大大增加,不過也因此更深入學習了新的技術。
  • 因為選擇前后端分離的做法,因此數據傳輸是很重要的一欄。因為前端在測試數據傳輸的時候,試圖在使用post的時候直接進入網站查看傳輸的數據,但是由於網站默認get方式傳輸,接受不到前端的數據,然后前端就卡在這里,導致測試時間大大地增加。
  • 在后端測試傳輸的數據時,發現使用數組傳輸json數組出現了問題,並且因為query的異步機制,導致數據庫查找內容無法及時傳輸,因此對代碼進行了修改,代碼復審時間比預計的要長。

三、 雲服務器訪問鏈接

雲服務器訪問鏈接

可使用的用戶名和密碼
用戶:lisi
密碼:123456
服務器將會於4天后過期

代碼規范

四、 成品展示

1、游客界面,有三大頂會和系統功能的介紹

2、登錄界面

3、登錄出現用戶不存在,密碼錯誤情況

4、注冊界面

5、論文管理界面

6、論文界面分頁,鏈接,刪除

7、模糊查詢,在搜索框輸入想查詢的詞匯,將以名字和關鍵詞為查詢范圍查詢

6

8、論文分析界面,向用戶展現用戶論文列表的top10詞雲以及餅圖

9、點擊詞雲搜索該關鍵詞的相關論文

10、為用戶展現熱詞的走勢圖


五、 結對討論過程

1、剛開始拿到題目時,我們的過程


先使用HTML+CSS+Jacascript實現靜態頁面,暫定選擇PHP進行連接數據庫和處理數據

2、遇到的問題及解決方案


問題:(前端來找后端)我用POST拿不到數據啊,咋辦啊,我百度了好久,從post失敗發展到嘗試all了
解決過程:后端詢問一下發現,前端嘗試直接post數據,使用瀏覽器測試post,但是由於在瀏覽器輸入地址,回車默認是以get方式提交,因此測試一直不成功。后面后端使用postman,選擇post方式就可以看到傳輸的數據了。
解決方案:postman


問題:(前端又來找后端)是不是let和var定義的變量name里面存不了值,但是req.body可以正常取到傳輸過來的值耶。
解決過程:剛開始,后端以為是console.log()函數使用出了問題,或者是前端測試的時候 在接受到數據后因為某些操作更改了name里面的值。但后面看到完整代碼,發現是前端在編寫接受的數據時,后端傳輸的json數據中,數據名為“username”,但前端卻嘗試以req.body.name接收數據
解決方案:認真看后端編寫的數據傳輸圖


問題:使用qurey函數對數據庫進行增刪改查,無法將結果return
解決過程: 該函數是異步函數,會等待主函數執行完成后執行,因此使用return 無法返回結果,需要使用 promise或async/await函數才能輸出結果。
解決方案:使用promise或async、await等待qurey函數執行完成。


問題:但是當在初始化論文分析頁面的時候發現使用上述解決方案 ,無法return 結果,同時,用戶進行多次查詢,后端會報錯。
解決過程:發現是(也有猜測)是,原本設計在每次進行增刪改查的時候連接數據庫開始查詢,查詢結束之后關閉連接。初始化論文分析頁面需要進行多次查詢(去不同的表當中查找東西),因此在可能數據因為連接關閉而無法傳輸,同時在開啟一次數據庫連接中只能進行一次查詢。后面選用數據庫連接池,可以同時進行多次連接,每次連接結合后使用release釋放連接而不是結束連接.
解決方案:連接數據庫的方式更改為使用連接池。

問題:在部署服務器的時候nginx打開后,在網站上一直顯示出錯
解決過程:其實一開始部署服務器是跟着阿里的文檔、百度搜索出來的文檔去部署,基本不太懂輸入的內容是什么意思,突然發現nginx打開后,網頁顯示不了,就馬上去百度,根據查找到的內容去更改配置、查看網絡連接、殺死進程…… 后面問題還是沒有解決,但是對剛剛做了什么更改比較了解了,就問了一下舍友,結果她一看就知道是什么問題,是因為我只是重新加載nginx,但並沒有重啟,所以更改的配置文件沒有起作用,她指導我重啟一下就打開網站了!
解決方案:一位超厲害的舍友


問題:前端后期東西越寫越雜,在完工時突然搭好的頁面亂碼。
解決過程:百度,沒有方案。回看代碼,發現在定義vue的style時,刪去scoped,導致該頁面樣式覆蓋至全局。
解決方案:加上scoped,好好聽老師講課,不該刪的不要碰。


問題:在論文分析板塊,點擊關鍵詞搜索相關論文,但由於表格在事件前已經渲染好,無法將數據添加至表格中。
解決過程:單獨編寫表格,與點擊事件,排除后端未拿到數據及數據解析錯誤的原因。只能將原因歸結於界面結構復雜,mounted事件過雜。
解決方案:將搜索的關鍵詞通過url傳送,再用created拿到關鍵詞,get傳送給后端,獲取數據。因為界面結構簡單,加載運行很快。


3、為實現功能進行的資料查找


Express
Nodejs
Query函數
mysql連接池
Vue
Element-ui
vue+nodejs部署
nodejs環境部署

4、結對討論截圖

1、qq討論

2、共同編寫博客內容

3、線下討論

六、 設計實現

1、實現過程


1、實現方法選擇

前端選擇使用 VUE框架搭建靜態頁面,插入ElementUI制作圖標,后端選擇nodeJS,使用express 應用開發框架,數據庫選擇 mysql數據庫。

2、功能討論

模糊查詢功能:后端分析用戶輸入語句,依次查詢(模糊搜索截圖)

數據分析功能:后端讀取數據庫中的keyword內容並且存入Map數組,記錄keyword出現次數、來源會議和年份,存入新表,在每次加載頁面的時候返回。

分頁功能:前端傳入 page和pageSize,后端將其與數據庫查詢結果必將,返回結果行數小於pageSize的內容。

3、數據傳輸方式

2、功能結構圖


七、 代碼說明

1、關鍵代碼及解釋思路


  1. promise類的使用

為實現模糊搜索,后端接收到用戶的input后,以空格分割搜索數據,然后進行多次查詢,使用promise.then等待數據搜索完成后再使用request傳輸數據。

  1. 初始化論文列表並實現分頁顯示

為實現分頁,前端傳來page和pageSize說明頁數和將要展示的行數。在sql語句中使用‘limit‘’返回內容。

  1. 使用get方法傳入用戶輸入內容,刪除論文時論文id。

  1. 使用post方法傳輸大量數據,例如,在用戶登錄時,查詢並返回用戶論文列表。

  1. 使用post方法傳輸私密信息,例如,在登錄界面傳輸用戶登錄信息

  1. 使用express框架
    使用express路由請求、接受信息。使用app.listen()快捷方法監聽接口。

7、使用線程池,設計線程池最大連接數為500,在分析關鍵詞的時候可以快速將關鍵詞數據寫入數據庫

前端
1、路由器部署路徑

2、echarts和element-ui的全局部署

3、通過URL在兩個頁面傳遞參數

4、前端與后端之間通過使用axios進行數據傳遞

5、使用element-ui的抽屜型表格,同時使用scope插槽獲得點擊的當前表單行數,實現鏈接跳轉,刪除功能。

八、 結對感受及隊友評價

1、結對開發項目的心路歷程與收獲


珏:從一開始不知道從哪下手到現在完成結對作業,這個過程很漫長。一是時間上因為延遲提交,所以覺得時間很長,同時在這個作業中經歷了團隊github實戰,與之相比顯得更漫長。二是我們兩位同學技術有限,一開始的時候並沒有很確定怎么去寫,后面選擇的vue和nodejs並不是特別擅長,而且沒有部署服務器的經驗,所以我們先是學習了一段時間,然后一邊學習一寫,才慢慢理清思路要怎么實現,這個過程也感覺很漫長。結對的最大好處是兩個人會互相鼓勵,一起編程的時候也感覺更“熱鬧”。

思雨:開發過程其實很累,因為都是使用新技術,花了一半時間用在學習上,一半時間在開發項目上。整個過程最難在於前后端連接和部署,前后端完全分離的模式給我們帶來很大的麻煩,但是也因為前后端分離,所以開發可以並行。同時也明白寫代碼沒有什么捷徑可以走,前端控件大量使用element-ui,但是它的控件本事較難修改,也會有很多不兼容的問題,帶來的便利和瑪麻煩是對等的。語言有1它的好處,自然也有它的限制,這其中需要我去深入學習。

1、評價結對隊友


思雨=》珏:這次沒有幫上忙,項目最難的部署和復雜的后端都由隊友包辦了,有點羞愧。同樣是學習新的語言,隊友表現的比較踏實認真,吸收極快,我因為學習慢,有些慌張,希望能向對方學習。總之,彼此都辛苦了。

珏=》思雨:剛開始完全不知道要怎么開始寫,只能從會的html、css開始,是思雨提出來使用vue框架和nodejs做后端!她在學校vue方面很快,也能及時指出我在數據傳輸反面的問題,並且經常討論數據庫的設計。為了完成作業兩個人都熬了好多個夜,但同時都學習了新的內容,並運用上了新學習的知識。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM