开发流程 PSP2.1
PSP2.1
Personal Software Process Stages
预估耗时(分钟)
实际耗时(分钟)
Planning
计划
60 90 · Estimate
· 估计这个任务需要多少时间
60 90 Development
开发
580 1780 · Analysis
· 需求分析 (包括学习新技术)
100 80 · Design Spec
· 生成设计文档
50 120 · Design Review
· 设计复审 (和同事审核设计文档)
50 200 · Coding Standard
· 代码规范 (为目前的开发制定合适的规范)
30 30 · Design
· 具体设计
100 300 · Coding
· 具体编码
100 350 · Code Review
· 代码复审
60 550 · Test
· 测试(自我测试,修改代码,提交修改)
120 150 Reporting
报告
60 200 · Test Report
· 测试报告
20 150 · Size Measurement
· 计算工作量
10 15 · Postmortem & Process Improvement Plan
· 事后总结, 并提出过程改进计划
30 35 合计
700
2070
需求实现 : 使用 -n 参数控制生成题目的个数 使用 -r 参数控制题目中的数值 生成的题目中计算过程不能产生负数 生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数 每道题目中出现的运算符个数不超过3个 程序一次运行生成的题目不能重复(正在努力中) 在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件 程序应能支持一万道题目的生成 程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计 程序概述
实现判断函数是否重复思路 测试代码
为了提高搜索效率, 每一条算式用哈希值表示, 所有算式聚合成一张哈希表
若哈希值相同, 则认为算式相同, 那么重点就在哈希值函数的编写
哈希函数的编写:
按运算结果取模运算, 将所有算式均匀分布到哈希表中
去除括号, 按照括号内算式->乘除运算->加减运算的顺序, 对算式从左到右进行排列
对算式部分求哈希值, 若哈希值相同, 则认为是同一个式子
加入特例优化速度: 若两个算式只出现同等运算优先级的符号, 并且数值与结果都相同, 则认为是重复的. (设计弱点: 整个项目中, 一个算式只能生成一个左右括号, 没有实现多重括号, 所以此处使用哈希表判重是易于实现的.)
合作编程日志 2018-09-18 20:47:12 实现生成并写入文件,相关代码上传到Github
2018-09-23 10:33:53
继续调整思路。已经用正则表达式对字符串进行分割运算实现了多个符号存在时候的运算优先级顺序,但是在生成输出结果的时候遇到困难,解决方法是从Exercises.txt里面依次读取每一行,并对每一行进行运算后得出一个关于结果的标准CONTEXT字符串,再把CONTEXT字符串一次性写入Answers.txt中。此种做法1.可以计算任意符合要求的.txt文件,2. 利用CONTEXT一次性写入,极大优化了程序
2018-09-26 23:39:33
小组讨论和分析,全部重写算式生成函数,以及重写判断负数的算法
2018-09-28 16:04:17
在已有功能函数的基础上全部重写。因为团队合作中各种函数传参和处理没有讨论好。并且感谢俊豪同学及时提出问题,我已经写出的函数存在很多缺漏,以及有部分函数未按题目要求编写。/哭泣
合作心得:
昆乘: 合作过程中还是有非常非常多问题, 首先因为大家有选修课, 共同编程的时间并不多,其次是软件工程项目的时间计划没有做, 前面我已经实现了生成和计算然后就丢下了, 最后两天要提交了的时候才发现原来还有很多很多功能没实现. 然后最后赶进度, 函数还有很多很多值得改善的地方都没有做好. 两人小组的时间分配实在做得太差. 没有约定好哪个函数在哪个时间要编写出来, 哪个类什么时候结合, 哪个函数如何测试和优化 都没有计划出来. 因为没有提前合作构思和安排好各个类各个函数的接口, 导致所有函数有两次重写. 很多合作 和 时间计划相关的事情值得反思. 最大的收获明确使用各个类与功能并包装函数, 花了几个小时进行了性能优化, 觉得性能优化很有意思! 虽然还有一些函数还没优化. 编程能力还需要继续提升,算法和数据结构等也要重温.
俊豪: 合作一起同做一个项目比起一个人独自做相比较来说还更累一点,然而,对于存在问题的查找也更加深入。整个过程当中,有过争执,对于分数答案的一个生成两个人有不同的想法,昆乘想用正则表达式,而我觉得才用公倍数乘以有除号存在等式,而最终,因为我的算法有很大的bug,最终才用他的;除了争执,还有过讨论,一开始昆乘尝试一个人写生成函数时,在两人还没开始讨论的情况下,算法考虑不周全,比如,没有生成括号。最后两个人通过一起讨论,对需求进行一步步分析,最终得到一个比较完整周全的方案。整个过程下来,让我感觉到了两个人一起结对编程的不容易,合作本来是为了更好的编程,而不合理的合作却又会使得编程更加困难复杂。讨论沟通是整个过程中最为重要的事,否则会两人极其容易产生分歧,产生分歧时沟通更是需要,不然项目将很难做下去。
总的来说这是一次太匆忙的项目