1. 程式人生 > >【結對編程】好,不愧是我們

【結對編程】好,不愧是我們

感到 美化 user 基本 姐姐 val 搭建 明顯 判斷

依依的感想寫在前面

“我們這門課沒有假期!”

花了整整一周的國慶假期,我們進行了一次完整的結對編程,算是真真切切體會到了老師這句話的真正奧義,不過不是為這門學科的作業和任務所累,而是設計和編程的過程中體會到的那種“根本停不下來!”。眼睛手術不久不能長時間看電腦,但我卻總是控制不了自己,整天看著電腦,被醫生說角膜太幹不聽話QAQ,隊友從早上起床就坐在電腦前一直坐到下午兩三點不吃不喝也渾然不覺,這這這……就是代碼的魅力?

在這次的結對編程項目中,隊友嘟嘟同學負責的是UI前端,11同學自己負責的是程序的後端,因為分工明確,所以在實施的過程中同步推進,效率比較高,在5號基本就完成了整個項目的設計編寫,然鵝,在測試的過程中發現了各種各樣的bug,持續對代碼進行完善,直到最後期限之前一點點,7號晚才完成了對已知bug的修復(不知道是不是還有很多bug嚶嚶嚶)。當然,結對的意義一定不僅僅是分別負責一個項目組中的某個部分,比如,11對嘟嘟的直男審美感到不ok,所以在他進行前端設計的時候,不斷督促他並提出建議,讓這個程序的界面能夠不斷美化,,而同學因為常常比較心大,代碼中經常出現很多小的錯誤而自己難以發現,這時候細心的嘟嘟同學總能幫助11找到小小的錯誤(例如:j寫成i種),在最後一天的最後一個bug修復的過程中,因為只差一個函數的編寫而時間又比較緊張,所以在寫好框架的情況下,將函數分為兩部分,11和嘟嘟分別寫了一半的函數,最終這個函數拼接起來就可以直接運行,這大概是完成整個項目的過程中讓我們最感到高興的一件小事。在這個時候我們不約而同的說:“好,不愧是我們

。”

技術分享圖片

對於個人項目的復用

在做個人項目的時候,嘟嘟同學已經做了界面,而11卻沒有做,11的題目生成采取的是完全隨機的算法,而嘟嘟采取的是一種偽隨機。所以在代碼復用的時候,界面的操作和整體的框架主要參考了嘟嘟的代碼,下面是嘟嘟同學的話:

由於UI性質原因,python代碼顯然更適合作為基本代碼,所以整個項目都是在我的代碼上復用而來。復用包括下面幾點:

1、UI界面的復用:

個人項目實際上已經寫了一點UI,正好結對項目上接著自己寫的UI,原代碼做的是一個登陸界面,一個題目選擇界面,現項目根據需求重新修改登陸界面,除用戶名和密碼外,另加登陸和註冊按鈕。UI再加一個註冊模塊,承接了之前的難度等級界面,加上單選出題以及分數界面就完成了整套系統。

技術分享圖片

登陸界面

技術分享圖片

註冊界面

技術分享圖片

註冊界面

技術分享圖片

選擇界面

技術分享圖片

數量控制

技術分享圖片

打分界面

3、生成算法類的復用:

生成算法是一個類,該類中自己的生成算法替換為隊友的生成算法,保留了之前的文件輸出。修改了查重算法,僅對本次生成的試卷進行查重操作。增加了對每到題目計算結果的函數,函數采用隊友的靈感,前半部分計算每個運算符的域約束環境,之後采用python自帶eval()函數進行處理,設計異常拋出處理。

3、用戶類的復用

用戶信息單獨成類文件,從文件從讀用戶的賬號密碼用戶名,實現了下次可直接登錄的需求,避免重復註冊,或把註冊用戶添加到類中,防止”斷電不保存”現象出現。

後端的題目生成和計算模塊主要參考了依依的個人項目,下面是依依同學的話:

個人項目和結對編程在主要程序功能的區別上最大的部分在於,結對編程不僅需要生成題目還需要計算出題目的結果,鑒於我在個人項目的題目生成上也存在一些不周全的地方,所以在結對編程的時候對於個人項目的復用和改進如下:

