结对项目

教学班级:005
项目地址:https://github.com/gzhGit/Intersectprogit

项目 内容
这个做业属于哪一个课程 班级博客
这个做业的要求在哪里 结对项目
我在这个课程的目标是 学会团体和我的的软件开发方式
这个做业在哪一个具体方面帮我实现目标 结对编程,体会合做

在开始实现程序以前,在下述 PSP 表格记录下你估计将在程序的各个模块的开发上耗费的时间。

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

看教科书和其它资料中关于 Information Hiding,Interface Design,Loose Coupling 的章节,说明大家在结对编程中是如何利用这些方法对接口进行设计的。

Information Hiding:对这一项应用比较少,全部类的属性和方法基本都是public,没有特别隐藏的方法或者变量。
Interface Design:只是建立一个能工做的应用程序是不够的。 用户期待直观的,吸引人的,强壮的应用。因此咱们采用gui来完成与用户的交互。图形界面简单直接,易于操做。
Loose Coupling:不少不须要交流的参数和变量都封装在模块单元内部,不用被其余单元知晓,其余模块单元只须要知道提供的函数接口须要的数据类型,以及返回的数据类型。github

计算模块接口的设计与实现过程。设计包括代码如何组织,好比会有几个类,几个函数,他们之间关系如何,关键函数是否须要画出流程图?说明你的算法的关键(没必要列出源代码),以及独到之处。

咱们在core模块中,为点、线、圆各建了一个类。其中,线分为直线、线段、射线,这三种都属于线这个类,用类中的一个整型变量来区分(0-直线,1-射线,2-线段)。而后线与线求交点,而后线与圆求交点,而后圆与圆求交点三个函数(直线、线段、射线都属于线,用同一个函数处理,在求出交点后,根据射线和线段的性质对交点取舍)。这些外部单元模块不须要知道,core向外提供了三个重载函数solve做为借口,外部模块只须要按头文件中的函数声明顺序输入参数便可(输入的参数就和结对项目中给的样例是同样的,好比直线就输入一个字符‘L’,四个整型表明两个点坐标,采用这样的标准输入来下降耦合度)。算法

画出 UML 图显示计算模块部分各个实体之间的关系。

计算模块接口部分的性能改进。记录在改进计算模块性能上所花费的时间,描述你改进的思路,并展现一张性能分析图(由VS 2015/2017的性能分析工具自动生成),并展现你程序中消耗最大的函数。

咱们起初用来存储几何类型数据信息的数据结构是set容器,可是set容器是一个基于红黑树的容器,他须要维护树结构的平衡和顺序,这会带来时间开销,然而这些功能对于此次的项目是没有必要的,因此咱们又换用了vector容器。vector容器至关于就是一个动态数组,他的插入、删除速度要因为set,可是数组扩容时,vector须要复制整个数组,也须要大量的时间开销。vector还有一个致命的问题。在插入几何对象时须要判断这个集合对象是否已经存在容器中,要解决这个问题,vector须要遍历一遍整个数组,在分析图中咱们也能够看到,在插入点时,为了不插入重复点,须要大量时间遍历数组,占到了90%以上的时间开销。因而咱们决定使用hash结构来存储几何类型,能够避免对容器的遍历
编程

看 Design by Contract,Code Contract 的内容:

http://en.wikipedia.org/wiki/Design_by_contract
http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx
描述这些作法的优缺点,说明你是如何把它们融入结对做业中的。
优势:
(1)编写者和使用者均可以获得足够的信息。
(2)对于编写者来讲,明确接口功能,检查预期行为,帮助debug,缩小了检测时间的花销。
(3)对于使用者来讲,必要的有关接口的信息,给了使用者正确的使用方法。
缺点:编写须要额外的时间开销。数组

计算模块部分单元测试展现。展现出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路。并将单元测试获得的测试覆盖率截图,发表在博客中。要求整体覆盖率到 90% 以上,不然单元测试部分视做无效。

首先咱们考虑全部的几何类型组合,共有10种(从4个选2个,好比LC相交,从4个选1个,好比LL相交),再根据分支覆盖状况添加测试样例。






微信

计算模块部分异常处理说明。在博客中详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景。

咱们设计了4种异常状况:
(1)输入几何类型字符不合法,输入了L, R, S, C以外的几何类型
(2)输入的点的坐标不在规定范围内
(3)输入的直线的两个端点重合
(4)输入的圆的半径r小于等于0


数据结构

界面模块与计算模块的对接。详细地描述 UI 模块的设计与两个模块的对接,并在博客中截图实现的功能。


ui模块如图所示,有两种输入方式:(1)直接从文件导入; (2)输入几何对象数据信息来增长集合对象。
用户输入数据后,ui模块调用core模块的solve函数接口,将这些数据传到core模块中去运算,core将算出来的交点坐标返回给ui模块,ui在下方的显示界面上绘制出几何图形和交点。架构

界面模块的详细设计过程。在博客中详细介绍界面模块是如何设计的,并写一些必要的代码说明解释实现过程。

咱们使用了qt的信号与槽机制来实现以上功能。首先咱们所用的组件有6个push button,分别是上图中给出的6个功能,每一个push button对应一个被用户点击都会发出一个clicked()信号(这个信号函数由qt的库提供),咱们的工做主要是包这些clicked()对应到相应的功能上,也就是qt的信号与槽机制。如下是这几个槽函数的函数声明以及6个push botton的声明,以及注释说明每一个槽函数具体干什么。函数

private: 
        QPushButton     *btnFile;
        QPushButton     *btnHelp;
        QPushButton     *btnLine;
        QPushButton     *btnCycle;
        QPushButton     *btnInfile;
        QPushButton     *btnAbout;
    private slots:
        void on_btnFile(bool checked); //btnfile按钮的clicked(bool)信号的槽函数,点击将会进入选择要导入的文件路径
        void on_btnHelp(bool checked);//btnHelp按钮的clicked(bool)信号的槽函数,点击将会跳出一个文本窗口介绍本UI界面
        void on_btnLine(bool checked); //btnHelp按钮的clicked(bool)信号的槽函数,点击将会跳出一个窗口,用户在这个窗口输入想要插入的Line的参数
        void on_btnCycle(bool checked); //btnCycle按钮的clicked(bool)信号的槽函数,点击将会跳出一个窗口,用户在这个窗口输入想要插入的Cycle的参数
        void on_btnInfile(bool checked); //btnInfile按钮的clicked(bool)信号的槽函数,点击将会把先前读入的文件信息转化为几何图形绘制在画布上。
        void on_btnAbout(bool checked); //btnAbout按钮的clicked(bool)信号的槽函数,点击将会跳出一个文本窗口,窗口中显示当前已输入几何图形的数字信息。

描述结对的过程,提供两人在讨论的结对图像资料(好比 Live Share 的截图)。关于如何远程进行结对参见做业最后的注意事项。



微信语音形式,界面分享靠截图。工具

说明结对编程的优势和缺点。同时描述结对的每个人的优势和缺点在哪里(要列出至少三个优势和一个缺点)。

优势:(1)两我的起到了一个相互监督的做用,有助于双方(尤为是在写代码的一方)集中于工做。 (2)两我的一块儿工做,能够随时讨论程序算法、架构等问题,集思广益。 (3)一我的在写代码的同时,另外一我的在debug,极大的下降了出bug的可能性。 缺点:须要两我的有比较默契的合做,两人实力差距也不该过大。

相关文章
相关标签/搜索