软件工程的项目的最大特点就是针对未知领域开发研究的不确定性。除非一个领域你翻来覆去的做了很多遍,一般来说,很难给出一个准确的完成时间。如果项目中涉及的开发点比较多,需要各个击破,同时要保护好程序的可读性,可维护性,尤其是要让程序复杂度保持在尽可能的最低水平。
[程序复杂度]
程序复杂度是指程序分支在各种情况下执行路径的总和。一般来说,总和越低,程序复杂度也越低。代码就越容易维护和管理。

[软件工程的开发时间估算]
软件工程项目的时间估算是个比较困难的课题。因为,对于需求双方来讲,时间都是金钱。抛开利益纠葛不谈,因为这部分涉及到很多技术以外的因素,本期只讨论从技术分析的角度如何判断项目的可行性以及如何估算项目开发时间。

一个项目会分出几个大块,每个大块又可以继续细分下去,直到小块的完成时间可以以天计算,从而可以以小时计算。
然后,把这些时间小时数加起来既有了大体的开发预估时间。
[软件项目的测试集成时间估算]
接下来就是测试集成的时间估算,这部分跟开发任务的最大不同是,开发解决的是如何实现的问题,集成测试解决的是如何验证的问题。
过程上看上去有些类似,也是把一个整体的项目分成几大块,然后再分块,直到每块的验证可以以天计算,从而算出小时数。
[验证修复时间]
在验证过程中会需要做开发修复的工作,这部分时间也要计算的。
[开发中的瓶颈]
项目开发中会遇到一些瓶颈,从而会增加开发的实际时间,也就增加了开发的实际成本。这些瓶颈主要有这么几个方面:
. 未知领域的突破
这种瓶颈没有捷径科研,都是硬骨头,慢慢熬。而且不能急于求成,步子迈大了,迈快了,都可能会扯着蛋。
. 开发人员离职,后继无人
这种情况发生以后,这部分对应的开发任务就会停滞不前。而时间不等人,开发的实际成本依然持续消耗着。
. 客户需求发生重大变化
导致这种情况发生的可能性因素比较多,我们只看理性的因素,比如市场上出现了新的竞争对手,原有的需求存在不合理的设计,公司并购重组导致业务转向。
[投资者的算盘]
任何一个投资者都想着用最少的钱得到最好的东西,这是资本的逐利性决定的。
所以,来在投资者的问题主要是
. 做这个项目你要多少钱?
. 这个项目多长时间做完?
. 我觉得这个项目很好,你能不能给我们类似的?
. 以上几个问题循环播放
[开发者的算盘]
开发者首先要考虑的是,这个项目的可行性,能不能做出来。
然后就是有多少未知领域的任务,继而考虑多久能做出来。
[如何合作]
开发者与投资者的合作关系首先要基于彼此信任的基础之上。没有这个的话,后面的一系列工作都很难开展。
. 现金支付
这种合作就是投资者支付现金,直到项目完成。
. 股份支付
这种合作是投资者以股份入股的方式,邀请开发者进行项目开发。
. 现金加股份
上述两种的结合。
具体运作中可能是上述三种皆有。
最后,祝愿好的开发者和精明的投资者都可以找到适合自己的合作伙伴。
本期就到这里,谢谢各位。