毕业生的商业软件开发之路 ---- 商业软件开发基础

毕业生的商业软件开发之路 ---- 商业软件开发基础

课程简介

       本系列教程是面向有志于从事于计算机软件开发行业的毕业生的,因此只讨论软件开发相关的问题,不讨论其他的行业的情况。在本次课程中笔者将对比毕业生在学校中的学习性软件开发,介绍商业软件开发的基本知识。

学习型软件开发和商业软件开发

毕业生在学校中也开发过一些计算机软件,但这是学习或研究性质的软件开发,实际上更偏向是单纯的写代码;而毕业工作了,在软件公司里进行软件开发,此时进行的是商业软件开发。学习性软件开发和商业软件开发具有比较大的差别。毕业生必须搞清楚这两者之间的差别,否则工作时会吃力不讨好。

以下是学习型软件开发和商业软件开发的比较表[袁永福版权所有]

比较项目

学习型软件开发

商业软件开发

最终目的

学习和探索软件开发技能。

做出能卖出去的软件产品。

成本

不计成本。

需要斤斤计较。

过程

没多少控制,想到什么就做什么。

需求调研,计划,审核,开发,测试,部署。一个都不能少。

代码,文档规范

没有要求。

必须控制。

软件质量

没有要求。

必须控制,需要经过测试来达到合适的软件质量,但不追求过高的质量。

兼容性

没有要求。

需要控制,能适应特定的软件运行环境。

性能

没什么控制,有两个极端。

1.       完成功能即可,不管性能。

2.       无限的追求高性能

必须要性能,不能低也不能高。

用户界面

粗制滥造,不讲美观。

重视,需要依赖专业的美工人员。

时间进度

没有要求。

存在明确的时间节点。

产品化

没有要求。

可能需要用户手册,学习资料,宣传资料,产品包装,产品网站等。

现针对这些比较项目深入的探讨下去。

项目软件和产品软件

首先说明一下商业软件的分类,大多分为合同软件和产品软件。

合同软件

某个行业的客户委托软件厂商开发一套该客户自己使用的的定制软件。这种软件功能是定制的,只有这个客户能直接使用,其他单位,即使是同行业的也不能直接使用。这种定制软件充分的只针对这个客户自身的特点。由于这种软件开发都需要签订开发合同,所以称为合同软件开发。比如中国移动的缴费系统就是项目软件,只能中国移动使用,其他电信运营商用不了。项目软件具有以下几个特点。

1.       由客户发起软件开发工作,可能会搞项目招标。

2.       客户和软件开发商签订开发合同。指明软件功能、开发时间和金额。

3.       开发出来的软件只能用于该客户使用,一般不得给其他客户使用,实际上其他客户也用不了。

4.       软件的知识产权有可能归客户拥有。

5.       软件厂商负责软件的研发,此外一般还负责软件的部署、客户培训、运行维护等工作。

6.       软件开发商还可能顺带负责客户的信息化基础建设,比如采购硬件和系统软件等。

7.       软件部署后大多修改不大,若客户出现大的需求变化则可能会购买新的合同软件。

产品软件

软件厂商针对特定的用户群开发一个通用的软件产品,特定用户群中的每个客户都能直接使用这个软件而无需定制,这就是产品软件。比如Windows操作系统,金山毒霸等就是产品软件。产品软件的特点有。

1.       由软件厂商自发的进行,不会签订项目软件开发合同。

2.       软件功能需求需软件厂商自己想法搜集。

3.       开发出来的软件针对某个用户群,而不仅针对单个客户。

4.       软件产品需要长期规划,可能需要升级换代。

5.       软件知识产权归软件厂商拥有。[袁永福版权所有]

6.       有软件商业包装,提供完备的用户手册,各种学习资料及产品网站等。

以下是合同软件和产品软件的对比表。

比较项目

合同软件

产品软件

发起者

客户

软件厂商

签订合同

签订

一般不签订

知识产权

可能归客户拥有

软件厂商拥有

软件应用范围

单个客户

用户群体

软件功能

定制

通用

软件包装

一般,仅包括用户手册。

好,用户手册、各种学习资料、产品网站等。

