結隊做業 | ||
---|---|---|
GitHub項目地址 | https://github.com/1402120950/PairProgramming | |
隊友博客地址 | https://www.cnblogs.com/zlang/ | |
做業連接 | http://www.javashuo.com/article/p-noqnzypb-ga.html) |
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 20 | 30 |
·Estimate | · 估計這個任務須要多少時間 | 840 | 900 |
Development | 開發 | 720 | 810 |
· Analysis | · 需求分析 (包括學習新技術) | 60 | 120 |
· Design Spec | · 生成設計文檔 | 10 | 10 |
· Design Review | · 設計複審 (和同事審覈設計文檔) | 10 | 10 |
· Coding Standard | · 代碼規範 (爲目前的開發制定合適的規範) | 10 | 10 |
· Design | · 具體設計 | 30 | 60 |
· Coding | · 具體編碼 | 360 | 360 |
· Code Review | · 代碼複審 | 60 | 60 |
· Test | · 測試(自我測試,修改代碼,提交修改) | 180 | 180 |
Reporting | 報告 | 130 | 190 |
· Test Report | · 測試報告 | 60 | 120 |
· Size Measurement | · 計算工做量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 過後總結, 並提出過程改進計劃 | 60 | 60 |
合計 | 870 | 1030 |
這個項目由數據庫和C#語言完成,將學生信息存儲在數據庫中,再由C#語言將數據庫中的學生信息提取出來,並實現點名功能,並在新設計了登錄的功能。
這些功能整體由這幾個部分組成:
(1)WinLogin(登錄窗體)
(2)Form1(加載學生窗體)
(3)Form2(實現點名窗體)
(4)connect(和數據庫相鏈接和查詢語句的類)
(5)Demo(存儲帳號和密碼以及學生基本信息的數據庫)
大體結構以下:
html
(1)Design By Contract(契約式設計):
契約式設計就是按照某種規定對一些數據等作出約定,若是超出約定,程序將再也不運行,例如要求輸入的參數必須知足某種條件。
如何體現:咱們的數據庫沒法實現共享。因此只能利用每一個人本人本地數據庫,數據庫的名稱都是Demo。
(2)Information Hiding(信息隱藏):
信息隱藏指在設計和肯定模塊時,使得一個模塊內包含的特定信息(過程或數據),對於不須要這些信息的其餘模塊來講,是不可訪問的。
如何體現:咱們的項目都是兩我的一塊兒設計,編碼的,並無對對方設計一些影藏的東西,同時也方便了操做。
(3)Interface Design(接口設計):
對接口的名字,功能,接口與接口間的繼承關係進行設計;好的接口設計能夠加強代碼可讀性,易用性,可更改性。
如何體現:沒有設計接口,只有系統自帶的接口,確定是符合原則的。
(4)Loose Coupling 鬆耦合:
軟件系統結構中各模塊間相互聯繫緊密程度的一種度量。模塊之間聯繫越緊密,其耦合性就越強,模塊的獨立性則越差。模塊間耦合高低取決於模塊間接口的複雜性、調用的方式及傳遞的信息。
如何體現:因爲並無設計接口,因此沒有辦法去經過增長接口去提供模塊間的耦合。git
參考:C#代碼規範github
由於咱們是同一個寢室,因此咱們的代碼在邊開發,邊審改,咱們均可以隨時看到對方的工做狀況,有什麼問題都能隨時指出,只是在每次在不一樣的機子上面測試代碼的時候,咱們須要更改連接數據庫的連接語句,出現的問題也主要集中在開發人員的性格上面,可是都不至於影響配合。sql
(1)登錄代碼,與數據庫鏈接起來,並使用查詢語句查詢出數據庫設置的帳號和密碼數據庫
private void btmLogin_Click(object sender, EventArgs e) { string sql = string.Format("select * from tbluser where username='{0}' and userpwd='{1}'", txtName.Text, txtPwd.Text); DataSet ds = connect.querysql(sql); if (ds.Tables[0].Rows.Count > 0) { Form1 f = new Form1(); f.Show(); this.Hide(); } else { MessageBox.Show("帳號或密碼錯誤"); } }
(2)加載數據,使用查詢語句,將數據庫的學生信息加載到相應窗體編程
private void timerCallName_Tick(object sender, EventArgs e) { string sql = string.Format("select * from tblStu"); DataSet ds = connect.querysql(sql); dataGridView1.DataSource = ds.Tables[0]; }
(3)點名,從Tables[0]隨機生成姓名的關鍵代碼安全
Label1.Text = Convert.ToString(ds.Tables[0].Rows[i]["stuName"])
咱們的隨機點名程序與數據庫相鏈接,能夠在數據庫裏直接進行對數據的增長、刪除、編輯,方便咱們對學生進行管理,而且咱們增長了登錄功能,對點名程序增長了安全性。ide
定義一個數據庫查詢語句,再將查詢到的結果返回到ds,定義一個字符串A,將指定的結果放在A中,再斷言他的結果是否正確。單元測試
public class Form2Tests { [TestMethod()] public void timerCallName_TickTest() { string sql = string.Format("select * from tblStu"); DataSet ds = connect.querysql("select * from tblStu"); string A = Convert.ToString(ds.Tables[0].Rows[0]["stuName"]); StringAssert.Contains("曾琅", A); //Assert.Fail(); } }
咱們結對成功後,首先想到的就是要經過鏈接數據庫來實現點名的功能,因此一開始就由我來設計界面,同時他來創建數據庫表格,而後再來一步一步的進行代碼的編寫,每一個人負責本身的那部分代碼,在遇到大的問題的時候,又進行合做來解決,過程基本上能夠說是比較順利的。學習
結對編程在必定程度上確實效率比較高,可是其弊端也很明顯,特別是對於這種小型的項目,結對編程在必定程度上浪費了一小部分資源,可是整體而言,仍是比一我的的效率更高的多,所謂當局者迷,黨一我的遇到困難時,隊友經常可以給出頗有建設性的意見。還有就是GitHub的使用上,對於兩我的,進行簡單的項目而言,GitHub就能夠說沒有一點兒優點,只能平添瑪法,可是可以想象到當遇到多人協做的大項目的時候,GitHub的優點就能很好的凸顯出來。