《高效能的编程课件》由会员分享,可在线阅读,更多相关《高效能的编程课件(38页珍藏版)》请在金锄头文库上搜索。
1、 演讲人演讲人 时时 间间 *2006-07-10高效能的编程大纲成为高效能程序员的目的高效能程序员的特征高效能程序员的理念高效能程序员的工具箱成为高效能的程序员正如企业的目的是挣钱(成本,库存,资金流通,销售额),而程序员的目的是在有限的时间内增加自己的代码产出量(复用,质量,风格)什么才是一个好的程序员(质量 or 效率)?怎样才能成为更好,更高效,更优秀的程序员?目前的问题1.解决bug,复现错误,跟踪代码(故障机制)2.基础组件的更改,影响自己的代码(持续集成)3.修改一处代码,引发更多错误(覆盖测试)4.签入代码,但安装盘不可用(自动化脚本)5.一处代码,多处拷贝(重复的危害)高效能
2、程序员必须具备的关心自己的技艺Think in work!好奇,批判的思考者,批判的分析你读到的和听到的多才多艺,熟悉广泛的技术和环境善于利用和制造各种工具持续的改进有效的交流高效能程序员的理念不要容忍破窗户,做变化的催化剂不要试图隐藏自己的弱点,要诚实和坦率DRY-Dont Repeat Yourself无处不在的自动化留心大图景,持续不断的观察周围发生的事情(煮熟的青蛙)定期为你的知识资产投资重复的产生1.信息的多种表示(数据库表和类结构)2.代码中的文档(注释)3.文档和代码4.无耐性的重复(捷径但不有效,如软件版本号)5.开发者之间的重复(如日志记录机制,需要主动交流)无处不在的自动化
3、重复与枯燥的事应该让机器来做人容易出错与没有耐心机器适合做这些事让机器一次重复地、自动地做所需要的事任何重复的事都是可以自动化的先有思想才会有行动自动化的思路用自动化的思路来思考软件过程在开发过程中有哪些事情总是重复且枯燥,而不情愿去做?在哪些重复的事因为你不情愿去做,而会对你的开发过程造成不好的影响?有哪些事情你是希望能用机器帮你做到,而可以一劳永逸的方便地执行?找出来,并尽量自动化它们哪些是可以自动化的?编译、构建文档测试代码生成发布源代码控制配制基本工具箱1.纯文本的威力-储存知识的最佳格式保证不过时;易于理解维护;2.精通一种编辑器,将其用于所有的编辑任务(代码;文档;配置项;脚本等)
4、,如ultraedit, editplus3.使用shell鼠标vs键盘基本工具箱(续)代码风格检查(FxCop)Resharper(去除一些C代码中的不良代码)自动测试(NUnit)持续集成(CruiseControl)文档自动生成(NDoc)鼠标vs键盘启动一个notepad用多少次操作鼠标新手:开始-程序-附件-记事本(4)鼠标高手:桌面-快捷方式(2)鼠标高高手:点击快捷栏上的快捷方式(1)键盘新手:win+R-notepad(2)键盘高手:Ctrl+Alt+N(1)相同?使用鼠标时手要离开键盘,并回来、脚本的力量GUI的程序永远都是一个一个的单独实体如果需要完成GUI程序一开始没有提
5、供的功能,你只能扩展它(如果它提供)或者重写一个,或者再找一个比它更好的脚本可以快速与任意的组合完成一些用鼠标很难完成的工作可重复,并且自动化,只有写一次,而后方便的执行,不用每次都做重复的鼠标操作学习Shell是每一个关注自动化的、高效率程序员的必修课脚本威力示例找出修改日期比你的makefile更近的全部.c文件?GUI: 资源管理器-目录-点击makefile-记下修改时间-查找-*.c-选项-输入日期-确定或者:资源管理器-目录-查找-*.c-结果中排序脚本:find . name *.c newer Makefile print 练习题怎样来注册某一个目录下中所有子文件夹中的ocx文
6、件一次停掉或开启多个Windows服务一次修改多个环境变量如果定时的运行或个程序我们日常工作中修改BUG的步骤是怎样的?在IDE里编辑代码可能会需要点击check out的提示确定按钮点击编译按钮,或者是击打它的快捷键如果有错,则改正它在应用或者测试工程中测试刚才的功能提交代码,选择并点击check in按钮修改接口文档(如果需要的话)自动化的场景在IDE(或者任何你喜爱的编辑器)中编辑代码按下自动化的快捷键按钮机器自动的帮你编译、测试与提交代码并生成文档如果出错则继续否则、就没有了如果发现BUG(日常)打开源代码工程,重现它设定断点在调试状态重现它跟踪找到BUG除错再测试(如果耐心足够进行一
7、部分回归测试)提交如果需要更改接口文档(如果你还没有忘记)如果发现BUG(自动化)根据错误的自动收集(日志)发现问题所在大概的定位并重现(调试)它用单元测试描述它除错自动化完成机器帮你编译、测试、提交代码、生成文档并进行所有的回归测试错误收集的自动化错误的重现最重要的是数据与场景日志与收集产品版本OS与IE版本故障的文件与行号异常信息错误类型的唯一编码文档自动化NDocdoxgen测试自动化单元测试(NUnit)集成测试GUI自动化测试(robot)性能测试压力测试(Loadrunner)一个bug只抓一次举例NUnit风格?品格?性格?你的代码太有风格了,我能一眼就看出哪一段是你写的、Hum
8、?为什么有的函数用小写,而有的用大写,为什么有的变量用m_开始,而有的没有?那用H_开头是什么意思?噢,m_开头的那个是A写的,他以前用VC,而没有的是B写的,她喜欢java,H_自然是老黄写的,那是他的标志风格检查Code review风格可以有很多种,但是一个团队最好只有一种混合的风格是最坏的风格让工具自动为你做出提示或警告Checkstyle、 FxCop、clint静态的代码分析是额外的收获日常回忆(1)喂!我的组件怎么不能用了,昨天我还是能用的,你们做过些什么了?噢,我几天前修改了一个BUG,并改了一个接口;因为、我只能这样做天,我的组件可是需要今天提交的,你怎么不早点告诉我?(愤然
9、并无奈的却修改代码)日常回忆(2)嘿,我让你加的那个新的功能你可否做了?我等着它实现我的任务呢!做了,你没有看到吗?没有啊,你来看看!噢,你用的版本不对,请到、上拷一下最近的我什么时候总能得到你最新的版本?嗯,这个嘛、持续集成上面的回忆你曾经拥有过吗?如果答案是肯定的,那你肯定应该使用持续集成持续集成又称为每日构造(daily build)所有的源代码都在很短的周期内(几个小时-1天)之中从头构造与集成早崩溃优于最后才知道持续集成要完成的基本内容将所有源代码保存在单一地点,让所有人能从这里获取最新的源代码(和以前版本)使创建过程完全自动化,让任何人都可以只输入一条命令就完成系统的创建确保所有人
10、都可得到最新、最好的可执行文件一次持续集成成功的标准所有最新的源代码都被配置管理系统验证合格所有文件都通过重新编译得到的目标文件都通过链接,得到可执行文件运行所有的单元测试代码和其他的自动化测试脚本CruiseControl(.NET)CC与CVS、SVN、ClearCaseCC与NANTCC与NUNITCC与NCoverCC与FxCopCC与Simian练习题写一个简单NANT脚本显示Hello world!,并运行它。用NANT来编译一个C#工程用NANT来运行NUNIT测试Enjoy it!从现在开始,想想自己曾经重复做过的事?它是否可以被自动化?用什么方法可能做到这一点?决定在一年之内学会一种语言,并用它来改进自己的编程能力每个季度,阅读一本技术类或者非技术类的书籍提高我们的产能,享受我们的生活Q&A谢谢谢谢!