软件技术

够用就行

要求高

软件发展

部署后修改不大

需要升级换代

 

在本教程中的商业软件开发只包括合同软件开发,不考虑产品软件开发。

商业软件开发基本概念

学习性软件开发是以软件开发人员为中心的,而商业软件开发是以客户为中心的。这是两者的本质区别。

学习性软件开发是完全由开发人员随心所欲的控制的,只是自发的学习和实践一些软件开发技巧,没有经济目的。毕业生以前的学习性软件开发一般就是编写一些程序代码,算是花拳绣腿,练练腿脚。

商业软件开发是有客户发起的,由客户付费雇佣软件开发商开发软件。顾客是上帝,这个普遍存在的规律使得开发人员不能随心所欲的开发软件。

商业软件开发的主要目标是经济目标,开发出能卖出去赚取利润的软件。利润等于收入减去成本。软件开发公司是虽然是以客户为上帝,但却是以追求自身利润最大化的终极目标的,而软件开发过程只有成本没有收入,为了追求利润,软件公司自然会千方百计的降低软件开发过程中的成本。

商业软件开发的平衡点

在商业软件开发中存在一个根本矛盾,一个是客户希望用最便宜的价格购买质量最好、功能最多的软件,一个是软件厂商以最贵的价格出售成本最低、功能最少的软件。这对矛盾之间形成一个平衡点,

 

而商业软件开发就应当准确的命中这个平衡点,一切围绕着满足客户需求并降低开发成本而开展工作。如下图所示,该平衡点有软件开发时间、软件质量和软件功能三块内容。

软件开发时间

商业软件开发时间大多是有明确限制的,在客户和软件公司签订的项目软件的开发合同中肯定会明确规定软件的开发完成时间,若开发延期了软件公司是会赔偿的,因此软件开发时间是固定的,而且大多数是很紧张的。软件开发时间越短,工作强大越大,则软件开发整体成本会很高,但由于合同的存在,软件开发时间方面软件开发厂商没什么好说的。

软件质量

客户希望软件的质量越高越好,软件稳定不出错。但开发高质量的运行稳定可靠的软件的成本是很高的,因此软件厂商并会开发很高质量的软件,而且根据客户所实际需要的软件质量而定的,开发出来的商业软件质量会比客户所实际需要的高一些,但不会高很多。商业软件开发人员对软件质量的追求是适可而止的。

即便如此,商业软件的质量是比学习性软件的质量高的多。因为商业软件可能在客户处长期运行好几年,其中不能出现重要业务数据丢失的情况,因此很多商业软件是第一要求是安全稳定。一般情况下,商业软件开发要求是稳定压倒一切,其次才是软件功能。

软件功能

客户提出客户需求后,商业软件应当能实现客户提出的需求,若可能的话可以略有增加,商业软件的功能不能大大超出客户提出的需求。商业软件开发人员对软件功能的追求也是适可而止的,够用就行。

有些商业软件可能存在明确的后续开发需求,比如软件项目分为一期,二期等。此时软件厂商决定软件功能需要进行额外的考虑。

 

 

以商业软件开发平衡点出发,笔者就说一些商业软件开发的其他方面。

过程和质量控制

有好的过程不一定有好的结果,但没有好的过程就不可能有好的结果。学习性软件开发是随心所欲的,但商业软件开发需要过程控制。商业软件开发大体经过以下几个步骤[袁永福版权所有]

步骤

工作内容

产生结果

需求调研

调研人员去客户去询问、记录、整理用户需求。并将客户原始需求转化为软件功能需求。

需求说明书。

软件系统设计

软件开发人员针对软件功能需求进行系统整体设计。包括模块技术,预计采用的技术和开发环境等。

系统设计说明书。

软件设计

深入进行软件各个模块的详细设计。

系统详细设计说明书。

软件开发

若干个软件开发人员一起完成软件功能的开发。

程序文件等。

软件测试

测试人员对照需求说明书进行软件的功能测试。

 

产品化

编写用户手册,学习资料等。

用户手册等。

部署

软件在客户现场的部署。

 

维护

软件系统的维护,一些错误的修改。

 