1、題目生成代碼的復用:

在題目生成的過程中直接使用了我在個人項目中生成題目的算法,但是由於我的個人項目使用c++編寫的,而我們的結對編程項目使用python編寫的,所以,需要將這部分的代碼改成python的。而在python中對於字符串的操作比c++方便了不止一點點,所以在很多類似增減和修改字符串內容的地方地方都可以進行一些簡化。

2、加括號算法的完善:

在我原先的生成題目中,會加上一些沒有必要的括號(例如:把整個式子打上括號或是在優先級高的式子上加上括號),為了完善題目的生成不使這種情況出現,我新增了一個叫做remove_br的函數,專門進行冗余括號的去除:

技術分享圖片

這一模塊采取的主要思想是進行括號域內和域外運算符優先級的判斷和比較,去除不符合要求的括號。

3、新增計算模塊:

在計算一模塊的設計和編寫可謂是十分曲折,在最開始工作的時候,隊友先進行整個代碼框架的搭建,我現在自己的個人項目上進行計算模塊的添加,采取的是用一個短發判斷生成的式子中的運算符們的作用於,將式子改寫成一個標準的形式,然後利用隊列和棧,將中綴式改成後綴式進行計算,實現了計算的功能,而後在把這一模塊改成python加入整個程序的過程中遇到了一些困難,最後是采取隊友建議的python中的eval()函數,采取我之前寫的判斷作用域的算法將生成的式子改成采取eval()函數所需的另外一種標準形式,然後利用這個函數直接計算得到結果。

對於項目跨平臺的處理

這一部分的處理還要感謝助教小姐姐的提醒,因為助教小姐姐的電腦是蘋果系統,所以我們個人項目對於跨平臺考慮的欠缺就很明顯的體現了出來,所以在結對編程的時候我們考慮了對跨平臺的處理。

因為大部分的電腦都是windos系統,我們在編寫代碼時也是Win平臺上處理,所以在Mac平臺上就出現了路徑問題(學姐的電腦是Mac),現階段了解到的不兼容問題就是路徑問題,Win下的文件路徑以“\”操作分割路徑,而Mac下則是以“/”操作分割路徑。所以下下面代碼就會出現路徑問題:

dir = os.getcwd() + "\\" + self.name + "\\"

好在python跨平臺性非常的好,很多庫函數兩個系統都是通用的,所以避免直接出現路徑中的分割符號,用函數join()來替代。如下面代碼:

dir = os.path.join(os.getcwd(),"Users","Users.txt")

就可以跨平臺使用。

嘟嘟的感想寫在後面

從最開始入大學時起,老師就跟我們說過,軟件工程要“做中學”,這個國慶假期我真的深刻的體會到了什麽叫做中學。一個代碼的生長周期,從開始分析需求到最終成品出現,最受折磨的還是程序員。
第一次做UI,因為不懂框架而饒了很多彎路,也浪費了很多時間,因為用錯UI工具而降低了整個程序的美感也是讓人很遺憾的事情。接著是各種各樣的BUG,我個人來說是一個非常認真的人,不會出現i寫成1,等號少打一個或者記錯變量名等情況,但是很多邏輯上的BUG還是讓我幾次都想崩潰,男默女淚...但是還是非常享受這個過程,看著需求一個一個被實現,BUG一個一個被解決,說沒有成就感是假的,說不自豪也是假的,或許我們做的不是最好的,但是我們真的盡了全力。
7天假期,我沒有一天有時間去放松去玩耍,每天都把時間花在代碼和項目上,全身心的投入了進去。也曾因為Qt不會使用而放棄了特別好看的界面,也曾因為分工沒有明確自己越界而和隊友發生了矛盾(當然女朋友還是要哄的...小聲BB),當一切都結束的時候依然特別開心。
最後的最後還是想說:興趣才是最大的動力,自己熱愛的才會去努力,不管有多艱難。
敬程序猿。

【結對編程】好,不愧是我們