HNU創新課程結對程式設計專案總結
與我的搭檔陳春蕾在經歷了一整個國慶假期的努力後,我們終於合力完成了結對程式設計專案,現將複用個人專案的方法與本次開發過程的經驗與教訓總結如下:
首先,我們對專案需求進行了需求分析,很快發現,不論是個人專案的數學卷子自動生成系統,還是結對專案的小初高數學學習軟體,其核心功能都為生成數學題目,這是可以複用的一個核心模組,為我們在結對程式設計專案中節省了不少力氣。此處由於我的程式碼中演算法較為呆板,同時生成的題目不具有良好的隨機性,我們考慮使用搭檔的數學題生成模組程式碼,並在此基礎上增加結對程式設計需求中的計算題目得分與UI系統互動等其他功能。
此前我與搭檔都在個人專案中使用了c++語言,為了減少複用程式碼時的不必要勞動,我們決定繼續使用c++語言完成結對專案開發。但是,關於c++的圖形化開發工具Qt的使用,我們此前並沒有接觸過,因此,本次任務完成的難點基本在於如何用Qt實現使用者互動的功能,同時確保已完成的其他功能在Qt工具下的環境也中能正常運作。
由於我的電腦在安裝Qt環境的時候出了問題,無法執行專案,且開發期間我與搭檔身處異地,所以本次開發過程全程由搭檔擔任駕駛員,我擔任領航員,通過騰訊會議投屏進行實時溝通。
在開發過程中,我們遇到的第一個難題就是Qt的使用。在結對程式設計的雙方都不瞭解開發工具的情況下,我們的工作效率大打折扣,第一天的上半天進展不順。為了克服這一問題,我們選擇分工,由搭檔負責對Qt提供的示例程式進行研究,爭取儘快摸清各部分功能結構,我則負責在網際網路收集整理Qt開發專案的教程,將我們需要的部分提取出來,這基本就是第一天的全部工作內容。經過第一天工作的磨合,我們漸漸找到了節奏,同時對接下來的開發需求分條目進行梳理,列出工作計劃。
之後,我們依照工作計劃,從題目選擇介面開始進行設計。我們發現Qt可以直接對ui檔案進行圖形化設計,這大大加快了我們的介面設計速度,但同時,我們也迎接了第二個難題,即Qt中訊號槽的使用,這可以說是實現互動功能的核心問題。對於此,我們依舊遵循了此前的工作模式,比起直接研讀大段的說明性文字,我們發現研究他人成功執行的樣例程式碼更具效率。在成功搭建訊號槽連線後,我們接下來的任務就是按部就班地實現各模組任務。
在需求中,輸入不合法時,系統應當拒絕接收輸入。對於這一功能,我們起初依靠生活經驗,提出了在輸入不合法時輸出提示資訊的設計需求,但由於Qt工具使用不熟練,我們在實現這一功能時遇到了顯示不完整,且難以搜尋到解決方案的困難。最後由於時間短,開發任務重,我們選擇妥協,考慮用輸入框強制清空代替輸出提示資訊,這是專案開發過程中的一個遺憾。
關於數學題答案計算的功能,這部分我們的分工是由我負責學習使用堆疊的資料結構,編寫計算答案的演算法,搭檔負責將這部分程式碼與Qt中的出題模組與計算得分模組耦合到一起。在計算得分功能實現過程中,我們曾陷入瓶頸,也有意見不統一的時候,很大一部分原因還是工具使用不熟。由於搭檔在之前的實操中,對工具的掌握程度已有較大的程度的提升,因此歸功於她在工作時間外的努力,這一部分也圓滿完成了,感謝她的付出。
實現了大部分功能後,我們的最後一個難題是如何實現簡訊驗證碼功能。在陳春蕾負責完成編碼工作的同時,我也在持續搜尋著有c++介面的簡訊服務平臺,最後我們選擇了互億無線平臺。然而在實際使用中,我們發現該平臺提供的介面是Unix系統的,由於我們是在Windows系統下進行開發,因此還要對其進行相應的轉換。在研究該功能中,我們雖然一度陷入瓶頸,也想過就此放棄,但經過持續的學習與查詢資料,我們成功發出了自己的第一條驗證碼簡訊。這是我在開發過程中感到最為激動雀躍的時刻。
回顧結對專案的開發歷程,我們的經歷一波三折,現將主要困難列舉如下:
1、對於開發工具不熟悉。
2、缺少圖形化開發經驗,不熟悉相關機制。
3、原本在dev-c++實現的程式碼,可能與Qt環境不適應。
4、驗證碼與答案計算這類新增的核心功能開發困難大,耗時長。
5、由於我的電腦環境問題,搭檔承擔了全部駕駛員工作,個人任務重。
但在短短几天的開發中,我們也順利完成了任務,現將成功經驗總結如下:
1、在開發初期即進行需求分析,並對開發流程合理安排,時間雖然緊張但不影響整體進度。
2、雖然我們無法輪換職責,但這樣的優點在於,程式碼風格較為統一,在做好分工的情況下,個人可以專注自己的任務,減少了一些磨合的難度。
3、我們的時間分配較為合理,沒有出現前鬆後緊的狀況。
4、開發過程中雖然屢遭挫折,但我們心態平和,及時溝通,沒有因為情緒狀態影響到專案的完成。
最後,感謝我的搭檔陳春蕾,我們的合作非常順利且愉快。我在結對程式設計實踐中感受到了搭檔的重要性,希望我們都能在接下來的實踐任務中共同成長。