结对编程项目-四则运算

结对编程项目-四则运算

什么是结对编程?

引用《构建之法》-4.5.2

在结对编程模式下,一对程序员肩并肩地、平等地、互补地进行开发工作。两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起单元测试,一起集成测试,一起写文档等。

结对编程不是程序开发者独到的发明,在现实生活中,也存在着类似的搭档关系(Partnership):

  • 越野赛车(驾驶,领航员)
  • 驾驶飞机(驾驶,副驾驶)
  • 战斗机的编组(长机,僚机)

...

结对编程中有两个角色:

  • 驾驶员(Driver)是控制键盘输入的人。
  • 领航员(Navigator)起到领航、提醒的作用。

这两个角色是可以互换的。和现实生活中的例子类似,一个人负责具体的执行(驾驶,用键盘编辑程序等),另一人负责导航、检查、掩护等。

详见:邹老师博客

准备

花5分钟选择自己的结对小伙伴。

需求

实现一个命令行程序,要求:

  • 自动生成小学四则运算题目(加、减、乘、除)
    • 支持整数
    • 支持多运算符(比如生成包含100个运算符的题目)
    • 支持真分数
  • 统计正确率

例如以下的运行示例:

请输入要生成的题目数:<输入6>

题目1:
3 + 4 = <输入7>
正确!

题目2:
5 ÷ 8 = <输入5/6>
错误,正确答案为:5/8

题目3:
2/3 - 1/5 = <输入7/15>
正确!

题目4:
1/6 * 3/7 = <输入3/42>
正确!

题目5:
10 - 5 * 4 = <输入20>
错误,正确答案为:-20

题目6:
(1/3 + 1/2) * 11/20 = <输入55/120>
错误,正确答案为:11/24

完成6道题目,正确率为50%

HINTS:

如何对表达式求值,请参考:

扩展需求

  • 文件:

    • 处理生成题目并输出到文件
    • 完成题目后从文件读入并判题
  • 多语言支持:简体中文, 繁體中文, English

  • 生成题目去重
    引用自:http://www.cnblogs.com/jiel/p/4810756.html

    程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。

更多参考

http://www.cnblogs.com/xinz/p/3803035.html

要求

  • 第一周(2017-5-14 23:59截止)输出阶段总结博客

    • 需求分析
    • 设计思路
    • 整数/多运算符(题目生成/题目运算判题)
    • JUnit测试
    • 扩展需求
  • 第二周(2017-5-21 23:59截止)输出整体总结博客

    • 设计思路
    • 真分数(题目生成/题目运算判题)
    • JUnit测试
    • 扩展需求
  • 如第一周完成比较轻松,可继续完成第二周内容,不必等

  • 博客(两周都需要输出以下完整内容

    • 结对编程的两位同学须各自发表博客
    • 博客需描述各环节的输出,如:
      • 需求分析(描述自己对需求的理解,以及后续扩展的可能性
      • 设计思路(同时输出UML类图
      • 实现过程中的关键代码解释
      • 测试方法
      • 运行过程截图
      • 代码托管地址
      • 遇到的困难及解决方法
    • 对结对的小伙伴做出评价(重点指出需要改进的地方
    • 博客内容中如需展示两人的共同成果,请进行说明
    • 如有参考或引用的设计、实现,请进行说明
  • PSP

    • 实现之前先在PSP中预估时间

    • 实施后各个环节实际花费多少时间也请做记录

    • 表中有一项: Estimate 指的“预估”这个活动,“预估时间”也是一项任务。

      • 例如:我估计自己需要花30分钟来估算出整个项目需要多少时间完成,结果我花了20分钟估算出整个项目需要6个小时完成。Estimate这一项应该在“预估耗时”填写30分钟,实际耗时填写“20”分钟。
    • 一级和二级活动的包含关系:

      • Planning 这个一级活动包含了1个二级活动(Estimate)
      • Development 这个一级活动包含了8个二级活动
      • Reporting 这个一级活动包含了3个二级活动
    • 大家在记录时间的时候, 只用记录二级活动, 然后把总数加了, 就是相应的一级活动的时间

    • 这个时间的长短并不会对分数有直接影响,这是为了大家自己总结。

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

打分细则

  • 本次作业满分100分

  • 不按时交作业,0分

  • 越期一周不交作业,倒扣本次作业分数

  • 作业检查项:

    • 正确生成题目 10分
    • 正确判题 10分
    • 真分数支持 10分
    • 正确率统计 5分
    • 测试 10分
    • 扩展需求
      • 生成题目并输出到文件 5分
      • 完成题目后读入文件判题 5分
      • 支持多语言 5分
      • 支持生成题目去重 5分
    • 博客
      • 基础分(按时提交)5分
      • PSP表格 5分
      • 需求分析 5分
      • 设计思路 5分
      • 实现过程中的关键代码解释 5分
      • 遇到的困难及解决方法 5分
      • 对结对小伙伴做出评价 5分
  • 附加分:在作业过程及时反馈,提供建议被采纳可追加附加分,最高不超过10分

  • 严禁抄袭,违反者列入抄袭作业者的曝光台

参考建议

以下只是作为参考的建议,不是要求,同学们可以提出自己的想法和设计,体现在自己的博客中

  • 大概功能划分

    • 题目生成
      • 可独立使用
      • 考虑可扩展支持配置生成不同难度的题目,比如通过参数指定:
        • 运算符个数范围
        • 运算符限定(小学一年级题目只生成 + - 题目)
    • 题目合法性判断
      • 可独立使用
      • 可用于测试生成题目的正确性
      • 可用于以下输入的合法性检测
    • 题目运算(判题)
      • 可独立使用
      • 转换为后缀表达式(当然你也可以直接计算中缀表达式)
    • 题目去重
      • 可独立使用
      • 考虑支持不同的去重级别,比如:
        • Level 0:字符串相同算重复 -- 1 + 2,2 + 1 算不同题目
        • Level 1:满足交换律算重复 -- 1 + 2,2 + 1 算相同题目
        • Level ...
        • Level n: 参考以上 扩展需求
  • 测试

    • 题目生成测试
      • 最直接的就是人肉看输出是否合法
        • 效率低
        • 容易出错
      • 题目合法性判定程序
        • 自动化
        • 如何测试自己的判定程序是准确无误的?
    • 题目运算测试
      • 正确性测试

        • 手动准备题目
        • 利用题目生成程序
        • 利用第三方运算工具做运算结果对比,比如Linux bc
      • 错误处理测试, 比如输入以下非法表达式,能否正常工作:

        • "2394809+sdk*fsdjsakldf-"
        • "+2 3 4 ***"
        • ""
        • ...
    • 压力测试
      • 生成100个、1000个运算符题目
      • 运算100个、1000个运算符题目
      • 生成100万道题目需要多长时间
      • 运算100万道题目需要多长时间
posted @ 2017-03-21 11:07  0x1000  阅读(1510)  评论(34编辑  收藏  举报