学习性软件开发的需求调研和软件设计是草草而过的,软件开发后就结束了。而商业软件开发则是严谨有步骤的。这几个步骤都是业界经过长期商业软件开发的实践而制定出来的。而一些软件开发认证体系,比如CMMI等更是将这些步骤制度化,系统化。

商业软件开发的过程需要进行质量控制。

新旧技术的权衡

现在软件业界的新技术越来越多,商业软件开发可以采用一些新技术来与时俱进,但需要经过权衡,利弊分析。

拒绝一切新技术是没有前途的,因为用户需求是越来越复杂,旧技术可能很难或无法实现新的用户需求。此时软件厂商由于其产品老化,功能不足,成本越来越高而被市场淘汰。

而盲目采用新技术则是很冒险的。采用新技术可能会带来以下几个问题

1.       新技术自身没有经过长期的实践检验,可能存在问题,这会影响到商业软件的安全和稳定。

2.       新技术可能会带来兼容性问题。开发人员以前的掌握的开发技巧,旧的正在运行的软件模块都可能和新技术冲突。

3.       新技术带来学习成本。开发人员需要花时间花精力学习新技术,这会影响商业软件开发的时间进度。

4.       新技术可能不实用。新技术在投入使用后可能毫无作用或者起负面作用。此前对新技术的投入毫无效果,加大商业软件的开发成本。

采用新技术在短期内必然会导致软件开发成本上升,而且长期也不一定会降低开发成本。因此需要软件开发厂商在使用新技术前需要进行过权衡,利弊分析。新技术是为了有效的降低长期成本,而不是软件开发人员个人的技术镀金。

商业包装

春晚曾经演过巩汉林和赵丽蓉合作的名为《如此包装》关于评剧的商业包装的小品,里面就涉及到了商业产品的概念、名称、美观度和系统化。下图是该小品的一个截屏。

 

在该小品中,赵丽蓉换一个英文名,用英文打招呼,那是进行产品的概念、名称的包装。著名的“嗨,嗯哼”就源于这个小品。

赵丽蓉换服装,换背景音乐,那是改善产品美观度,使得符合大众口味。

赵丽蓉不是一个人在唱评剧,后面还跟着一群美女伴舞,那是进行产品的系统化。

 

学习性软件研发没有商业包装,开发人员写代码编译生成一个程序文件就算完事了。

而商业软件需要商业包装。软件名称大多是在合同中定的,比如“XX公司办公管理系统”之类的,这个软件厂商没法改,那就制造概念,比如声称软件采用了XX软件巨头的先进的OO工作流技术,并自主实现了YY技术等等。

商业软件的用户界面需要经过专业美工的美化,使得符合大众口味。

商业软件不是一个单独的程序文件,后面还跟着用户手册、学习视频、客户培训等配套东西,以便进行产品的系统化。

 

 

用户界面需要美化,用户体验要求不差,需要配备完整详细的用户手册。此外产品类软件的商业包装就更多了。

 

商业软件开发人员的工作环境

这里说一下商业软件开发人员的工作环境,毕业生需要了解商业软件开发者在软件公司中的位置,埋头苦干是要发扬的,认清工作环境也有利于更好的工作,这里的工作环境不仅仅指工作的场所,还包括公司的组织架构,人员的分工等情况。[袁永福版权所有]

如下图所示,在一个软件公司中,大致分为管理层、软件开发人员和市场营销人员。

 

管理层包括企业老板、各级经理等,它对软件开发人员和市场营销人员下达工作指令。是一个软件公司中最优势的人群,同时也是责任最大的人群,所有的重大责任都可归根到管理层。

市场营销人员负责市场营销工作,跑客户,拿合同。是软件公司直接的创收人群。

软件开发人员负责软件项目开发、部署和维护。是软件公司的根本驱动力。

在公司之外的就是客户,客户接受公司提供的服务,并为这些服务向公司支付费用。

先说明一下软件开发人员对这些工作环境进行一些说明。

对于客户

软件公司的一切活动本身都不产生价值,但为客户因为软件公司的一些活动而向公司支付费用时,软件公司的这些活动才产生价值。因此软件公司的一切工作都直接或间接的围绕着客户来展开的。毕业生需要时刻记着要开发精确符合客户需求的软件。

