软件工程方法与金融领域实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2.2 软件

“软件”这一名词是在20世纪60年代初从国外传来的,当时许多人都不清楚它确切的含义。从字面上看,Software一词由soft和ware两个单词组合而成。有人翻译为“软制品”,也有人翻译为“软体”,现在统一翻译为“软件”。目前公认的解释是:软件是计算机系统中与硬件相互依存的另一部分,它是包括程序(按事先设计的功能和性能要求执行的指令序列)、数据(使程序能正常操纵信息的数据结构)及相关文档(与程序开发、维护和使用有关的图文材料)的完整集合。

Program(程序)=Data Structure(数据结构)+Algorithm(算法)

Software(软件)=Program(程序)+Software Engineering(软件工程)

Software Company(软件公司)=Software(软件)+Business Model(商业模型)

以上3个公式可以表明程序、软件、软件公司的构成和关系。程序(源程序)是一行一行的代码,是建立在数据结构上的一些算法。但光有代码是不行的,代码不会自己运行,要将其编译成机器能识别的目标代码,而编译不仅仅是cc和link命令。一个复杂的软件不但要有合理的软件架构(Software Architecture)、软件设计和实现(Software Design & Implementation),还要用各种文件来描述各个程序文件之间的依赖关系、编译参数、链接参数等。这些都是软件的构建,是工程性的事务。另外,软件加上商务模型就构成了一个软件公司。

软件早期作为计算机硬件的零件来开发。到20世纪50年代中后期和60年代早中期,软件开始被独立地开发、销售和使用。大家通常认为软件是一种工具:从20世纪50年代起,软件主要作为计算工具;从20世纪60年代起,软件主要作为商业计算和数据处理工具;从20世纪70年代起,软件主要作为计算和信息处理工具。要对软件有清楚的认识,我们首先必须知道软件的发展,软件大体上经历了程序—软件—软件产品这3个发展阶段。

●第一阶段(程序):在世界上出现了第一台电子计算机以后,就有了程序的概念。从20世纪50年代到60年代,人们曾经把程序设计看成一种任人发挥才能的技术领域。当时人们一般认为写出的程序要能在计算机上得出正确的结果。

●第二阶段(软件):传统软件开发(作坊式的软件生产),其开发工作主要依赖于开发人员的个人素质和程序设计技巧。其特点是缺少与程序有关的文档,由于程序量和规模都不大,通常由个人编写,不需要考虑团队合作,因此项目管理松散,程序可重用的程度差。

●第三阶段(软件产品):现代软件开发适应社会化大生产的要求,强调分工和协作,重视对项目的管理和软件质量的把握,采用工程化的方法进行文档的控制和代码的管理。

现代软件开发模式经历了巨大的转型,如单枪匹马写出WPS的求伯君、单独完成BASIC开发的比尔·盖茨等创业英雄在现代软件开发中越来越少见,而越来越多的项目经理都具有丰富的管理经验。项目的划分也越来越细,项目不再依赖于单个程序员的发挥和技巧,而依靠团队(Teamwork)的力量。实行现代软件开发的软件生产企业——微软公司,1975年时只有3名员工,营业额仅有16000美元;1989年时已经有8000名员工,营业额达80亿美元;而发展至2000年时,员工已多达35000名,营业额达240亿美元,利润更高达150亿美元,成为世界上最大的软件公司。

还有一些与软件密切相关的工作,比如源代码管理(Source Code Control),也叫软件配置管理(Software Configuration Management)。软件团队成员每天都在不断地修改各种源代码,因此要保证软件在不断的修改中能稳定质量,不至于崩溃。另外还可能需要为某个需求写一些特殊功能,并把这些功能合并到主要版本中。这些程序还有32位版本、64位版本等。又如质量保证(Quality Assurance),也叫软件测试(Test),需要有一系列的工具和程序来保证程序的正确性。当然,这些工具和程序本身应该是正确的,这样才能保证其他软件的质量。

在软件的生命周期(Software Life Cycle,SLC)中,还要有人负责软件项目管理(Software Project Management)。一个软件得先找到顾客,顾客有各种需求,要把应实现的需求都实现。从需求分析(Requirement Analysis)开始,软件开发者需要做各种事情,比如设计(软件架构)、实现(写数据结构和算法)、测试,到最后的发布软件。软件在运行过程中还会出现这样或那样的问题,也许要时不时地给软件打个补丁,即软件的维护(Software Maintenance)。