: 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에 교실이 할당 관련 정보를 발표하고 또한 보여, 그래서 그들을 연습 어렵지 않았다.
코드에는 3 층 설계를 사용하여 설계되어, 각각의 프리젠 테이션 레이어 (사용자 인터페이스 층), 비즈니스 로직, 데이터 접근 층. 라이브러리 개체도 있습니다. 인간 - 컴퓨터 상호 작용을 달성하기 위해 다섯 개 가지 범주, 폼 클래스가 있습니다. 프로젝트는 여섯 함수 호출 함수와 함수 관계가있는 합계한다. 키 기능 흐름도를 그릴 수있다. 내 키 포인트는 형태로 그려 난수 생성하는 독특한 알고리즘을 사용하는 점을-학생들, 그것은 더 간단 할 것이다.
숨기기 정보 원칙적으로
정보 숨어있는 원리는 구조 설계 및 객체 지향 프로그래밍의 기초 객체 지향 패키지는이 원칙에서 올 것이다. 이 원리를 구현하기 위해, 클래스와 클래스는 인터페이스를 통해 액세스 할 수 있습니다.
계약에 의해 디자인 원칙
계약에 의해 디자인, 소프트웨어 기반의 상호 의무와 책임의 각 요소는 서로 협력 할 수 있도록. 함수 호출, 매개 변수의 수 또는 것처럼 잘못된 유형은 호출되지 않습니다. 그들은 더 단계를 수행하는 프로그램의 요구 사항을 충족하는 경우 호출 할 수 있습니다. 마치하여 계약을 완료합니다.
인터페이스 디자인 원칙
인터페이스 분리, 클라이언트는 원하지 않는 인터페이스에 의존하지 않습니다. 코드 설계에서, 종속성 클래스와 클래스는 최소한의 인터페이스를 기반으로합니다.
느슨한 결합의 원리
이 프로젝트에서 제공 / 서비스 요청자 모드 쐐기 인터페이스는 약에 의해 서비스를 실현 클래스 사이의 프로그램은 전형적인 느슨한 결합의 원칙과 일치한다.
코드 검토
代码规范
: 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 : 와우, 아니 이봐!
코드 검토 결과 버그의 발견이며,이 불합리하고 규칙을 준수하지 않는 코드를 넣습니다.
1.chosedstuin은 사양에 맞지 않습니다.
당신이 결근을 클릭 무작위 추첨 사람들에 클릭하지 마십시오 2. 경우, 학교 제 1 학생 결석 한 번 기록됩니다.
내가 정확히 그 다시 변경할 수 없습니다 기억한다면 3. 결석 만 기억할 수 있습니다.
코드 테스트
건설 코드에서 아이디어를 테스트하는 단위 테스트 , Form1에 폼의 인스턴스를 생성 Form1의 함수를 호출합니다.
Form1에 첫 번째로드
전화 를 Form1 기능, 무작위로 선택된 학생.
전화 를 Form1 , 기능이 학생의 결석을 기억한다.
학생의 수의이 주장은 1 결석.
전화 를 Form1 , 기능을 학생의 결석의 기록을 취소 할 수 있습니다.
결석의 수는 학생이 0이 어서 트.
코드의 일부
[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 |
추가 기능
기록 학생의 결석은 학생의 결석의 수를 보여줍니다.
두 번째 기록 학생의 결석을 취소합니다.