zoukankan      html  css  js  c++  java
  • 结对编程项目-四则运算

    结对编程项目-四则运算

    什么是结对编程?

    引用《构建之法》-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万道题目需要多长时间
  • 相关阅读:
    codevs1288 埃及分数
    [BZOJ1697][Usaco2007 Feb]Cow Sorting牛排序
    [BZOJ1628][Usaco2007 Demo]City skyline
    [Usaco2005 Mar]Out of Hay 干草危机
    [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居
    [BZOJ1691][Usaco2007 Dec]挑剔的美食家
    [BZOJ1668][Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富
    [BZOJ1593][Usaco2008 Feb]Hotel 旅馆
    [BZOJ1637][Usaco2007 Mar]Balanced Lineup
    [BZOJ1650][Usaco2006 Dec]River Hopscotch 跳石子
  • 原文地址:https://www.cnblogs.com/vertextao/p/6593339.html
Copyright © 2011-2022 走看看