博客要求

Github项目地址:https://github.com/zhibihuayue/PairProgramming

作业地址 : https://www.cnblogs.com/cherish599/p/11577268.html|

一、PSP表格估计时间

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 45 45
Estimate 估计这个任务需要多少时间 45 45
Development 开发 720 660
Analysis 需求分析 (包括学习新技术) 45 30
Design Spec 生成设计文档 30 30
Design Review 设计复审 (和同事审核设计文档) 30 45
Coding Standard 代码规范 (为目前的开发制定合适的规范) 30 30
Design 具体设计 60 60
Coding 具体编码 300 450
Code Review 代码复审 60 60
Test 测试(自我测试,修改代码,提交修改) 90 90
Reporting 报告 70 90
Test Report 测试报告 30 30
Size Measurement 计算工作量 25 30
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 20 30
合计 1600 1725

二、项目克隆

1.班级仓库。

2.进入PairProgramming文件夹,新建一个自己使用的文件夹。

3.VS软件编写

三、代码设计(代码设计和队友一起商量,所以这部分很多是一样的)

1.计算模块接口的设计与实现过程

解题思路

骰子游戏注意设置随机数的生成,以及将该随机数与外部输入的数字进行比较,并返回结果

程序实现说明

投骰子游戏,用户先猜取一个骰子数,然后丢骰子,若相同则胜利。

1.用户猜取骰子数板块,不需要用户通过键盘录入,而是通过可视化按钮选猜选骰子数(1-6),同时可在此板块下方实时查看自己选取得数字,并且丢骰子前支持用户重新猜选数字

2.丢骰子游戏主板块,用户在猜选数字后通过“丢骰子”按钮开始游戏,经过丢骰子动画后,显示丢出骰子数与用户游戏胜利情况;

游戏结束后用户可以通过“开始新的游戏”按钮,重置游戏所有窗口开始下一轮。

3.规则说明及结果显示板块,若用户猜对则显示胜利,反之显示失败情况(大或小)

4.若用户未猜取数字,直接丢骰子,将弹出错误提示窗口,引导用户正确游戏。

附加功能

1.游戏局数计数显示

2.操作错误弹窗引导提示

3.一键重置开启新游戏

4.优化操作界面,增加投掷动画,提升游戏趣味性

Design By Contract(契约式设计):

契约式设计就是按照某种规定对一些数据等做出约定,如果超出约定,程序将不再运行,例如要求输入的参数必须满足某种条件。

该程序中

第一个版本A里,若用户输入骰子数不再0-6之间,程序将直接报错提示用户错误,并引导重新输入;

第二个版本B里,若用户未猜测骰子直接丢骰子,程序将弹窗报错并直接return此回游戏,引导用户正确流程“猜选后才可丢骰子”。



即为:设计在正确的输入下,能够得到正确的输出,否则程序将报错。

Information Hiding(信息隐藏):

信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的



即为:在程序中根据使用情况,合理设置public和Private,准确设置各模块访问权限

Interface Design(接口设计):

对接口的名字,功能,接口与接口间的继承关系进行设计;好的接口设计可以增强代码可读性,易用性,可更改性。

该程序中

我们程序中对骰子1-6模拟建库,封装类库“DataBase”存放骰子数,封装类库“Entity”映射数据,封装类库“DaoLayer”提取所有筛子数据,并在窗体中模拟获取数据源,并构造数据加载。(实际之后窗体程序中未用该数据,仅作练习)

代码展示(我负责代码部分)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;
using System.Collections;
using Entity;
namespace DataBase
{
public class DiceData
{
private static List<Dice> diceList; public static List<Dice> getAll()
{
diceList = new List<Dice>(); Dice num1 = new Dice("1");
diceList.Add(num1);
Dice num2 = new Dice("2");
diceList.Add(num2);
Dice num3 = new Dice("3");
diceList.Add(num3);
Dice num4 = new Dice("4");
diceList.Add(num4);
Dice num5 = new Dice("5");
diceList.Add(num5);
Dice num6 = new Dice("6");
diceList.Add(num6); return diceList;
}
}
} using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;
using System.Collections;
using Entity;
namespace DataBase
{
public class DiceData
{
private static List<Dice> diceList; public static List<Dice> getAll()
{
diceList = new List<Dice>(); Dice num1 = new Dice("1");
diceList.Add(num1);
Dice num2 = new Dice("2");
diceList.Add(num2);
Dice num3 = new Dice("3");
diceList.Add(num3);
Dice num4 = new Dice("4");
diceList.Add(num4);
Dice num5 = new Dice("5");
diceList.Add(num5);
Dice num6 = new Dice("6");
diceList.Add(num6); return diceList;
}
}
} using System;
using System.Collections.Generic;
using System.Text;
using Entity;
using DataBase;
namespace DaoLayer
{
class DaoDice
{
public class StudentDAO
{
public int getDiceRecordsNums()
{
List<Dice> DiceList = DiceData.getAll();
return DiceList.Count;
} public List<Dice> getAllDice()
{
List<Dice> diceList = DiceData.getAll();
return diceList;
} }
}
}

