本博客使用的是邹欣老师博客上的讲义(http://www.cnblogs.com/xinz/archive/2011/11/27/2265425.html)。
本次是邹欣老师软件工程讲义中的第一次作业的第一题,具体要求是参考另一篇博客http://www.cnblogs.com/jiel/p/4810756.html。
其中的Code Quality Analysis工具我还不知道是什么东西,希望能有人能指教 一下。(已经找到,在VS的分析栏中的窗口中)
下面PSP表格是预计各个模块所化时间。
PSP2.1 | Personal Software Process Stages | Time/h |
Planning | 计划 | |
· Estimate | · 估计这个项目需要多少时间 | 0.5 |
Development | 开发 | |
·Analysis | ·需求分析(包括学习新技术) | 1 |
·Design Spec | ·生成设计文档 | 0.5 |
·Design Review | ·设计复审(和同事审核设计文档) | 0.5 |
·Coding Standard | ·代码规范(为目前的开发指定合适的规范) | 0.5 |
·Design | ·具体设计 | 0.5 |
·Coding | ·具体代码 | 2 |
·Coding Review | ·代码复审 | 0.5 |
·Test | ·测试(自我测试,修改代码,提交复审) | 1 |
Reporting | 报告 | |
·Test Report | ·测试报告 | 1 |
·Size Measurement | ·计算工作量 | 0.5 |
·Postmortem & process Improvement Plan | ·事后总结,并提出过程改进计划 | 2 |
合计 | 10.5 |
实际各个模块所花时间
PSP2.1 | Personal Software Process Stages | Time/h |
Planning | 计划 | |
· Estimate | · 估计这个项目需要多少时间 | 0.5 |
Development | 开发 | |
·Analysis | ·需求分析(包括学习新技术) | 2 |
·Design Spec | ·生成设计文档 | 0.5 |
·Design Review | ·设计复审(和同事审核设计文档) | 0 |
·Coding Standard | ·代码规范(为目前的开发指定合适的规范) | 0 |
·Design | ·具体设计 | 4 |
·Coding | ·具体代码 | 4 |
·Coding Review | ·代码复审 | 0.5 |
·Test | ·测试(自我测试,修改代码,提交复审) | 2 |
Reporting | 报告 | |
·Test Report | ·测试报告 | 0.5 |
·Size Measurement | ·计算工作量 | 暂无 |
·Postmortem & process Improvement Plan | ·事后总结,并提出过程改进计划 | 暂无 |
合计 |
四则运算题目生成程序设计文档
- 首先应有一个函数ReadEquation(string s) ,读入一行字符,把其转化为一个算式。
- 设计一个数据结构Fraction ,能表示正整数和真分数。
- 设计一个数据结构Mode,能表示一个算式。
a) 计算结果没有负数(包括中间结果)
b) 除法一律表示为真分数
c) 运算符个数不超过三个
d) 如何判断两个Mode相同
e) 能够计算算式的结果
4. 使用命令行参数控制生成个数(n)和数值范围(r)。
5.程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计
四则运算题目生成程序编程设计(3h-10/23, 1h-10/24)
由于文本太大,不方便放此处,在下面会给出链接。
代码设计给我的最大的感触就是其将高层的逻辑思维工作和低层的代码撰写工作分隔开来,使得代码逻辑上比直接写来的更加缜密全面,而且代码撰写时也省了很多脑力来逻辑思考,然后能花精力放在代码整洁性上,使得代码可读性增强。其次就是这样让写代码分成了两个部分,那么这两个部分其实就是一个检验的过程,使得代码的错误尽可能小,代码的效率也就提高了。(其实这里有点一个人实现结对编程的意思。)
性能分析
首先mian()函数占据程序运行时间的91%,其中产生表达式和将表达式转化为字符串两部分耗时最多。而在randEuqaion()函数中,构造函数和析构函数占的比重较大,这里就可以考虑使用一个全局变量来省去析构的时间。
结果
能实现1000个算式的生成以及答案的分析,但是目前只能支持带括号的expression的计算但不能生成带括号的expression。但是由于代码结构设计较为模块化,这里如果想升级只用修改randEquation函数即可。
代码以及代码具体设计我都放在:https://github.com/chencjGene/SoftEngineering 有兴趣可以参考。
(拖延癌晚期,一个小工程写了半个月,总算是完结了 == )