在现代企业中,信息系统已经越来越成为企业管理的重要支撑。因应各种业务需求对软件系统的要求,大多数企业都形式不同地建立了自己的软件开发团队,视企业的规模从一两个兼顾支援网络硬件、进行简单开发的人员到大规模的专业软件开发组织都有。通常说来
,
大多数企业内部开发团队是企业内部辅助主营业务的、非赢利性的组织。这类带有普遍性的企业内部软件团队是本文的关注点。
和专业软件公司开发过程一样,企业内部软件开发也涉及对过程、工具、质量、人员等各个层面的管理问题,所以目前成熟的或者正在探讨中的各种软件开发模式都可以被企业内部软件开发借鉴和参照。但是,在服务、非赢利的前提下,企业内部软件开发的各方面都有有别于专业软件公司的特点。目前关于企业内部软件开发模式和管理的探讨比较少,很多人,甚至企业内部开发团队的成员本身,都没有明确企业内部软件开发和专业的软件公司开发工作的不同,在项目管理、文档控制等方面经常教条的模仿专业软件公司的开发模式。这种认识上的模糊性削弱了企业内部软件开发团队在软件的生命周期中本来具有的优势。
1 企业内部软件开发的特点
企业内部软件开发有什么值得注意的特点呢
?
以下通过在几方面和专业软件公司对照的方法来进行一些分析
:
1.1 软件开发团队和用户的利益关系。
专业软件开发公司和用户是商业关系,直接目的是销售产品和服务获得收益,用户本身的收益和软件公司不是明确相关的。虽然大部分软件公司从产品和产业长期发展的角度都把类似“实现客户价值”这样的价值观列为公司的主要宗旨,但实际操作中很难彻底摆脱商业关系,在开发的各个环节受制于开发费用等商业因素。而企业内部软件团队的收益和生存直接和企业联系,业绩考核也是和企业目标相联系的。这是一个本质的差异。
1.2 软件开发项目所处的系统环境。
企业的软件系统往往多样和复杂的,针对企业的软件开发项目面对的大多是一个已经存在很多信息子系统的软件环境。如果由专业软件公司单独来定制开发企业软件,因为是阶段性的参与企业信息系统,所以除非客户有明确的界定,否则很难设身处地的,从信息系统的整体长远发展来考虑需求和建立方案。如果专业软件公司开发的是通用的商业软件,更不可能预见最终用户的系统环境。对比之下,企业内部
IT
部门相对熟悉业务并且要长期经营整个信息系统,所以在每个开发项目中都需要从全局角度和长期角度来考虑项目的必要性和方案细节,要考虑和已有系统的集成。
1.3 开发过程中和直接用户的交互关系,
企业内部
IT
部门和用户部门是同一组织内不同职能机构的关系,企业内部软件人员和直接用户是同事关系。和专业软件公司比起来,这一点又引起很多用户交互方面的重要的差异。
1.3.1 沟通方式和沟通效率。
内部软件团队可以方便的召集用户、灵活的协调时间、有丰富的途径和平台来协调各种问题。项目完成后用户和软件开发人员仍然会长期共处,可以不断地交流并对软件进行改进。而专业软件公司在和用户打交道的时候受限于很多商业因素,沟通效率通常远低于企业内部软件团队。
1.3.2 需求分析和需求变更管理。
开发过程中用户的需求往往是模糊和多变的,除了实际使用环境的不确定因素,用户对
IT
的理解和对资料的整理水平不足也是引起需求多变的重要原因。
专业软件公司虽然有专业的分析人员和方法,但由于商业关系和业务复杂性,常常无法深层次地介入用户的实际工作层面,进而全面理清那些用户的需求是合理的,那些是不合理的,那些是可以简化的,那些是需要加强的
….
,等等。面对强势的客户更是没办法从合理的角度对需求进行梳理。为了控制项目的进度和人力资金投入
,
软件公司往往不得不通过成文的方式对需求进行界定。另外出于“专业表现”的要求和商业利益的需要,软件公司也会有意无意加入一些可能不见得切合实际的需求目标。这样最终软件会出现整体或部分偏离实现客户价值的方向的可能。而在企业内部软件开发团队主导的项目中,用户对项目的需求更强调实用性、方便性和快速见效。用户对将来需求变化引起的沟通和商业上的麻烦不太担心。企业内部开发团队经常可以根据实际业务需要对用户的要求进行否决和更改,也可以在用户要求之外增加系统目标。
1.3.3 软件的测试和交付过程。
企业内部软件团队可以方便的从组织上把用户当作测试团队的一部分。在确认软件功能基本完成,没有根本性缺陷的情况下,可以比较早的当作软件项目已经的交付。更多的测试可以放在开始使用之后的长期运行过程中进行。专业软件公司在和用户配合测试方面则比较复杂,引入用户、计划和协调等都没有企业内部软件部门容易,交付也要严格的多。所以通常软件公司在测试方面投入的人力和成本要比企业内部软件团队多很多。
1.4 软件开发的规范:
专业软件公司开发的大多是中大型的、商品化的软件产品。在设计开发过程中有很多在结构规范、通用性、界面美观、文档完备等方面的要求,开发周期也都较长。而企业内部开发大多为中小型的软件或者是基于已有大型应用系统的二次开发,注重实效,注重量身定做,注重速度,对文档和通用性等方面的要求比较灵活。
1.5 其他可能的差异。
企业内部软件开发团队的规模通常比专业软件公司小,组织上的分工不象专业软件公司那么完整,各种资质的评估和认证要求也不迫切。
以上这些不同大多是显而易见的,但是对软件开发过程的影响却是根本性的,企业内部软件开发需要在认清自己定位和处境的情况下,建立更加适合自身及企业利益的软件开发模式。
2 企业内部软件开发和敏捷开发思想
有必要提一下近几年新兴起的敏捷开发思想。作为对一直以来软件工程各种模式中条块分割清楚、文档繁琐、周期冗长等问题的突破和尝试,敏捷开发思想近几年越来越引起软件开发机构和开发人员的关注。根据敏捷思想创始者们宣布的敏捷开发宣言,敏捷开发的价值观和原则如下:
敏捷软件开发价值观的表述:
人和交互重于过程和工具。
可以工作的软件重于求全责备的文档。
客户协作重于合同谈判。
随时应对变化重于循规蹈矩。
敏捷软件开发的
12
条原则:
对我们而言,最重要的是通过尽早和不断交付有价值的软件满足客户需要。
我们欢迎需求的变化,即使在开发后期。敏捷过程能够驾驭变化,保持客户的竞争优势。
经常交付可以工作的软件,从几星期到几个月,时间尺度越短越好。
业务人员和开发者应该在整个项目过程中始终朝夕在一起工作。
围绕斗志高昂的人进行软件开发,给开发者提供适宜的环境,满足他们的需要,并相信他们能够完成任务。
在开发小组中最有效率也最有效果的信息传达方式是面对面的交谈。
可以工作的软件是进度的主要度量标准。
敏捷过程提倡可持续开发。出资人、开发人员和用户应该总是维持不变的节奏。
对卓越技术与良好设计的不断追求将有助于提高敏捷性。
简单——尽可能减少工作量的艺术至关重要。
最好的架构、需求和设计都源自自我组织的团队。
每隔一定时间,团队都要总结如何更有效率,然后相应地调整自己的行为。
从罗列的这些原则来看,敏捷开发思想强调激发人的主动性和协作,强调去除不必要的文档和设计,强调顺应需求的变化,强调尽快的交付阶段成果和持续改进开发。对于专业软件公司来说,要实践敏捷思想里提出的拥抱变化、客户密切协作、不断交付等理念,有赖于软件开发之外的客户关系处理等工作,有赖于商业元素和客户价值的平衡,在实践中要做到并不容易。
相比之下,对照前文提到的企业内部软件开发的特点,可以看出敏捷开发思想和企业内部软件开发有着近乎天然的联系。事实上很多企业内部软件开发过程都有意无意的和敏捷开发思想相贴近。但是因为指导思想上的模糊,使得很多企业内部软件开发中可以利用的优势被教条地搬用“规范”过程和标准所限制。相信随着对软件开发过程认识的加深,敏捷开发思想会对企业内部软件开发会带来越来越大的影响。
敏捷开发只是一种理念,并不是对瀑布或迭代等方法的颠覆,而是一种启发和演进。对于它的原则不同人有不同理解,实践起来也有各种不同的模式。目前已经有很多基于敏捷开发思想的方法被提出并经过一定实践,但都不能作为标准。总的来说,敏捷开发思想本身仍然是站在专业的、面向客户的商业化开发环境角度提出的。企业内部软件开发还需要根据实际情况,参照敏捷开发思想,对各种软件开发方法进行取舍,摸索更加适合自己的模式。
3 企业内部软件开发的模式。
企业作为软件的直接使用者,实际业务上的变化和管理上的调整变革会频繁地引起对软件系统的变更要求。企业内部软件团队需要管理自行开发软件的整个生命周期和购买大型应用系统后的生命周期,所以宏观来看,企业内部软件开发是一种持续开发的类迭代模式。而对每一次阶段性的开发项目,则需要根据项目的规模,结合敏捷的思想,灵活地掌握开发过程。
和专业软件开发公司一样,企业内部软件开发团队同样要建立文档代码管理、项目管理、质量管理的各种制度和工具,但形式上可以更加注重实用性和有效性。另外和专业软件开发公司相比,企业内部软件管理需要特别加强用户队伍的建设,争取使用户成为信息系统的有机组成部分,这样对信息系统和企业业务都有不可估量的正面影响。
软件工程归结的几个基本的阶段:规划和计划、需求分析、设计、编码和实现、测试、维护和支持,对所有项目和阶段都是适用的。仔细观察目前林林总总的软件开发模式,都可以辨认出这几个阶段,不同的是每个阶段的引入时机或持续长度。对于企业内部软件开发来说,
因为企业内部软件团队的目标和企业的目标一致以及内部软件团队的特殊位置,所以在这些经典的开发阶段之外,还应该加入一些其他的重要阶段或需要特别关注的内容:
3.1 首先应该加入的阶段是实施阶段,这是一个在经典软件工程模型中被弱化的阶段,经常被列入交付或者支持的范畴。对于商业化的开发来说,,客户或其他评审机构评审验收合格,软件开发已经基本完成。所谓实施就是给用户培训,后面用户怎么用是用户的事。如果是大型应用系统,如购买的ERP、PLM、SCM、CRM等系统,实施过程大可另做项目或交给专门的第三方实施公司。但对使用企业来说,实施非常重要。即便是小型软件,如果没有后续的推进、进度控制和项目协调,都很可能"用不起来"或者"用的不好"。这样对于企业来说软件仍然是没有完成的。明确独立的实施阶段,可以使软件开发团队在实施的组织和方法论等方面更加专注。
3.2 其次是系统集成分析。这一工作通常是覆盖规划到系统设计阶段的工作,可以加在规划或需求分析等阶段内部,也可以单独列出。对于已具备一定规模的企业信息系统来说,这一工作需要特别强调和严格引入。主要内容是对照信息系统的整体规划,考察新开发项目和现有系统的集成。即便没有明确的信息系统整体规划,也要在分析用户需求和系统设计时,时刻注意把需求放在系统集成环境下进行功能定义和功能分配。用户对系统集成大多是没有考虑的,商业模式下的软件开发方法也很少提及。但这是企业内部IT应该进行的工作。忽略这个集成分析,随着时间积累,将造成信息系统即使局部很高效和很完备,但整体上却臃肿和低效率,进而使企业在实际管理上承担难以估计的代价。
综上所述,可以把企业内部软件开发模式大体框架按下图表示:
这是一种注重企业内部环境,注重企业的业务价值,敏捷的开发模式。
各个企业内部软件团对所面临组织环境和系统环境千差万别,各个具体项目有各自的特殊情况,所以不可能存在一种普遍适用的具体开发模式。各个企业内部软件团队要根据自己的实际情况开发,逐步建立自己的开发方法和全面的系统支撑环境。
4 结束语
从分工的角度来看,独立于软件使用企业之外的专业软件组织的存在是必需的。专业软件组织在软件本身的开发规范和开发技术等各个方面,都具备非专业组织无法达到的深度和广度。但是,软件开发过程的管理和控制是一个非常复杂的领域,这种复杂性不仅来自软件开发本身,更来自于需求的复杂、需求的多变以及很多其他超出软件领域本身的因素。软件工程实践中反复探索但仍然长期困扰从业人员的诸多问题,例如需求难以控制、软件品质难以控制、预算经费难以控制、项目进度难以控制等,都不能单纯靠专业软件人员或软件组织来解决。另外一个软件的成功与否,最终还是要通过实现客户价值来体现。而如何实现客户价值,也不是纯粹的软件问题。
企业内部软件团队在解决这些超出纯粹软件开发的问题时,有着自身特殊的优势。目前对企业内部软件开发特殊性的研究是软件工程研究方面比较弱的一个领域。从整个软件行业来说,进一步还应该研究企业内部软件组织和独立运营的专业软件组织之间的配合。这些研究对突破各种软件开发困境将会是非常有意义的工作。