专访Jeffery Richter:Windows 8是微软的重中之重
Jeffery Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffery Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。
该内容已经被标记书签!
标记书签错误,请重试!

作者 Mark Figley 译者 罗小平 发布于 2007年8月14日
多数大型开发组织都有一套自己的编码和实践规范。但是对这些团队而言,光是将这些规范文档化,并保证实时更新,就是一个巨大的挑战。此外,在工作中长期、忠实地执行这些规范和标准,难度就更大。我们团队在这些方面做了积极探索,在整个构建过程(build process)中实现了代码规范的自动化监管。
积极主动、未雨绸缪是工作取得好成果的重要保证。即使在很成熟的组织中,建立了代码复审流程,审查结果也能直接反馈给责任人,但如果复审是在事后进行,仍然存在很大风险。因为这个时候,错误已成现实,很可能已经进入测试和产品环境,从而造成实质性损失;而这时候再回头修改,开发人员也有抵触情绪,缺乏积极性。从我们的经验看,构建过程必须自始至终处于受控之中,在所有的软件开发过程中,对应的代码审查工作都应该自动完成。只有这样,错误代码才能在第一时间消除,从而避免到最后阶段采取回溯式审查方法所产生的成本高昂和开发人员抵触等问题。不带任何感情色彩的自动化系统可实时向开发人员反馈Web页形式的报告,帮助他们解决可能存在的问题;而且通过反复提醒,也可以让开发人员被动熟悉新的编程规范。
为保证我们的上述策略真正落到实处,必须做好两项工作:
我们使用的代码自动审查工具是Parasoft的Jtest,当然还有很多工具可以完成类似功能。总的来说,Jtest是一个有效的管理工具,不过也存在一些问题。比如在使用之前,必须搭建一个基础运行环境;另外,它并不是一个黑盒式的解决方案,这也是背离我们希望的。Jtest包括静态分析和动态分析。其动态分析功能比较强大,不过这已超出了本文的讨论范围。
4年前,我们团队因为数据库连接未关闭问题焦头烂额。资源未能在try/catch/finally块中得到正确清理(大家是否感觉很熟悉?),因此引入了Jtest。在当时,Rod Johnson大仙(译者注:Spring框架和《Expert One-on-One J2EE Development without EJB》的作者)还没有下凡,没有给我们带来JdbcTemplate,因此很多公司都还在与此问题奋战。而解决这类问题,恰是Jtest的强项。其运作原理是:分析Java类的结构和内容,检查它们与既定规则的匹配程度。比如规则可能是这样的:若在某个方法体中创建或从连接池中取得了数据库连接,那么必须保证存在一个try/catch/finally块,且在finally块中关闭了连接,或将连接放回了连接池。4年前,我们就利用Jtest设立了这样一个规则,将其严重程度定位一级,并在构建系统中设置:当Jtest错误出现时,构建过程自动暂停当前工作。这个系统工作得很好,数据库连接问题再也没有出现过。
现在,我们有了Rod和他的JdbcTemplate,但对于那些还没有转换到Spring的遗留Java应用来说,上述规则仍可发挥作用。此外,Jtest还可以强制执行很多其他结构性标准检查工作。比如,我们团队实施日志标准后,就引入了另一项规则,以杜绝代码中再出现System.out.println语句的可能。上述这些功能,不过是Jtest的冰山一角。在Jtest魔盒中,规则多达数百项,你还可以根据自己需要创建新的规则。
但现在的一个问题是,Parasoft对服务端Jtest的支持不够理想。该公司的主要产品是一个Eclipse插件,此插件负责在IDE内部对代码执行静态和动态分析。这不是我所想要的,我需要的是一个基于服务端的Jtest产品,服务端环境可以集成并调用它的功能。Parasoft认为我们讨论的这种最终式的组织控制和监管,可以通过购买IDE插件(安装到所有开发者的IDE),外加一个中心化的Parasoft报告服务器实现。但我们发现事实并非如此。Parasoft不能保证所有开发人员在将代码签入CVS前都会自觉执行静态检查。我们没有办法控制这类插件,没有Jtest插件报告“停!在有一级错误前你不能签入”这样的控制点。因此,这种审查不宜放在客户端执行,而必须有一个中心化的控制点,也就是一个中心化的BMS。我们需要的是服务端版本的Jtest,由我们自己完成对它的集成(虽然有点麻烦)。
当然,我得再次强调,Jtest不是唯一选择。Adrian Colyer等人谈到过利用AspectJ完成代码强制检查。在中心化的监管服务器上,这样的功能很容易实现。我不能确定Jtest是否能满足你的全部要求,不过它有免费的优势。其他同类型产品以及eclipse插件一般能完成Jtest的不同部分功能。如果你想图省事,可以选择eclipse中的标准插件JDT,它支持从格式和句法两个方面对源代码做标准检查。
软件自动化监管策略远比你选择什么样的技术构建解决方案更为重要。如下是我们多年来从实践中总结的经验教训:
尽管我们在实施过程中,还遇到了很多细节问题,但这样一个主动的、自动化的软件审查过程给我们的组织带来了巨大利益。我们的软件质量得到了提升,而且更重要的是,依靠这样一个可信赖的系统,无需投入大量精力维护。人工维护过程的工作量非常浩繁。通过合理设计你的支持结构,的确可以在投入成本更低的前提下,给整个组织带来更高的安全性。
Mark Figley:拥有8亿美元资产的美联保险公司(AIG United Guaranty)的架构组负责人。
查看英文原文:Implementing Automated Governance for Coding StandardsJeffery Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffery Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。
云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。
淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011。
2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。
12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011。
篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011。
本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。
随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令。这条新增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8可以顺利实现Lambda表达式做技术准备。在这篇文章中,我们将去了解JDK 7这项新特性的出现前因后果和它的意义。
没有回复
关注此讨论 回复