개인 세 번째 작업 : 페어 프로그래밍

: 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

추가 기능

기록 학생의 결석은 학생의 결석의 수를 보여줍니다.
두 번째 기록 학생의 결석을 취소합니다.

추천

출처www.cnblogs.com/unmario/p/11600954.html