zoukankan      html  css  js  c++  java
  • 结对编程作业

    一、作业信息

    二、PSP

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

    三、封装、接口与松耦合

    本次作业我们的项目分工为:

    • L:实现求交点功能的扩展

    • X:编写UI界面

    那么为了使得对接顺利,编写求解交点的同学需要将该模块封装,与编写UI界面的同学保持独立性,提升对接效率。那么如何保持求解交点功能的独立性呢?为此,L同学设计了求解模块的接口,求解计算的功能对调用者不透明;命令行输入模块及UI输入模块仅调用接口函数,输入几何图形,得到该几何图形的交点。个人认为降低耦合程度的最好办法就是面对耦合少给数据和函数,这里我们设计的接口中内容如下:

    1 class Point //坐标(x, y)
    2 {
    3     ...
    4 };
    5 6 std::set<Point> get_inters(char type, double x1, double y1, double x2, double y2);
    7 std::set<Point> get_inters(double p, double q, double r);

    根据我们程序的设计,最小化了接口规模,实现松耦合。

    四、接口设计与实现

    接口模块共有一个类两个函数:

    • class Point:点类,用于存储交点

    • get_inters(5参数):求线类与已有几何图形的交点

    • get_inters(3参数):求圆与已有几何图形的交点

    函数的动作流程如下图

    五、UML

    (注:略去了部分属性和方法)

    六、性能分析

    从该性能分析图中可以看出,set的查找和排序占据大量的CPU资源,对于此我认为实用unordered_set会改善性能,因为其查找效率更高一点,但是我们本次作业并没有进行此项改进,只对计算交点的算法进行了改进。不同于上次作业的用公式求,本次作业采用向量法求解交点,改进了计算的效率。

    七、Contract

    • 优点

      • 大量的计算机科学研究开始探究正式的规范说明和验证,它允许在编译时检查程序的正确性;

      • 将API的需求和承诺与实现相分离;

      • 契约约定比文档约定方式更“同步”一些;

    • 缺点

      • 增加了代码量

      • 难以检测错误

    由于之前没有系统学过contract,本次作业没有采用这种方式约定,而使用文档的方式来进行约定。

    八、单元测试展示

     

    接口函数是软件的最顶级函数,其功能为求出图形与已经记录的图形的交点,每个类型的对象都进行测试:

    • 当前线对象求与线的交点

    • 当前线对象求与圆的交点

    • 当前圆对象求与线的交点

    • 当前圆对象求与圆的交点

    以此实现高覆盖率,代码如下:

    1 Assert::AreEqual((int)get_inters('L', 0, 0, 1, 1).size(), 0);
    2 Assert::AreEqual((int)get_inters('R', 1, -1, -1, 1).size(), 1);
    3 Assert::AreEqual((int)get_inters(0, 0, 2).size(), 3);
    4 Assert::AreEqual((int)get_inters(2, 0, 2).size(), 4);
    5 Assert::AreEqual((int)get_inters('S', 0, 3, 3, 0).size(), 2);

    九、异常处理说明

    错误类型输入(其中一种)输出
    圆半径非正 1
    C 0 0 0
    R should > 0!
    类型未定义 1
    a  0 0 1
    Undefined type!
    线类两点重合 1
    L 1 1 1 1
    Line should be a point!
    未输入几何个数 L 1 0 0 1 No geometry number input!
    类型错误 1
    -
    Wrong type!
    参数错误 1
    L - - - -
    Wrong parameter!

    十、结对过程及评价

    优点:

    1、互相鼓励,不容易沮丧:团队工作能增加成员的工作积极性。因为在面对问题的时候,会有人一起分担,共同尝试新的策略。

    2、互相监督,不容易偷懒:两个人一起工作需要互相配合,如果想偷懒去干别的,就会拖延工作进度。

    3、互相学习编程技巧:在编程中,相互讨论,可以更快更有效地解决问题,互相请教对方,可以得到能力上的互补。

    4、可以培养和训练新人:让资深开发者和新手一起工作,可以让新人更快上手。

    5、多双眼睛,少点 bug:两人互相监督工作,可以增强代码和产品质量,并有效的减少 BUG。

    缺点:

    1、与合不来的人一起编程容易发生争执,不利于团队和谐。

    2、经验丰富的老手可能会对新手产生不满的情绪。

    3、开发者之间可能就某一问题发生分歧,产生矛盾,造成不必要的内耗。

     PTN
    优点 代码风格良好 容易接受新知识
      代码框架清晰 编程思维活跃
      善于交流 擅长开发算法
    缺点 编程基础薄弱 软件使用不统一

     

    注:UI模块部分的博客: https://www.cnblogs.com/csdcounter/p/12560377.html

  • 相关阅读:
    第十六节:Linq用法大全(四)
    第十五节:EF Core大数据量处理(一)之EFCore.BulkExtensions
    第十四节:EF Core性能优化
    查看mysql执行的线程,并杀掉他
    docker安装与卸载
    新手根据菜鸟教程安装docker,从No package docker-io available开始遇到的坑...(转)
    MySQL启动出现The server quit without updating PID file错误解决办法
    Linux下彻底卸载mysql详解
    Linux 下的 Redis 安装 && 启动 && 关闭 && 卸载
    Linux安装mysql
  • 原文地址:https://www.cnblogs.com/lucien98/p/12560679.html
Copyright © 2011-2022 走看看