代码设计阶段基本思想
来源:互联网 发布:重庆seo推广服务 编辑:程序博客网 时间:2024/06/11 23:41
VC:断点跟踪,内存查看,变量跟踪
代码设计阶段包括:
环境搭建 系统架构设计:代码设计 : 工程级debug 。
时间比例为 2:3:5
工程级debug :
需要根据客户的接口需求调整和增加代码或模块以适应。
对非内核代码的调整重构工作。
尽可能加快反馈环和缩小反馈环的目标代码片即:规划–>设计–>验证—>修改—>再验证。
原创代码的设计,基本遵循自顶向下设计,逐步求精面向过程程序设计方法,而不是自下向上设计。
至少以下经验,实际实现过大约万行级的国际标准的算法整体重写设计。我认为至少针对万行级的代码还是可操作的。
第一步,准备环境
第二步,写好main 函数,就是一个hello world 。
第三步,增加信息断点打印代码和文件输入输出
第四步,测试输入输出是否打通
简单的讲,就是将输入文件的所有内容。读出来,并写到输出文件里。最好都是二禁制或都是文本格式。然后用文件比较命令在命令行下比较。通常我自己写了个小程序,进行二进制比较,出现错误会给出出错点的位置信息并在首次出错时停住。
这样做的目的是明确了你的程序,输入有了。输出也有了。而且中间转通了。
第5步 这个阶段就很长了。逐步细化你上述三个函数。慢慢实现你的目标。
而每次细化完毕,都需要灌入数据,并对结果进行文件比较方式的判断。看期望和实际运行结果的差异。当出错时,通过检测出错数据在文件中的位置,检测属于第几次循环写出,该循环写出时,对应处理模块各个环节的中间值是否等于预期(通过信息打印方式实现)。
信息打印属于向strerr中写入信息。你需要重定向该文件,或者直接在屏幕上打印。但尽可能打到一个专门的文件中。
最后的建议。每次改动,特别是模块增加时,先用个空函数(有代码,但只是象征性的过次数据)模拟该动作,在细化内部实际操作。而且尽可能的步步为营,版本上传(通常本机我会自己做个版本服务器),上传前,一定要跑,并对输出进行比对验证。这样做的好处是不用单步跟踪,而采用正向设计分析方法来判断已有的代码改动的错误。
有效的推进依赖大量中间测试数据的正确性。大量中间测试数据其实是可以构造出来的。根据算法分析。或并行的第三方原理性代码中间截取出来的。
当不存在原理性代码时,上述做法,依赖于你写两套版本的代码。将两套不同实现方法的代码的数据进行交叉比对。其理论基础是:
假设A出错的概率是1%,B出错的概率也是1%。当A,B同时有同样错误的概率是1%%。
因此理论上可以大为降低,两套版本同时出错的可能。这其实是没有办法的办法。
以上方法只是代码设计的方法,和系统构架(系统设计分析)与测试数据构造没有关系。
测试数据构造是门学问。评判测试数据是否好还是不好,我个人的意见是,根据是否能有效保证BUG浮现来决定。
测试数据非常重要。
- 代码设计阶段基本思想
- 设计模式基本思想
- Spring 的基本设计思想
- MapReduce的基本设计思想
- 毕业设计代码设计阶段总结(一)
- FPGA四种基本设计思想
- 《Python中的模块设计的基本思想》
- Cuckoo Hash 基本思想和代码实现
- 贪心算法基本思想和代码框架
- 选择排序基本思想和实现代码
- 快速排序基本思想以及代码实现
- 设计阶段
- 微博数据库3个变迁阶段背后的设计思想
- 项目阶段总结:思想感悟
- JQuery的设计思想(JQuery的基本用法)
- mysql分表处理基本设计思想和实现
- 十二、面向对象设计的基本思想和特点
- java中单例设计模式,基本思想和目的。
- [转]git checkout 命令详解
- iOS面试题七问
- 未来 已来:读《人工智能的未来》札记
- 证书Certificate以及android打包签名
- UML类图几种关系的总结
- 代码设计阶段基本思想
- jQuery选择器总结
- springmvc配置全局的日期转换器
- Android快速开发框架之xUtils---注解模块
- C++ 从文件中提取特定字符串
- opencv 鼠标操作 setMouseCallback
- C与C++学习笔记 --- g++ 和 gcc 学习笔记
- 建立https链接的SLL验证证书失效问题
- Retrofit中如何正确的使用https和证书锁定