个人项目作业

项目 内容
这个作业属于哪个课程 班级博客
这个作业的要求在哪里 作业要求
我在这个课程的目标是 学好并应用好软件工程
这个作业在哪个具体方面帮助我实现目标 学习个人软件开发流程
作业正文 如下

github地址:https://github.com/pyb19991125/Experiment.git

解题思路描述

拿到题目后,以为是求在一定范围内的交点个数,采用分治的思想,随机挑选一条直线将平面分开,将所有直线分为左边的直线(未与这条直线相交)、右边的直线(未与这条直线相交)、中间的直线(与这条直线相交),然后分别递归调用左边和右边,再计算中间直线分别和左右直线相交的交点个数,加上中间直线自己相交的交点个数。

后来发现题目看错了,因为时间原因,直接采用两两搜索的方法,每两条不平行的直线算出交点,最后将这些交点去重,输出交点个数。

设计实现过程

代码包括三个主要函数:

两个结构体:

input_and_deal函数读取输入文件内容,将直线变为Ax+By+C=0(使用y=kx+b可能会导致斜率无穷大);

add_point函数:每两条直线相比较,如果不平行,计算出交点坐标,放入向量中;

point_number函数:将相同的交点去重,因为是double类型,使用abs(x1-x2)<eps进行高精度的比较;

三个函数顺序执行;

单元测试测试这三个主要函数和求两个数最大公因数的函数,测试中间结果和最终结果:
(没有设计对边界的用例,只考虑了一般情况下的测试,测试不够细致)
单独测试求两个数最大公因数的函数

设计一些用例测试中间结果和最终结果

改进的思路

性能分析图:

在改进程序性能上花费时间30分钟;

最大消耗函数为point_number()函数,计算不同交点个数;改进思路,求不同交点个数先快排后去重。

代码说明

通过公式求A,B,C;

这段代码用于求不平行直线的交点坐标,因为有可能A或B等于0,需要分别讨论;

比较交点坐标,记录不同的交点个数。

时间记录

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

因为看错了需求,以为交点必须在范围内才算,重新设计,写代码,所以和预估的时间差别很大。

经过 Code Quality Analysis 工具的分析


posted @ 2020-03-10 18:32  pyb1999  阅读(133)  评论(2编辑  收藏  举报