:Githubのリポジトリプロジェクトはフォークアドレスhttps://github.com/Wamnario/PairProgramming.git
PSP2.1 | パーソナルソフトウェアプロセス段階 | 推定時間がかかる(分) |
---|---|---|
プランニング | 計画 | 30 |
推計 | このタスクが必要とどのくらいの時間を見積もります | 30 |
開発 | 開発 | 90 |
分析 | 要件分析 | 60 |
デザインスペック | 設計ドキュメントの生成 | 60 |
デザインレビュー | デザインレビュー | 30 |
標準コーディング | コードの仕様 | 60 |
設計 | 具体的な設計 | 60 |
コーディング | 具体的なコーディング | 90 |
コードレビュー | コードレビュー | 60 |
テスト | テスト | 30 |
報告 | レポート | 60 |
試験報告書 | テストレポート | 30 |
サイズ測定 | コンピューティングのワークロード | 30 |
死後&プロセス改善計画 | その後まとめ、およびプロセス改善計画 | 60 |
和 | トータル | 780 |
プログラミング
フォームデザイナ
インターフェイスの美しさから始まる良いプログラム。作成したのWinForm後合理的な使用をツールボックスツール設計に。使用するすべての学生の名前は、学生の数が格納されている、があるのDataGridViewを。機能するために従うランダムに選択した学生は、唯一の「ランダムサンプル」必要があるボタンをすることができます。ランダムに学生に描かれた後、生徒たちは、そのような彼が不在であるかのように、トランザクション処理を行うことができますので、「不在」ボタンがあるはずです。生徒の欠席を覚えておくこと。パートナーにこの部分を設計するフォームデザイナ。
コードのデザイン
ただ、過去に大学の授業料のアシスタントの名前の下で技術会社があったので、我々は彼らの点呼システムを見てきました、何か心の中でプロジェクトを取得します。私は、機能について知っているが、ソフトウェアが容易になります。教師はまた、Banqunで教室をこの割り当てを、関連する情報をリリースしてきたし、また表示するには、それを実践するために難しいことではありませんでした。
コードは三層設計を使用するように設計され、それぞれ、プレゼンテーション層(ユーザインターフェイス層)、ビジネスロジック、データアクセス層。ライブラリの実体もあります。人間とコンピュータの相互作用を達成するための5つのカテゴリー、フォームクラスがあります。このプロジェクトは、6つの関数呼び出し、機能と機能の関係があり、合計します。キーの機能は、フローチャートを描くことができます。私の重要な点は、それがよりシンプルになり、ポイント・ツー生徒の形で描かれた乱数を生成するために、独自のアルゴリズムを使用することです。
非表示の情報、原理的には
原理を隠した情報は、構造化設計とオブジェクト指向プログラミングの基本である、オブジェクト指向のパッケージには、この原則から来ます。この原理を実現するために、クラスとクラスは、インターフェイスを介してアクセスされます。
契約による設計の原則
契約による設計、ソフトウェアベースの相互義務と責任の各要素が相互に協力することになります。関数呼び出しと同様に、パラメータの数や間違ったタイプが起動されていない場合。彼らはさらに手順を実行するプログラムの要件を満たす場合は、呼び出すことができます。かのように契約を完了させます。
インタフェース設計の原則
インターフェイスの分離は、クライアントが不要なインターフェースに依存しません。コードの設計では、依存クラスとクラスは、最小インターフェイスに基づいています。
疎結合の原則
このプロジェクトでは、プログラムは、約によってサービス実現クラス・プロバイダ/サービスリクエスタモードウェッジインターフェースの間、典型的な疎結合の原理と一致しています。
コードレビュー
代码规范
:Https://gist.github.com/zhuqling/a2700703d088b8746f0c#file-csharp-language-code-standard-style-md
我々はキャメルケース形式を使用します。まず名前が要件を満たしている確認してください。私たちは、やり方レビューコードレビューを顔を使用しています。
yz:这个chosedstuin是不是不符合代码规范啊?
YW:ほとんど変化がchosedStuInfo良くあります。
yz:这个学生姓名显示的字体大小不太合适,不美观。
YW:変更変更変更。
yz:这个记录缺勤按钮在随机点到之前也可以点击啊,点了会怎么样?
YW:あなたもしてみてください?
yz:点了...列表第一个同学被记录了一次缺勤
YW:彼は非常に惨めだったこと...
yz:我点错了,给同学误记录了一次缺勤,怎么办,能撤回吗?
YW:うわー、ないっす!
コードレビュー結果は、バグの発見であり、2つの不合理とルールに準拠していないコードを配置します。
1.chosedstuinは仕様を満たしていません。
2.あなたは、ランダムな抽選の人々が長期欠勤をクリックしをクリックしていない場合は、学校の第1学生の欠席は、一度記録されます。
私はそれを戻すことはできません正しく覚えていれば3.欠席は、覚えています。
コードのテスト
で、という考えをテストするために建設コードユニットテストは、Form1フォームのインスタンスを作成し、Form1の関数を呼び出します。
Form1の最初のロード
コールForm1の機能、ランダムに選択された学生を。
コールをForm1の機能を、この生徒の欠席を覚えています。
学生の数のこの主張は、1を欠席します。
コールをForm1の機能を、学生の欠席の記録を取り消します。
欠席の数は、学生がゼロであるという主張します。
コードの一部
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
Form1 form1 = new Form1();
form1.unitest_formLoad();
form1.unitest_rdChoseStu();
form1.unitest_Absence();
int tmp = form1.preAssert();
Assert.AreEqual(1, tmp);
form1.unitest_cancelAbsence();
tmp = form1.preAssert();
Assert.AreEqual(0, tmp);
}
}
コードカバレッジ
コード説明
private void Form1_Load(object sender, EventArgs e)
{
progressName.Step = 1;
progressName.Minimum = 0;
StudentDAO stuDao = new StudentDAO();
stuList = stuDao.getAllStudents();
DataTable dt = new DataTable();
dt.Columns.Add("stuID", Type.GetType("System.String"));
dt.Columns.Add("stuName", Type.GetType("System.String"));
dt.Columns.Add("缺勤此次数");
progressName.Maximum = stuList.Count;
foreach (Student stu in stuList)
{
dt.Rows.Add(stu.Id, stu.Name, stu.TimeAbence);
progressName.PerformStep();
}
dataGridView1.DataSource = dt;
dataGridView1.Columns[2].Width = 120;
}//Load the data of the students while loading the windows form.
//Initialize the progressbar and make it work properly.
private void Rdchose_Click(object sender, EventArgs e)
{
cancelAbsence.Enabled = false;
Random rd = new Random();
tmp = rd.Next(1, 84);
Thread.Sleep(1);
chosedStuInfo.Text = "学号:" + stuList[tmp].Id +" "+"姓名:"+stuList[tmp].Name;
absence.Enabled = true;
}//perform a random roll call.
private void absence_Click(object sender, EventArgs e)
{
stuList[tmp].TimeAbence++;
int TimeAbsenceTmp1 = Convert.ToInt32(this.dataGridView1.Rows[tmp].Cells[2].Value);
this.dataGridView1.Rows[tmp].Cells[2].Value = TimeAbsenceTmp1 + 1;
cancelAbsence.Enabled = true;
absence.Enabled = false;
}//Record an absence for this chosed student.
private void cancelabsence_Click(object sender, EventArgs e)
{
stuList[tmp].TimeAbence--;
int TimeAbsenceTmp2 = Convert.ToInt32(this.dataGridView1.Rows[tmp].Cells[2].Value);
this.dataGridView1.Rows[tmp].Cells[2].Value = TimeAbsenceTmp2 - 1;
absence.Enabled = true;
cancelAbsence.Enabled = false;
}//Cancel the absence record for this chosed student if he was recorded an absence just now.
PSPテーブル
PSP2.1 | パーソナルソフトウェアプロセス段階 | 実際の時間がかかる(分) |
---|---|---|
プランニング | 計画 | 15 |
推計 | このタスクが必要とどのくらいの時間を見積もります | 20 |
開発 | 開発 | 90 |
分析 | 要件分析 | 80 |
デザインスペック | 設計ドキュメントの生成 | 50 |
デザインレビュー | デザインレビュー | 30 |
標準コーディング | コードの仕様 | 70 |
設計 | 具体的な設計 | 60 |
コーディング | 具体的なコーディング | 60 |
コードレビュー | コードレビュー | 50 |
テスト | テスト | 50 |
報告 | レポート | 60 |
試験報告書 | テストレポート | 40 |
サイズ測定 | コンピューティングのワークロード | 30 |
死後&プロセス改善計画 | その後まとめ、およびプロセス改善計画 | 80 |
和 | トータル | 785 |
その他の機能
レコード学生の欠席は、学生の欠席の数を示しています。
第二の記録学生の欠席をキャンセルします。