软件开发的隐喻

来源:互联网 发布:cf一键领取软件 编辑:程序博客网 时间:2024/04/28 11:35

         昨晚刻了代码大全的第二章,很有感想,想一下,那一章,真的有很多东西.而最令我赞同的是两个印喻,软件开发向生长,另外一个是软件开发象建房子.

          其实我个人以前一直认为,软件工程是工程,建筑也是工程,他们两者之间肯定有共通的地方的.我在大三的时候一直在想为什么软件开发不可以向建房子那样一气呵成,先规划好,然后再进行开发.一直到现在两年了,还是没有怎么搞懂这个问题.CC2说帝国大厦在建的时候每一辆车都是提前十五分钟安排的.这让我想起了最后期限里面的那几个被抛弃的用来做实验的项目组,他们就是其他组的提前量.可是我们在实际开发中根本就没有提前量这种东西.我现在在客户现场,维护一个根本捧都没有碰过的系统,系统经过了很多个项目组的开发,像一团乱麻.如果软件工程是建筑的话,我应该提前得到这个系统的项目文档,熟悉一下这个系统,然后再到客户现场.试想一下,有那一个物业公司不知道自己管理的建筑的紧急出口在哪里的?

               二,软件工程的实施过程与建筑其实蛮不同的.软件工程开发过程中,会有多少年来个协作员?会有多少个轮班?会有多少提前量?各个公司不同,但是基本上都没有,特别是中国的软件公司.我们的提前量是用加班来构成的.轮班?软件开发的逻辑特性使得,轮班是绝对不可能发生的事情.那么协作员应该有了吧,有,就是那些愿意帮你的自己还在做事的人.

        第三,我觉得这一点是根本性的不同.建筑是一种物料是现成的工程,他们是工程建设,而软件工程是系统构架.工程建设有一整套的工程规范,有一大堆现成的材料.而系统架构了?软件工程还没有一套成型的工程规范,虽然现在很多RUP,AGILE,原形等等的东西,但是他们并不是标准,他们只是推荐实施方式.

         任何一个系统都会有不稳定性,只是大还是小而已.黑客帝国中的系统的不稳定性一直没有找到方法解决,我想也是因为这个原因.而这些不稳定性是我们难以控制的.在建筑中,我们可以控制材料,控制员工的实施水平,我们可以用计算机模拟受力.....我们可以把一切不稳定因素考虑起来.但是在软件开发中,我们可以控制员工的素质,但是没办法控制他的编码质量,设计质量.用建筑来比较就是,我们没办法保证水泥和钢筋是合格的.为什么?因为这是人的逻辑产品,每一个人随着心情和环境的不同,逻辑思考能力也会不同.我们没办法保证,可能有人会说那我叫专人监督,总可以吧?可以,但是你会用两倍甚至10倍的钱做一个系统不?我们的不稳定因素还和设计有关,这是更难控制的地方,什么地方该用什么构架技术,什么地方该用什么设计模式,这并没有一个标准,也没有一个可验证它为错的公式.只有到了开发后期,或者工程的二期我们才知道,原来这样会.........

        还有一点值得注意的是,软件工程的测试与建筑的测试是不同时期的,建筑的测试一般是通过公式计算,计算机模拟,都是在还没有开始建设的时候就完成的.可是软件工程是工程完成后才可以进行系统的测试的.虽然我们有模块测试,但是个人觉得模块测试就好像在建筑中测试每一包水泥的质量一样.而测试驱动,我觉得就是测试每一个根钢筋是否直径是适合的(可能用铝合金窗,和窗户做比喻更合适).至于一般的集成测试就是建筑中的在建工程抽样检查了.我们可以看到,建筑和软件工程其实并不是那么的相同.