1.4 该怎么做
学习软件开发,首先要了解软件产业本身。2007 年,我国软件产业的销售收入达到了5800亿元,这是一个很有前途的行业。下面介绍这个产业的运作过程。
1.4.1 软件产业的一般过程
图1.4说明了软件产业的一般过程,图1.4中描述的不仅是软件开发单位开发软件的基本过程,也描述了软件应用单位中对软件的大致应用过程,其中涉及的两个主要单位分别是软件开发单位和软件应用单位。
图1.4 软件产业的一般过程
软件开发单位:开发软件的企业的内部一般有开发设计人员,有的公司没有销售人员,仅仅负责开发,自己并不进行软件销售,而是交给代理商进行销售。
有些软件开发单位表面上给人的感觉就是纯软件研发单位,但这类公司通常还从事系统集成,因为大部分的软件应用单位要上马一个项目时,一般将硬件(如计算机、网络等设备)的采购和软件产品的招标捆绑在一起,因此,这些做软件研发的单位,一般都具有很强的系统集成能力。有的公司是以硬件闻名的,如联想、华为等公司;还有的公司是以运营闻名的,如Google、盛大(游戏公司)等公司,这些公司闻名于世的是它的某个产品的运营,而不是软件开发本身。
典型的以软件开发和系统集成为主的公司有东软集团股份有限公司(主要业务是电信、电力、保险、医疗等行业管理软件,http://www.neusoft.com/),杭州信雅达系统工程股份有限公司(主要业务是金融管理系统,http://www.sunyard.com/)等。
典型的以硬件开发和销售为外在形象的公司有华为集团(目前是世界上前三大网络产品提供商,http://www.huawei.com/cn/)等。
典型的以运营闻名的软件企业有盛大(http://www.snda.com.cn/cs/index.jsp)公司等。盛大公司是一家游戏企业,虽然也开发游戏软件,但是该公司更知名的是其运营能力。
软件应用单位:首先要区分软件应用单位和最终用户,软件应用单位是软件使用的公司或者企业,并不一定是最终用户,如移动通信系统的计费系统,中国移动公司是软件应用单位,而最终用户可能是一个移动手机的用户。
软件开发单位开发的软件分为两种:一种是通用软件,另一种是专用软件。不论哪种软件,都需要通过销售渠道销售给客户才有机会盈利。软件开发单位销售软件的渠道有两种:一种是自行销售,就是通过自己的销售团队去销售;另一种是通过代理销售,就是将软件以一定的折扣价格给代理商,由代理商负责销售,签订合同,或者负责部分维护和实施工作。当然,很多企业都会开展两种营销体系。还有一种软件开发企业,没有自己的独立营销体系,成为软件外包企业,专门为其他公司做软件的研发,甚至只进行研发的一部分(如编码),这类企业在沿海地区(如大连、苏州、杭州等地)蓬勃发展。
销售通用软件一般不需要经历过多的软件研发过程,因为软件已经由软件开发商开发成型,不需要过多的修改,因此,通用软件大多会通过代理商进行销售。比如,联邦软件等软件销售公司,销售的通常是通用软件,网上(如天空软件等)下载的软件,基本上都是通用软件。图1.5是两种典型的通用软件。
图1.5 通用软件
专用软件一般仅用于一个或者数个单位。如计费系统,每个省份的情况可能差别较大,通常,一个开发单位承接一个省份的计费系统后,都作为一个专门项目开发。不过,通用项目和专用项目之间,并没有一个完全的界限。比如ERP系统,在ERP开发公司来看,本身是通用项目,但由于每个单位都有实际不同的情况,因此需要进行定制,这部分工作就是开发专用软件的工作。因此,专用软件可能会以通用软件为基础进行定制研发。图 1.6 是典型的专用软件,由于每个省的政策不同,因此软件公司在承接浙江省行业社会保险服务网这类软件时,肯定需要定制。
图1.6 典型的专用软件
软件项目开发应首先区别是专用软件还是通用软件。如果是通用软件,则直接由开发单位或者代理商销售给客户,不需要经过定制过程。通用软件在第一次研发阶段,需要经历软件开发的整个生命周期,在软件成熟后,就不需要每次应用都要经历需求、开发等过程。如瑞星杀病毒系统,每位客户只需要花费100元左右购买一个系列号,瑞星公司不可能为某个客户做定制开发。如果是 ,则每个应用单位在实施的过程中,都需要经历需求、设专用软件计、开发、测试、实施等过程,这是软件典型的生命周期。
通用软件和专用专用软件之间没有明显的鸿沟,有些软件已由开发单位做成通用软件了,但是,每个单位实施的时候,都需要经过软件的二次开发和定制,就不能说这个软件就是通用软件或者就是专用软件。但是,很明显,专用软件和通用软件的开发过程有较明显的差异,通用软件要适应各个企业的应用环境,一般来说,其系统更稳定,开发代价更高。
在一般的软件工程中,讨论的主要是软件的需求、设计、开发、测试、实施等各个过程。本书也将围绕具体的案例,就这个过程展开。
1.4.2 软件的开发过程
上面描述了软件产业的一般过程。软件项目开发与实施这个课程,主要关注软件的开发过程,也就是图1.4描述的专用软件开发中带有斜线的部分,图1.4描述的是大致的应用过程。如果按照总体步骤划分,又可以分为计划阶段、开发阶段、维护阶段,如图1.7所示。图1.7描述的是具体的从项目角度考虑的过程,而图1.4主要是从产业角度考虑的过程,图1.4涵盖了开发单位中与软件开发有关的过程,而图1.7描述了软件开发单位所经历的详细的过程。
1.计划阶段
计划阶段可分两步:制定计划和需求分析。
(1)因为软件是计算机系统中的一个子系统,所以要从确定的软件子系统出发,确定工作域,即确定软件总的目标、功能等,开发这样的软件系统需要哪些资源(人力和设备);作出成本估算,而且还要求作出可行性分析,即在现有资源条件下能否实现这样的目标;最后要提出进度安排,并写出软件计划文档。对上述问题都要进行管理评审。
(2)在管理评审通过以后,要确定系统定义和有效性标准(软件验收标准),写出软件需求说明书,还要开发一个初步用户手册,这里要进行技术评审。技术评审通过以后,再进行一次对软件计划的评审,因为这时对问题有了进一步的了解。因为在制定计划时,数据较少且经验不足,所以对制定的计划需要进行多次修改,以尽量满足各种要求,然后再进入开发阶段。
2.开发阶段
开发阶段分为三个步骤:软件设计、程序编写和软件测试。
(1)对软件进行结构设计,定义接口,建立数据结构,规定标记。
(2)对每个模块进行过程设计、编码和单元测试。
(3)进行集成测试和系统测试,对每一个测试用例和结果都要进行评审。
3.维护阶段
首先要做的工作就是配置评审,检查软件文档和代码是否齐全,两者是否一致,是否可以维护等;然后确定维护组织和职责,并定义表明系统错误和修改报告的格式。维护可分为改正性维护、完善性维护和适应性维护等。维护内容广泛,有人把维护看成是第二次开发,不只是纠错。要适应环境的变化,就要扩充和改进,但不是建立新系统。维护的内容应该先通知用户,要得到用户的认可;然后再进入修改,修改不只是代码修改,必须有齐全的修改计划、详细过程以及测试等文档。
图1.7 软件开发的基本过程