您的位置:首页 > 编程语言 > Go语言

从李世石与AlphaGo对战说开去-软件研发中这么多坑,你选手动还是自动?

2016-03-11 16:01 323 查看
(原创文章,转载请全文,否则必究)

一直想写篇文章聊一聊软件研发中的手动和自动这个话题,因为确实见到太多事实,也听到了太多争论。这两天刚好看到李世石和AlphaGo的对阵,于是就事论事。

两局的弃子认输,满世皆惊。

可以说是机器的胜利吗?在我看来答案是否定的,因为人工智能的前两个字儿仍旧与人相关。AlphaGo的后台逻辑和算法是人写的,所以应该说是人的逻辑+机器的运算能力战胜了李世石,而不是机器战胜了李世石。

同样的问题来了,在软件研发的过程中,每一个环节都可以自动化:需求分析、概要设计、详细设计、软件实现、软件测试、产品发布…那么自动化工作是否能够代替手动工作?我已经接触了上百个研发团队,无一例外的遇到了这个问题,管理者们盲人摸象,游移不定,不知如何选择。

荀子有句话说的很好:“假舆马者,非利足也,而致千里,假舟楫者,非能水也,而绝江河。君子生非异也,善假于物也。” 能够制造和使用工具,是人与动物的最大区别。但是否取用工具和如何取用工具,在于人类自己。

先来看看这把双刃剑的正面:软件研发过程中的特定工作离不开人的创造能力,因而无法自动化。举个简单的例子:设计阶段,一千个项目有一千种需求,抽丝剥茧的设计工作需要人脑去搭建和实现。别幻想自动化技术帮你生成符合自己需求的软件详细设计方案,出来的靠谱情况不多。

而另一面则是:自动化技术能够协助研发团队尽可能的节省时间,提高生产效率,编码、测试、打包…手工的命令行敲击不如自动化的执行处理。

那么如何选择手动方式还是自动化?我认为最关键的是两个字:成本。

去年在佛山ItechClub讲师交流的过程中,了解到工业实际应用中对自动化的一个普遍观点:如果单个机器的年度成本小于30万人民币,那么就是划算的-因为现在工人每年的人力成本大于10万人民币,但工人不能24个小时都工作。

同样的,当前互联网热导致研发人员成本居高不下,程序员的年度平均成本往往高达40-50万人民币,他们的每一秒钟都弥足珍贵,必须尽可能节省。自动化技术如果能够协助大幅度提高生产效率,那么就是值得的。简单的举一个例子,前两天长沙某研发团队咨询测试流程改进,他们的产品上线后自动崩溃,被客户退回,核心研发高工调试了整整两个月,才发现是缓冲区溢出导致-最终确实是找到了问题的根源,但两个月的宝贵时间已经被消耗了。你可能会说这是研发自己的水平不够,但是我们看到很多知名的牛人工程师也容易犯极其简单的错误。其实最根本的原因是人的精力有限,很多时候你想着要把内存释放却忘了,加了锁却没有解锁,空指针判断后还是直接使用….这些问题在Code Review时也很难检测出来,因为要跨越多个函数和文件的进行数据流分析,当它们爆发出来的时候,往往影响巨大。而话说回来,我们把这个问题交给了自动化技术(Coverity静态分析)- 只用了两分钟,能够节省的时间显而易见。NIST(美国国家标准与技术研究院)公布了各软件研发生命周期阶段中修复Bug所需的时间成本:早期阶段找到和修复每个缺陷平均能够节省6个工时-在我看来,这种状况下使用自动化技术往往更为必要。因为成本上的投入产出比一目了然。到了单元测试和功能测试阶段更是如此,自动化技术能够大幅度的节省时间,何乐而不为呢?

总而言之,在软件研发过程中,我更推荐的是手动+自动化的结合,而不是简单的一棒子打死。取子之长,补彼之短,方可臻于完美。

关于我:关于我:七年经验的研发测试咨询师。Coverity中国首名员工,目前在Synopsys SIG。乐仗剑天下,更喜聊天饮茶,如果你想咨询研发测试流程改进或Coverity产品,欢迎直接联系

Bao.Han@synopsys.com

Tel:13311307163。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: