【asp源码栏目提醒】:网学会员为需要asp源码的朋友们搜集整理了源码阅读 - 软件工程相关资料,希望对各位网友有所帮助!
源码阅读自然是计算机学习的捷径之一其重要性在此就不再赘述。
因项目需要最近在读OpenSSH OpenSSL 的
源码库一开始进展奇慢龟速后来掌握了一些技巧后快了一些。
在此将我总结的所谓的“技巧”贴上来我先扔出一块砖大家拿玉的砸过来 读一份好的
源码就像挖宝藏。
1.工欲善其事必先利其器
源码阅工具 桌面软件或web开发推荐 ms vs 或eclipseplugins即相应的IDE即可 linux项目相关推荐使用source insightwinesamba。
根据个人习惯而定。
2.选择好的项目 好的项目质量过关的项目 个人认为质量过关的代码应该至少具备 1软件架构、模块接口设计良好高内聚、低耦合 2代码书写规范、流程清晰 3注释、文档、及相关网络资料齐全 具体到某个项目的优劣可以参考主流论坛对之的评价。
除此之外好的项目也必须是适合自己的项目。
根据自己的水平兴趣专业方向等做出选择当然也有更多情况下是因为一些其他的限制条件比如工作或学习需要。
这样做的目的是让我们能够有目的的去读一则因为实际需要易于端正态度、不会轻言放弃二则于情景中阅读
源码更容易理解事半功倍。
举例说明 要学习
asp.net的架构设计、设计模式的相关内容并且毕业设计想实现一个电子商务网站的可以阅读一下 petshop 如果要学习http协议的具体实现可以阅读一些web server的
源码micro_httpd、shttpd、boa、apache???? 如果学习龙芯或MIPs CPU架构熟悉mips汇编建议阅读mips模拟器
源码pcspim 、vmips、msim ???? ???? 3. 关注Doc 很多开源项目中的readme、QA、buglist、manual等都会提供大量的信息了解这些文档显然会对整个项目的把握很大的帮助然而这部分也是最容易被我们忽略的。
我们也可以通过 wiki google扩展这些资料。
4.搭建环境 一个可运行的环境对于代码阅读会有很大的帮助 1便于我们从功能面上了解项目 2通过调试、跟踪等手段理解
源码运行的流程。
5.分析项目架构 通过以上几步已经大体把握了项目的架构我们在结合
源码可以分析出项目的架构手段如下 1借助项目目录 2分析项目管理工具MakeFile 3浏览
源码这里不必具体到每个函数遇到关键函数可以阅读注释即可 4通过文档、google等 此时我们已经对项目的架构应该有了七八分的了解有些问题即使想不透彻也没关系留到下面咱们秋后算账。
在下一步开始之前我们应该动手将项目的架构画出来不明白的地方空出来可以借助visio、Rose、smartDraw等工具。
注这是必须的因为这是我们寻宝的地图它可以使我们不至于迷失在茫茫的
源码海洋之中。
6.深入
源码 根据上一步的分析我们开始深入到各个模块逐个歼灭顺序大体如下 1自底向上的原则 这和我们在软件设计阶段自顶向上逐步求精的思想相反模块内部我们需要自底向上逐步cover此模块这也是我们做上一步的工作的主要原因。
2公共模块优先 公共模块基本上是一些通用性比较强的代码可复用性比较高例如一些工具性代码 这些代码的模块接口通常比较清晰这些代码基本上可以算是金子啦这里的很多代码、甚至整个模块我们都可以直接用到其他项目中去。
我们要将这些代码存入自己的代码库这样还不行我们还要加上这些代码的使用说明和可运行的实例代码。
3虚拟数据模拟接口让每个模块都可以独立运行。
模拟这个概念比较重要有点孤立敌军的意味。
用虚拟数据包围当前模块、切断与其他模块的关系将模块独立开来歼灭之。
这一步需要的技巧比较多难度通常和所选的项目有关这也是前文中我们强调低耦合的原因。
关于这些我们可以参考单元测试中的Mock原理在书写大量伪装数据的同时我们对模块间接口交互、数据流等有了更深层的了解。
这一步我们可以站在软件设计者的角度来思考此时应该可以写出此模块的详细设计文档。
7.总结 一个
源码项目阅读完了我们再要回顾整个过程把开始地图中留下的空填上。
我们不能满足于抽取了一些代码对这个项目甚至类似的项目有了一些了解这些仅仅是鱼更重要的是要学会打渔的方法正所谓千金在手不如一技傍身。
早期共产党为啥能够在如此艰苦的环境下存活甚至发展壮大个人认为主要是源于不断地思考和不断地总结我们要时常猜测设计者的设计意图 为什么这样做为什么不那样做 如果是我来设计我应该怎么实现应该避免什么注意什么 这样做真的最好吗有没有其他更好的实现方法 把这个将这些思路整理出来可以称之为
源码阅读心得。
就这样我们阅读一个项目基本上三遍就差不多了 1浏览得出模块设计概要图 2细品得出模块的详细设计丰富了个人代码库 3回顾得到此项目设计的精髓 最后不要忘记在相关主流社区共享这些资料留下联系方式如有纰漏会有人给你指出的人人为我我为人人。