博客要求

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. Java 学习笔记(10)——容器

    之前学习了java中从语法到常用类的部分.在编程中有这样一类需求,就是要保存批量的相同数据类型.针对这种需求一般都是使用容器来存储.之前说过Java中的数组,但是数组不能改变长度.Java中提供了另一 ...

  2. mac笔记本安装Android sdk

    一.先下载android sdk for mac   给二个靠谱的网址: a). http://down.tech.sina.com.cn/page/45703.html b). http://mac ...

  3. .Net Core 3.0 的 docker 容器中运行 无法 访问 Oracle数据库

    .Net  Core 3.0 的 docker 容器中运行 无法 访问 Oracle数据库  , 一直报下面的错误 ORA-00604: error occurred at recursive SQL ...

  4. 在Spring Boot中使用Docker在测试中进行高级功能测试

    最近又学到了很多新知识,感谢优锐课老师细致地讲解,这篇博客记录下自己所学所想. 想更多地了解Spring Boot项目中的功能测试吗?这篇文章带你了解有关在测试中使用Docker容器的更多信息. 本文 ...

  5. 函数闭包模拟session

    根据上一个认证功能的问题 要解决的就是只需要登录一次 也就是登录一次之后的用户名跟密码可以保存下来让其他函数用-->全局变量 user_dic = {"user_name": ...

  6. Flask框架知识点整合

    Flask 0.Flask简介 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收ht ...

  7. nginx部署VUE跨域访问api

    H5端配置跨域 nginx跨域配置 server { listen 80; charset utf-8; server_name you_dome_name;#location /tasklist.j ...

  8. 美国权威媒体CRN预测:2020年值得关注的10个新兴云计算趋势

    云计算在过去一年里极速发展,其速度之快,让人难以预测未来会发生什么.即使依照这些趋势而新发明的技术在不断变化并且极其脆弱,而推动这些趋势和技术不断发展的企业和组织最终也很有可能发生变化,但不妨碍这些大 ...

  9. 【题解】P4585 [FJOI2015]火星商店问题(线段树套Trie树)

    [题解]P4585 [FJOI2015]火星商店问题(线段树套Trie树) 语文没学好不要写省选题面!!!! 题目大意: 有\(n\)个集合,每个集合有个任意时刻都可用的初始元素.现在有\(m\)个操 ...

  10. my_mysql

    ###一键偷懒YUM安装MySQbL### 1.安装mysql数据库 #yum install -y mariadb-server  mariadb 2.登录mysql数据库常用选项 -h:指定服务端 ...