个人项目——四则运算生成器和解析器(补充版本)
2015-09-22 23:59
357 查看
1、预计耗费时间 vs 实际耗费时间
预计:
实际:
2、软件开发过程中遇到的Bug;
1)对四则运算的基本原则解析不够透彻:除法不支持除数为零,减法不支持结果为负
在不合法情况出现时应当重新生成随机真分数,此处应注意完整的循环条件
2)需要统一对同一类的操作:
类的属性有很多,将会在特定的方法中发挥作用,因而对于大部分类的实例来说,有些属性无关紧要,都不需要进行初始化。但这样做会对调试和改进程序性能造成很大的阻碍,不能及时查看各个属性值,因此对属性进行统一的初始化非常重要。比如:每生成一个分数,就要计算其真实值(double),打印字符串。
在本次项目中,处理的数据格式有三种:非负整数、真分数、假分数,为了便于编程和统一操作,生成和计算的过程中都使用真分数的形式,只有在输出时才进行具体形式的判断。
我对所有随机生成的分数都进行了如下的初始化,即使对于很多临时变量来说分数的值并没有用途
3)分类讨论的思想非常重要,能够便于理清编程的思路,让程序无懈可击:这里以分数除法为例进行分析
4)调试的过程中首先判断错误可能出现的位置,然后在多个地方加入printf进行标记,使用断言asssert。也可以尽可能的缩小范围,预测可能的原因,对错误点进行定位
5)判定等价四则运算表达式:生成逆波兰数,在执行加法或者乘法时,总是将较小的数记录在先
考虑到这一步实现起来可能比较麻烦,因此我先对完全相同的表达式进行删除:
在此基础上,我设计了一个栈,专门记录全部操作数的计算顺序,实现了完整的查重功能:
6)方法功能的专一性(事先确定),否则编程会很混乱,调试的时候找不到应当检测的函数
7)在求逆波兰数的过程中需要进栈出栈,因此变量的初始值非常重要
3
、正确性证明
(1)-n 30 -r 10 基本功能的实现——生成四则运算并对答案进行解析
(2) 删除等价四则运算表达式:
我将被判断为等价表达式的打印出来,其中包括完全相同的表达式,还有经有限次加法、乘法交换重合的表达式
执行 -n 1000 -r 2
如下图所示,左边为最终生成的表达式,右边为筛选中删除掉的表达式
4、性能优化
我对查重功能进行改进,对访问过的表达式进行标记,并且只对计算结果相等的表达式进行查重判断,有效减少了判断时间
优化之前:
优化之后:
(鉴于vs2013的性能分析工具无法使用,更深一步的性能优化未完待续.....
预计:
PSP2.1 | Personal Software Process Stages | Time |
Planning | 计划 | |
· Estimate | · 估计这个任务需要多少时间 | 2days |
Development | 开发 | |
· Analysis | · 需求分析 (包括学习新技术) | 1days |
· Design Spec | · 生成设计文档 | 30min |
· Design Review | · 设计复审 (和同事审核设计文档) | 10min |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10min |
· Design | · 具体设计 | 60min |
· Coding | · 具体编码 | 1.5days |
· Code Review | · 代码复审 | 30min |
· Test | · 测试(自我测试,修改代码,提交修改) | 0.5days |
Reporting | 报告 | |
· Test Report | · 测试报告 | 2h |
· Size Measurement | · 计算工作量 | 30in |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 1h |
合计 | 2days |
PSP2.1 | Personal Software Process Stages | Time |
Planning | 计划 | |
· Estimate | · 估计这个任务需要多少时间 | 3days |
Development | 开发 | |
· Analysis | · 需求分析 (包括学习新技术) | 2h |
· Design Spec | · 生成设计文档 | 0s |
· Design Review | · 设计复审 (和同事审核设计文档) | 0s |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 0s |
· Design | · 具体设计 | 2h |
· Coding | · 具体编码 | 3days |
· Code Review | · 代码复审 | 30min |
· Test | · 测试(自我测试,修改代码,提交修改) | 1days |
Reporting | 报告 | |
· Test Report | · 测试报告 | 2h |
· Size Measurement | · 计算工作量 | 0s |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 0s |
合计 | 3days |
1)对四则运算的基本原则解析不够透彻:除法不支持除数为零,减法不支持结果为负
在不合法情况出现时应当重新生成随机真分数,此处应注意完整的循环条件
2)需要统一对同一类的操作:
类的属性有很多,将会在特定的方法中发挥作用,因而对于大部分类的实例来说,有些属性无关紧要,都不需要进行初始化。但这样做会对调试和改进程序性能造成很大的阻碍,不能及时查看各个属性值,因此对属性进行统一的初始化非常重要。比如:每生成一个分数,就要计算其真实值(double),打印字符串。
在本次项目中,处理的数据格式有三种:非负整数、真分数、假分数,为了便于编程和统一操作,生成和计算的过程中都使用真分数的形式,只有在输出时才进行具体形式的判断。
我对所有随机生成的分数都进行了如下的初始化,即使对于很多临时变量来说分数的值并没有用途
3)分类讨论的思想非常重要,能够便于理清编程的思路,让程序无懈可击:这里以分数除法为例进行分析
4)调试的过程中首先判断错误可能出现的位置,然后在多个地方加入printf进行标记,使用断言asssert。也可以尽可能的缩小范围,预测可能的原因,对错误点进行定位
5)判定等价四则运算表达式:生成逆波兰数,在执行加法或者乘法时,总是将较小的数记录在先
考虑到这一步实现起来可能比较麻烦,因此我先对完全相同的表达式进行删除:
在此基础上,我设计了一个栈,专门记录全部操作数的计算顺序,实现了完整的查重功能:
6)方法功能的专一性(事先确定),否则编程会很混乱,调试的时候找不到应当检测的函数
7)在求逆波兰数的过程中需要进栈出栈,因此变量的初始值非常重要
3
、正确性证明
(1)-n 30 -r 10 基本功能的实现——生成四则运算并对答案进行解析
(2) 删除等价四则运算表达式:
我将被判断为等价表达式的打印出来,其中包括完全相同的表达式,还有经有限次加法、乘法交换重合的表达式
执行 -n 1000 -r 2
如下图所示,左边为最终生成的表达式,右边为筛选中删除掉的表达式
4、性能优化
我对查重功能进行改进,对访问过的表达式进行标记,并且只对计算结果相等的表达式进行查重判断,有效减少了判断时间
优化之前:
优化之后:
(鉴于vs2013的性能分析工具无法使用,更深一步的性能优化未完待续.....
相关文章推荐
- Python多线程编程之多线程加锁
- java编写代码需要注意的小细节
- HDU - 2191 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活(多重背包)
- wrong number of arguments,java方法反射时数组参数的坑
- test
- Opencv中HSV通道的图像的颜色判定
- JAVA生成验证吗jsp接收配合strut2实现
- Bootstrap Themes & Templates
- eclipse启动tomcat无法访问
- 2.精通前端系列技术之seajs和gruntJs结合开发(三)
- android Junit
- Mono 之 Jexus
- OSPF不规则区域解决
- Ember.js 入门指南——路由简介
- smarty模板三种变量来源
- 个人博客作业 #1
- Python 使用 OS 模块实现目录遍历
- 虚拟机Ubuntu下怎样访问Win7资源
- 32. JavaScript 调试
- JavaScript权威指南_159_第17章_事件处理_17.1-事件类型-传统事件类型