个人第三次作业——结对编程 (姜玖林&于丁)
博客要求
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软件的客户端,确实好用一些。代码还需继续努力呢,加油加油!
个人第三次作业——结对编程 (姜玖林&于丁)的更多相关文章
- 第三次作业-结对编程(wordcount)
GIT地址 https://github.com/gentlemanzq/WordCount.git GIT用户名 gentlemanzq 结对伙伴博客地址 https://home.cnblogs ...
- [BUAA软工]第二次博客作业---结对编程
[BUAA软工]结对作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 2019年软件工程基础-结对项目作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能 ...
- 软件工程第三次作业-结对作业NO.1
第一次结对作业 结对人员: 潘伟靖 170320077 张 松 170320079 方案分析 我们对所供的资料进行分析,如下: 从提供的资料可以看出,需要解决的问题以及满足的需求主要有两类目标用户,各 ...
- 第四周作业&&结对编程
1. 结对编程. 本周开始,和我结对编程的小伙伴是齐嘉亮(博客:http://www.cnblogs.com/zhengrui0452/). 因为这周需要发布四人团队项目的alpha版本,刚好我和亮哥 ...
- 软工第三次作业 -- 结对之AutoCS1.0
031302331 031302223 一.将初始排课表导入系统数据库 法1:通过jxl解析excel,把数据插入数据库.较简单,预计用时60分钟 我们采取的是 法2(预计用时30分钟):我们使用的是 ...
- 软件工程实践2019第五次作业——结对编程的编程实现 version1.1
1.链接 我的博客链接https://github.com/S031402112 结对同学的博客https://www.cnblogs.com/jiabingge/ 我们队创建的仓库的Github项目 ...
- 软工2017第四周作业结对编程——个人psp
29.22 --9.26本周例行报告 1.PSP(personal software process )个人软件过程. 类型 任务 预计时间 开始时间 结束时间 中断时间 ...
- 福大软工1816 · 第三次作业 - 结对项目Salty Fish原型图
SALTY FISH原型图 LINKS IMPORT to LIST FOCUS TRENDS ANALYSE NIGHT
- 2017-2018-2 1723《程序设计与数据结构》第十一周作业 & 实验三 & (总体)第三周结对编程 总结
作业地址 第十一次作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1933 (作业界面已评分,可随时查看,如果对自己的评分有 ...
随机推荐
- keil中使用_at_绝对地址定位问题
最近在做51单片机的时候,看到程序中某头文件有这样一段: 其中,_at_的作用就是将变量限定存放在指定的RAM空间.比如在这个单片机头文件中,就是将变量P00F,P01F分别存到Addr(0x8000 ...
- linux c函数参考手册
一.字符测试 isalnum(测试字符是否为英文字母或数字) isalpha(测试字符是否为英文字母) isascii(测试字符是否为ascii码字符) isblank(测试字符是否为空格字符) is ...
- Ubuntu安装微信,解决deepin“版本过低”或NO_PUBKEY问题
在搜索引擎搜索Ubuntu安装微信,最多的结果是通过deepin安装 但是里面使用的deepin-for-ubuntu 安装之后微信扫码会提示版本过低 直接安装deepin.com.wechat_2. ...
- 什么是神经网络 (Neural Network)
反向传播: 可以看作是再一次将传过来的信号传回去, 看看这个负责传递信号神经元对于”讨糖”的动作到底有没有贡献, 让它好好反思与改正, 争取下次做出更好的贡献. 生物神经网络和人工神经网络的差别: 人 ...
- LeetCode 1 Two Sum——在数组上遍历出花样
本文始发于个人公众号:TechFlow 今天是周末,和大家一起来看一道算法题.这道题是大名鼎鼎的LeetCode的第一题,也是面试当中非常常见的一道面试题.题目不难,但是对于初学者来说应该还是很有 ...
- 《提升能力,涨薪可待》-Java并发之AQS全面详解
欢迎关注公众号[Ccww笔记],原创技术文章第一时间推出 一.AQS是什么?有什么用? AQS全称AbstractQueuedSynchronizer,即抽象的队列同步器,是一种用来构建锁和同步器的框 ...
- ELK学习实验008:Kibana的介绍
一 简介 Kiana是一款开源的数据分析和可视化平台,它是 Elastic Stack成员之一,设计用于和 Elasticsearch协作.您可以使用 Kiana对 Elasticsearch索引中的 ...
- DEVOPS技术实践_19:Pipeline的多参数json调用
在上一篇学习了把参数写进Json文件,然后通过去Json文件,调用参数的方法 1. 三元运算符介绍 调用的方法是通过一个三元运算符实现的 gender = prop.GENDER? prop.GEND ...
- AndroidStudio插件大全
Android-Studio-Plugins 原文地址:https://github.com/itgoyo/Android-Studio-Plugins 欢迎star~~~ Android-Studi ...
- $POJ$2976 $Dropping\ tests$ 01分数规划+贪心
正解:01分数规划 解题报告: 传送门! 板子题鸭,,, 显然考虑变成$a[i]-mid\cdot b[i]$,显然无脑贪心下得选出最大的$k$个然后判断是否大于0就好(,,,这么弱智真的算贪心嘛$T ...