2.界面展示

3.代码复审(于丁博客

通过自己测试审查自己的代码,以及交换互审对方的代码,最后一起审核阅读版本合并后的代码,说明如下:

1.概要部分

1.代码符合需求和规格说明。对功能的实现非常完善。

2.代码设计有比较周全的考虑。首先,通过将原版本的用户录入读取数据的方式,更改为全窗体按钮式交互。减少输入处理,不需要对输入的格式进行检查,只需数字大小进行判断。

3.代码有较高的可读性。代码根据功能分为了几个不同的类,对功能的划分较为直观,关键部分有详细的注释,但有些部分仍缺少必要的注释,存在一些难以理解的代码。

4.由于代码的分工十分明确,所以易于维护。

2.设计规范部分

1.没有应用常用的设计模式。

2.有较多的硬编码存在,比如在很多的if判断

3.调用已有库的功能较少。

4.尽量删减无用的代码。

3.代码规范部分

1.程序整体代码风格一致。

4.具体代码部分

1.对不同类型的错误进行了处理,在某些地方检查了函数的返回值。

2.没有使用断言。

3.在生成覆盖Num的过程中,没有可导致内存泄漏的地方。

5.效能

1.程序的效能较差,重复50000个词游戏大概要4分钟。

2.程序只有对文件的读写操作,不会超时。没有网络调用。

6.可读性

1.代码的可读性较高,有大量的注释。但仍有个别关键函数缺少必要的注释,读起来难以理解。

7.可测试性

1.代码的单元测试不足。需要增加一些单元测试。

2.没有涉及到数据库、网络、多线程等。

4.单元测试(于丁博客

四、结对的过程

1.结对成员(姜玖林&于丁)

2.提前准备内容

我们组计划做两个不同版本,我先做了个控制台的应用程序,下面的代码便是我提前做出来的内容,在此基础上进行改动,最终程序确定的是form的程序.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace GuessNumber

{

class Program

    {

static void Main(string[] args)

{

const int GuessChance = 7;

while (true)

{

Console.WriteLine("*********************欢迎来到猜数字*********************\n");

                //生成一个随机数.

                int targetNum = new
Random().Next(1, 101); for (int i = 1; i <=
GuessChance; i++) { //输入猜想. Console.Write("请输入猜想 {0}:
", i); int guessNum =
Convert.ToInt32(Console.ReadLine()); Console.WriteLine("猜想 {0}:
{1}", i, guessNum); //判断猜大了还是猜小了. if (guessNum >
targetNum) { Console.WriteLine("猜大了!"); } if (guessNum <
targetNum) { Console.WriteLine("猜小了!"); } //猜中了. if (guessNum == targetNum) { Console.WriteLine("恭喜你猜中了!"); Console.WriteLine(); break; } Console.WriteLine(); } //是否继续游戏的判断. Console.WriteLine("是否再来一次游戏?y/n"); string comfirm =
Console.ReadLine(); if (comfirm == "y" ||
comfirm == "Y") { Console.WriteLine(); continue; } else { Console.WriteLine("游戏结束!"); break; } } Console.ReadKey();
}
}
}

3.结果展示

五、总结

此次的作业着实太过幸运,竟然迎来了建国七十大庆,小姜同志只得把重重的电脑搬回家里,继续完成作业。

对于此次作业,我们组没有用老师给我们演示的案例(考勤系统)来做,我和于丁思考了一下,决定来个不一样的东西,然后就选择了骰子游戏。我们把骰子游戏进行了部分改动,即没有选择数字的限制(骰子最多选择六点),就单纯稍微改动了一下子。

非常感谢我的队友丁丁同学的帮助,教会了我很多东西,还推荐我使用了git软件的客户端,确实好用一些。代码还需继续努力呢,加油加油!

个人第三次作业——结对编程 (姜玖林&于丁)的更多相关文章

  1. 第三次作业-结对编程(wordcount)

    GIT地址 https://github.com/gentlemanzq/WordCount.git GIT用户名  gentlemanzq 结对伙伴博客地址 https://home.cnblogs ...

  2. [BUAA软工]第二次博客作业---结对编程

    [BUAA软工]结对作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 2019年软件工程基础-结对项目作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能 ...

  3. 软件工程第三次作业-结对作业NO.1

    第一次结对作业 结对人员: 潘伟靖 170320077 张 松 170320079 方案分析 我们对所供的资料进行分析,如下: 从提供的资料可以看出,需要解决的问题以及满足的需求主要有两类目标用户,各 ...

  4. 第四周作业&&结对编程

    1. 结对编程. 本周开始,和我结对编程的小伙伴是齐嘉亮(博客:http://www.cnblogs.com/zhengrui0452/). 因为这周需要发布四人团队项目的alpha版本,刚好我和亮哥 ...

  5. 软工第三次作业 -- 结对之AutoCS1.0

    031302331 031302223 一.将初始排课表导入系统数据库 法1:通过jxl解析excel,把数据插入数据库.较简单,预计用时60分钟 我们采取的是 法2(预计用时30分钟):我们使用的是 ...

  6. 软件工程实践2019第五次作业——结对编程的编程实现 version1.1

    1.链接 我的博客链接https://github.com/S031402112 结对同学的博客https://www.cnblogs.com/jiabingge/ 我们队创建的仓库的Github项目 ...

  7. 软工2017第四周作业结对编程——个人psp

    29.22 --9.26本周例行报告 1.PSP(personal software process )个人软件过程. 类型 任务 预计时间 开始时间                结束时间 中断时间 ...

  8. 福大软工1816 · 第三次作业 - 结对项目Salty Fish原型图

    SALTY FISH原型图 LINKS IMPORT to LIST FOCUS TRENDS ANALYSE NIGHT

  9. 2017-2018-2 1723《程序设计与数据结构》第十一周作业 & 实验三 & (总体)第三周结对编程 总结

    作业地址 第十一次作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1933 (作业界面已评分,可随时查看,如果对自己的评分有 ...

随机推荐

  1. ios设备iframe无法滚动

    在使用IFRAME,你需要使用一个元素(如DIV)来包装他们 <div class="scroll-wrapper"> <iframe src="&qu ...

  2. 一个简单的Web服务器-支持静态资源请求

    目标 实现一个简单的Web服务器,能够根据HTTP请求的URL响应对应的静态资源,如果静态资源不存在则响应404. HttpServer 使用ServerSocket实现的一个服务器,request根 ...

  3. Team Foundation Server 2015使用教程【2】:默认团队成员添加

    官方文档:https://www.visualstudio.com/en-us/docs/setup-admin/add-users

  4. HBase 分裂(split)

    1. 为什么split 最初一个Table 只有一个region(因此只能存放在一个region server上).随着数据的不断写入,HRegion越来越大,当到达一定程度后分裂为两个,通过负载均衡 ...

  5. java环境所遇问题

    在javac能运行通过并且生成了.class文件但是java文件在运行时通不过出现上面图片情况,试了一上午发现我的和别人好像不一样,下面展示我的情况, 之前用户变量那里新建了一个classpath,不 ...

  6. 图解Go里面的sync.Map了解编程语言核心实现源码

    基础筑基 在大多数语言中原始map都不是一个线程安全的数据结构,那如果要在多个线程或者goroutine中对线程进行更改就需要加锁,除了加1个大锁,不同的语言还有不同的优化方式, 像在java和go这 ...

  7. HttpServletRequest,HttpServletResponse

    1, Java中HttpServletRequest接口是ServletRequest子接口,HttpServletRequest接口遵循http协议.相比于HttpServletRequest接口, ...

  8. js中时间戳转换成xxxx-xx-xx xx:xx:xx类型日期格式的做法

    1.十三位数字的时间戳转换方法 var time = new Date(datetime).toLocaleString().replace(/年|月/g, "-").replac ...

  9. Pillow库来着

    第一步肯定是安装啦 pip install pillow 如果安装报错,可以升级一下pip库,因为有可能是pip版本低了......... pip show pip 升级用 python -m pip ...

  10. C语言---总结

    基础 程序结构是三种: 顺序结构.选择结构(分支结构).循环结构. 读程序都要从 main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数. 计算机的数据 ...