这基本是软件工程中所描述的软件开发的一个全流程,可以从中看出软件构建的过程绝对不止写代码这一项,而是由很多工作组合而成。软件构建在本书中的定义,更集中在编码环节,以及围绕代码所涉及的其它一些活动。下图中灰色的椭圆代表构建活动,而各模块大小意味着该主题在这本书中所占的比例。
这本书中的重点是介绍如何进行软件的构建,从上图中可以看出,软件构件中主要的活动是编码与调试,但是也会涉及到其它的一些工作,如详细设计、单元测试、集成等。想要完成整个软件产品,还需要很多非构建的活动,如项目的管理、需求分析、架构设计、维护等等,每一个活动也都会对项目结果产生很大的影响。而这些部分,则不在本书的介绍范围内,大家可以去参考其它关于各主题的书籍。

老外写的技术书中,经常会出现隐喻(Metaphors)这个单词,其实个人理解就是一种类比的方式。计算机领域有太多的专业词汇,很多时候会把用一些形象的事物来描述一些专业领域较难理解的晦涩的术语,久而久之,大家也就都习惯于使用这些类比的词汇。比如说Bug、蠕虫、病毒、木马等等。
对于软件开发来说,有的人说它是一门科学,而有的人说它是一门艺术。众说纷纭下,也体现了软件开发的复杂性。在复杂的软件开发过程中,人们经常会把建筑的过程与软件开发的过程进行类比。两者确实过程的相似度比较高,双方都需要进行前期的预算估计、都需要进行详细的设计、都需要建造或开发的过程,甚至最后的验收交付也都有异曲同工的感觉。
除此之外,两者还有一些相似的地方。比如盖房子不需要建造房子里所有的东西,仅需要购买现成的家俱、电器等等。软件开发的时候,同样也不会自己实现所有功能的代码,可以利用现有的第三方库或组件去实现。在对建筑整体设计的风格上进行模式的归纳后,这种方式甚至也被带到了软件开发行业,著名的设计模式,就是从建筑的设计模式发源而来。
怪不得现在的程序员,都戏称自己是搬砖的码农,同样在隐喻自己与建筑工地上的民工兄弟一样,在辛苦的劳动着。
▍软件构建的前期准备在开始构建软件之前,一定要做好充足的准备,千万不要着急去开始写代码。项目的规划、需求的全面分析、设计高质量的架构等等一系列的工作,就连专业的程序员也未必能够把这些工作做到位。但这些内容并不在本书的涵盖范围之内,如果有兴趣的读者可以查看其它相关资料。
只有真正经历过软件开发全流程的人才能真正体会到问题发现得越少,代价就越小是什么意思。在需求阶段引入的一个错误,在发布之后才发现的话,那么相比于在需求阶段解决该错误的时候,在发布之后解决该问题所花费的时候是之前的10~100倍。
对于不同类型的软件,各个阶段的要求也是不同的,详细可参考下面的列表:
软件开发的方式有很多种,最为大家熟知的就是瀑布模型,一步步按步就班的以前一步骤结束做为下一步骤的开始,但这种模式的弊端也经常被人诟病。因此,越来越多的项目开始采用迭代式的开发方法,迭代的方式也有很多不同的方法论,最为著名或热门的,就是现在流行的敏捷开发模式。
但绝大部分的项目在完整的开发周期内,都不会完全按照瀑布或迭代的方式进行,而“尽早地把关键需求和关键架构确定下来”则是一切项目成功的保证。
不同的模式带来的整个开发阶段的工作方式也有所不同,一种方法是预先对80%的需求做出详细说明,其它的随后阶段内同步进行,还有一种替代方式是预先只对20%的需求做出详细说明,以不断迭代增量的形式进行开发。
无论何种方式,不同阶段之间总会存在一些重叠的情况,完全不重叠的情况几乎不可能出现。
头条福利专享,推荐内容下载链接:链接:https://share.weiyun.com/5mfPSdg
请关注头条 开发者读书会 帐号 ,私信回复“代码大全”获取链接密码。