结对编程作业

项目 内容
这个作业属于哪个课程 班级博客
这个作业的要求在哪里 作业要求
我在这个课程的目标是 熟悉敏捷开发,提升多人协作技能
这个作业在哪个具体方面帮助我实现目标 获得结对开发的经验,熟悉GUI开发
教学班级 005
项目地址 https://github.com/yorkyer/PairProgramming.git

PSP

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

注:学习新技能的过程是不连续的。

Information Hiding, Interface Design, Loose Coupling

对于信息隐藏,主要是将类属性设置为私有, 若外界需要使用,则设置get,set方法。对于我写的c#,如图:

对于UI部分,使用MVC原则,隔离UI部分代码与数据逻辑部分代码,如图:

对于接口设计,得益于面向对象的反射能力,设计统一接口:SimpleObject Intersect(SimpleObject obj),这个接口对于所有的几何对象都适用,如图:

对于松耦合,由于自己将解析字符串并构造几何对象、计算几何对象间交点的功能封装进了Helper类,对于命令行程序或窗口程序,只需与IntersectLib.HelperCompute, Parse, ParseLine 函数交互,最大限度的降低了耦合能力。下图分别为命令行程序与GUI程序调用类库的场景。

计算模块接口的设计与实现过程

如下UML图,共有6各类.其中四个类表示几何对象.一个类是其基类.这些代表几何对象的类统一暴露出Intersect接口。核心函数是基类中的三个静态函数用于计算直线与直线、直线与圆、圆与圆的交点。然后在子类中利用这三个函数,外加判断交点是否在射线或线段上的条件,实现任意几何对象之间的交点计算。

之所以将辅助类也放入计算模块,是因为解析字符串、计算所有交点等一些函数ConsoleApp、UPWApp都会用到,故设计了一个静态类来进行代码复用。

UML

计算模块接口部分的性能改进

Design by Contract,Code Contract

契约编程通过(内建的或附加的)语言特性强制程序的前置条件 、后置条件以及不变式得到保证。优点是软件正确性进一步提高,缺点是增加了软件开发负责性。本次作业中几乎没有涉及。

计算模块部分单元测试展示

构造思路:对每一个类的每一个方法进行测试,包括各种正确情况和异常情况。

计算模块部分异常处理说明

异常 样例 场景
TypeException Q 1 2 3 4 用户输入不支持的几何类型
CoordinateRangeException L 100000 3 2 1 用户输入的坐标超出支持范围
RadiusIllegalException C 2 3 -3 用户输入的圆的坐标为负数
PointCoincidentException R 1 2 1 2 用户输入的点对重合
IntersectionsInfiniteException L 0 0 0 1 L 0 -1 0 -2 用户输入的直线、线段、射线对象部分重合使得交点无数结对过程

界面模块的详细设计过程

这次作业我是用UWP写的.

以下xaml文件定义了UI的主要界面.

  1. 打开文件

    点击 OpenFile 按钮,触发 AppBarButton_Click_OpenFile 函数,该函数会打开win10的文件管理器。当用户选择文件后,将文件内容描绘出来。

  1. 计算交点

    点击 ReFresh 按钮,会触发 AppbarButton_Click_ReFresh 函数,该函数计算交点个数并显示,同时绘制交点。

  2. 添加对象

    点击 Add 按钮,会触发AppBarButton_Click_Add 函数,该函数提示对话框让用户需要添加的集合对象。若用户输入不合法,则进行提示。之后点击 ReFresh 按钮计算新的交点。
    )

  1. 删除对象

    鼠标双击需要删除的对象,会触发 Object_DoubleTapped 函数,该函数删除该对象。之后点击 ReFresh 按钮计算会绘制。

UI 的完善方向:

  • 实现画布的缩放与拖动
  • 绘制坐标轴
  • 优化交互流程
  • 优化错误提示

界面模块与计算模块的对接

界面模块的设计采用了 MVC 的思想,分离 UI 代码和 Model 代码。对于UI部分,仅仅是交互逻辑,而把描绘、计算的任务放在了 Model 里。

在界面模块里,存储 SimpleObject 的列表,然后通过调用 Helper 里的函数来完成数据解析和计算。

结对编程

过程

由于无法面对面沟通,我们便通过社交软件+github的方式进行开发。

结对编程的优点和缺点

  1. 优点:
    • 两人合作能有更强的解决问题的能力。
    • 结对能更有效地交流,相互学习和传递经验。
    • 结对编程让两个人所写的代码不断地处于“复审”的过程。
  2. 缺点:
    • 编码不再是私人的工作,而是一种公开的“表演”。
    • 默契不够导致投入产出比下降。

结对对象的优点和缺点

结对伙伴
优点 喜欢学习新知识;认真负责;有效沟通 高效负责;编程能力优秀;细致严谨
缺点 测试不够细致;不注重工程性 沟通不够主动
原文地址:https://www.cnblogs.com/yorkyer/p/12559102.html