软件开发人员服务客户有两种,一种是在公司内部替客户开发软件,另外一种就是在客户现场帮助客户进行软件项目的实施和维护。

在公司内部替客户开发软件时需要充分理解客户需求。商业软件是软件开发人员对于客户需求的一种描述,不理解客户需求,技术再好也是南辕北辙。因此商业软件开发第一步就是准确的获得和理解客户需求。

在客户现场帮助客户进行软件项目的实施和维护。请注意,这是帮助客户而不是代替客户。因为软件最终是为客户所用的,软件开发人员不可能替客户使用这个软件,但客户不懂技术,因此软件开发人员需要帮助客户部署和维护软件,还需要提醒和帮助客户建立运行软件的各种必备条件。

对于市场营销人员

可以说,市场营销人员是冲锋陷阵的士兵,那软件开发人员就是兵工厂和农民,两者都是不可缺少的。不过在大多数情况下,市场营销人员对比软件开发人员是优势的,这是中国的基本国情所决定的。

中国的市场经济体制还不够成熟,商业交易规则很复杂,交易成本高,难于控制;但中国人力资源丰富,软件技术人员比较多,而且软件技术开发规则相对于商业交易规则是简单的,比较好控制。这就迫使管理层将更多的精力放置在市场营销工作上,因此市场营销人员在公司中是占有优势的,这点在小型公司是更突出的。

不过对于有志于软件开发工作的毕业生也无需多虑,因为优势和劣势是对立统一的。市场营销工作也是很复杂的,国内的交易规则很复杂,做好市场工作不容易,是需要付出不小的代价。但软件开发工作由于规则简单,认真做还是能做好的,而且随着国内软件行业的不断进步,软件开发人员的重要性是会日益突出的。

认清楚软件开发人员在软件公司中的位置,则能更有针对性的开展工作了。

软件开发人员性格内向率比较高,人际交往能力不强,以自我为中心,并不能了解市场人员的处境,反而觉得市场人员成天吃吃喝喝,到处忽悠,有点瞧不起。其实笔者建议软件开发人员要放下所谓的清高,多和市场人员交流交流,掌握客户的更多的信息,这有助于开发更符合客户需求的软件,而且能降低公司管理的复杂性。市场交易规则已经很复杂了,若一个软件公司内部的管理规则也很复杂,那就很容易淹没在几千家软件公司组成的汪洋大海了。

软件开发人员对于市场人员还需要灌输一些基本的技术概念,以避免市场人员为了争夺合同而对客户做出不切实际的技术承诺。这些不切实际的技术承诺是个苦差事,对大家都没有好处,但市场人员不精于技术,当初可能不自知,对此软件开发人员需要利用自己的优势主动预防这种事。

对于管理层

软件开发人员对于公司管理层,也就是各级领导,也要尊重领导,服从领导和利用领导。领导很多是软件行业的老人,尊老是中国的老传统,领导是上级,服从上级也是应该的。利用领导分为一下两种,一种是利用领导的经验和智慧,第二是利用领导的权力。

毕业生需要能利用领导的经验和智慧。毕业生作为新手,经验尚未积累,能力有限,因此在工作时会遇到各种困难和难题,独立思考和解决固然很好,但那是要花时间的,在学校中有充分的思考时间,但在企业中时间就是金钱,是没有那么多时间独立思考的,此时需要捡现成的,向领导和同事请教,利用领导的经验和智慧。

毕业生不需要顾虑所问的问题很简单很可笑,显得很白痴,其实大家都了解毕业生的状态,是不会这么看的。但是问问题是应当找直接领导,一般不要越级上访。

毕业生需要能利用领导的权力,在工作中遇到一些不能自己决定的时候,尤其是在客户处。此时需要及时的请示领导,留给领导做出决定,这种事不能拖,若找不到直接领导,那就找间接领导。[袁永福版权所有]

posted on 2011-07-04 09:59  袁永福 电子病历,医疗信息化  阅读(1617)  评论(0编辑  收藏  举报

导航