博客要求

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. keil中使用_at_绝对地址定位问题

    最近在做51单片机的时候,看到程序中某头文件有这样一段: 其中,_at_的作用就是将变量限定存放在指定的RAM空间.比如在这个单片机头文件中,就是将变量P00F,P01F分别存到Addr(0x8000 ...

  2. linux c函数参考手册

    一.字符测试 isalnum(测试字符是否为英文字母或数字) isalpha(测试字符是否为英文字母) isascii(测试字符是否为ascii码字符) isblank(测试字符是否为空格字符) is ...

  3. Ubuntu安装微信,解决deepin“版本过低”或NO_PUBKEY问题

    在搜索引擎搜索Ubuntu安装微信,最多的结果是通过deepin安装 但是里面使用的deepin-for-ubuntu 安装之后微信扫码会提示版本过低 直接安装deepin.com.wechat_2. ...

  4. 什么是神经网络 (Neural Network)

    反向传播: 可以看作是再一次将传过来的信号传回去, 看看这个负责传递信号神经元对于”讨糖”的动作到底有没有贡献, 让它好好反思与改正, 争取下次做出更好的贡献. 生物神经网络和人工神经网络的差别: 人 ...

  5. LeetCode 1 Two Sum——在数组上遍历出花样

    本文始发于个人公众号:TechFlow   今天是周末,和大家一起来看一道算法题.这道题是大名鼎鼎的LeetCode的第一题,也是面试当中非常常见的一道面试题.题目不难,但是对于初学者来说应该还是很有 ...

  6. 《提升能力,涨薪可待》-Java并发之AQS全面详解

    欢迎关注公众号[Ccww笔记],原创技术文章第一时间推出 一.AQS是什么?有什么用? AQS全称AbstractQueuedSynchronizer,即抽象的队列同步器,是一种用来构建锁和同步器的框 ...

  7. ELK学习实验008:Kibana的介绍

    一 简介 Kiana是一款开源的数据分析和可视化平台,它是 Elastic Stack成员之一,设计用于和 Elasticsearch协作.您可以使用 Kiana对 Elasticsearch索引中的 ...

  8. DEVOPS技术实践_19:Pipeline的多参数json调用

    在上一篇学习了把参数写进Json文件,然后通过去Json文件,调用参数的方法 1. 三元运算符介绍 调用的方法是通过一个三元运算符实现的 gender = prop.GENDER? prop.GEND ...

  9. AndroidStudio插件大全

    Android-Studio-Plugins 原文地址:https://github.com/itgoyo/Android-Studio-Plugins 欢迎star~~~ Android-Studi ...

  10. $POJ$2976 $Dropping\ tests$ 01分数规划+贪心

    正解:01分数规划 解题报告: 传送门! 板子题鸭,,, 显然考虑变成$a[i]-mid\cdot b[i]$,显然无脑贪心下得选出最大的$k$个然后判断是否大于0就好(,,,这么弱智真的算贪心嘛$T ...