• 结对编程作业


    项目 内容
    这个作业属于哪个课程 班级博客
    这个作业的要求在哪里 作业要求
    我在这个课程的目标是 熟悉敏捷开发,提升多人协作技能
    这个作业在哪个具体方面帮助我实现目标 获得结对开发的经验,熟悉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. 缺点:
      • 编码不再是私人的工作,而是一种公开的“表演”。
      • 默契不够导致投入产出比下降。

    结对对象的优点和缺点

    结对伙伴
    优点 喜欢学习新知识;认真负责;有效沟通 高效负责;编程能力优秀;细致严谨
    缺点 测试不够细致;不注重工程性 沟通不够主动
  • 相关阅读:
    观察者模式(Observer)
    外观模式(三层解耦)
    建造者模式(Builder)
    简单工厂
    单例模式(Winform窗体的实现)
    20180213 字符串spilt方法,字符串打包zip方法
    20180212第一发:Python与Json编码解码举例
    Eclipse插件Fat Jar
    java学习之浅谈多线程4SwingWorker
    Android SDK manager 闪退
  • 原文地址:https://www.cnblogs.com/yorkyer/p/12559102.html
Copyright © 2020-2023  润新知