刘卫国
(铁道部 信息办,北京 100844)
在铁路信息化建设过程中,围绕运输组织、客货营销、经营管理等领域,各单位、各部门组织开发了许多应用软件,其中有好的软件产品,也确有开发质量不高、应用效果不佳的软件,影响了系统应用效果。本文旨在结合铁路应用软件开发工作实际,就影响软件开发质量几个突出问题进行一些探讨,以期引起大家的关注,共同研究解决这些问题,提高铁路应用软件开发质量。
从软件的基本构成要素来看,软件是与计算机系统操作有关的程序、规程、规则及其任何与之有关的文档。
软件作为一种逻辑实体,具有下列特点:
抽象性:软件产品不是实物产品,其可见性差。
严密性:软件产品无正品和次品之分,不存在误差,误差即是错误。
一次性:任何软件的研制都是一个新的开发过程,即一次性的、创造性的劳动。软件的成批生产只不过是简单的复制。
智力性:软件研制主要是靠人的脑力劳动。软件研制的绝大部分工作是靠人来完成的。
持久性:软件产品的质量与使用时间的长短无关,即软件产品无磨损性。因此,软件产品的故障不能用普通产品更换零部件的方法来解决。
依赖性:软件的复杂性既来自它所处理的实际问题的复杂性,又来自程序逻辑结构本身的复杂性。因此,软件技术的发展经常是落后于人们对软件的需求。
难以度量:目前对智力劳动尚无有效的度量方法,而软件研制又是典型的智力劳动,因此,难以对其进行度量。
易出错:软件生产过程涉及一系列的“信息转移”,在有信息转移的环节都有可能发生信息转移的错误。
必须维护:软件产品在交付使用后,可能需要经常更改,因而软件维护是软件工程一个必不可少的阶段。
成本昂贵:软件产品研制需要投入大量的、复杂的、高强度的脑力劳动,其成本是非常高的。
在计算机软件开发和维护过程中存在一系列严重问题,主要表现为:
(1)软件开发不能满足人们日益增长的需要,软件供不应求的现象使人们不能充分利用现代计算机硬件提供的巨大潜力。
(2)对软件开发成本和开发进度估计很不准确。有的软件开发成本过高,而有的为了节省成本或赶进度所采取的一些权宜之计又往往以损坏软件质量为代价,从而不可避免地引起用户的不满。
(3)用户经常不满意所完成的软件。软件开发人员对用户需求了解不透,就仓促上阵编写程序。这种闭门造车式开发出来的软件产品,势必无法满足用户的实际需要。
(4)软件价格昂贵。由于软件开发需要大量的人力,软件成本随着软件规模和数量的不断扩大而持续上升,软件成本在整个计算机系统中所占的比例急剧上升。
(5)软件质量难以保证,软件质量保证技术还没有真正应用到软件开发的全过程。
(6)软件的可维护性差,软件中的错误很难改正。
(7)软件的可移植性差,当硬件环境发生变化时,软件很难适应新的环境。
通过分析人们认为,引起上述问题的原因归结起来主要有以下4点:
(1)软件开发无计划性:由于缺乏软件开发经验和有关软件开发的数据积累,使得开发工作计划很难制定。主观盲目地制定计划,执行起来与实际情况有很大的差距。对于工作量估计不准确,开发工作的完成期限一拖再拖。对已经拖延的项目,为了赶进度,往往以牺牲软件质量为代价。
(2)软件需求分析不充分。作为软件设计依据的软件需求,在软件开发初期阶段提得不够明确,或者未能确切的表达。开发过程中,软件人员和用户又未及时沟通,使得一些问题不能及时解决而隐藏下来,造成后期问题的集中暴露,而此时已难以挽回。
(3)开发过程无规范。开发过程没有统一的、公认的方法论和规范来指导,参加开发的人员各行其是,加之不重视文档的编写工作,设计和实现过程的文档很不完整,使得软件很难维护。
(4)缺乏软件评测手段。由于缺乏有效的软件评测手段,软件未经过充分的测试就提交给用户,质量低劣的软件,不能满足用户需要。
目前,铁路应用软件开发存在的问题与上述有相同之处。
为了解决上述这些问题,软件工程专家和学者们提出了“软件工程”的概念,即采用工程的概念、原理、技术和方法来开发与维护软件。
软件工程包括3个要素:方法与技术、工具与环境、管理与标准。
软件工程方法与技术提供了关于软件开发的一般原则、工作框架、开发策略和若干实用技术。其中包括软件生产周期模型、自顶而下的方法、结构化开发方法、面向对象方法、需求工程和测试技术等等。
软件工程工具与环境为软件工程方法提供自动或半自动的软件支撑环境,以提高软件的生产效率,保证软件质量,便于软件测试和集成,提高软件开发过程的可见性和可控性。
软件工程管理与技术标准是将软件工程的方法和工具综合起来,以达到合理、及时地进行计算机软件的开发这一目的。软件工程标准是为软件开发和管理过程以及软件产品规定的共同准则,包括国际标准、国家标准。这些标准是软件开发必须遵循的基本规则和开发指南。
软件工程管理的基本要求涉及软件开发的计划管理、阶段评审、配置管理、方法与工具、文档编制、人员组织和过程的不断改进等方面。
遵循软件工程基本要求,实施软件工程,贯彻软件工程标准,是保证软件质量的基础。凡是与软件开发工作有关的组织和人员,都应当学习和掌握软件工程的基本原理、基本准则和标准,严格按软件工程标准管理软件开发工作,这是做好软件开发工作的科学方法和有效手段。
目前铁路应用软件开发不规范等问题,归结起来主要是没有严格地执行软件工程标准。首先是对软件工程相关标准学习的不够,其次是没有真正按软件工程进行管理,虽然也采用了一些先进的方法,但由于执行的不够严格,形成了两张皮现象,开发人员各行其是,软件开发质量没有得到有效地控制,加之不重视文档的编写工作,设计和实现过程的文档很不完整,使得软件很难维护。
应用软件是根据用户的需求和所服务的领域某种特定的用途而开发的软件。一个优秀的应用软件产品,应该是能够最大化的满足用户需求,能够真正帮助用户解决实际问题,能够给用户带来显著效益的产品。软件开发最为困难的工作就是能够准确说明开发什么,最为重要的就是要编写出高质量的需求分析报告。目前,由于开发人员对需求了解不深、不透,需求分析不到位、不完整、不准确,给后期软件开发工作留下了许多问题,从根本上影响了软件质量。
打造一个优秀的应用软件产品,首先要抓住需求这个源头,认真做好需求开发工作。需求开发包括获取需求、分析需求、确认需求,以及需求变更管理等。获取需求就是通过认真的需求调研,编写出高质量的用户需求说明书;分析需求就是通过详细地分析和研究,编写出高水平的软件需求说明书;确认需求就是要对形成的用户需求说明书、软件需求说明书进行认真地评审并确认;需求变更管理就是当需求发生变化时,要通过一定的程序,实施严格地管理,避免需求变化的随意性,减少软件开发风险。
做好需求开发工作,要充分认识需求开发阶段的工作对于整个软件工程和软件质量的重要性,高度重视需求分析。高质量的需求分析是做好软件开发的基础和先决条件。因为,软件工程风险主要存在于需求分析阶段,若需求分析问题没有解决好,必然会影响软件质量,引起用户不满。因此,要舍得在需求分析阶段花精力、下功夫,千方百计做好需求分析工作,做到既要站得高,看得远,又要注重细节,精益求精。
需求分析不能只停留在一般意义上的调查、整理和归纳上,而是首先要在获取用户一般性需求的基础上,通过深入地研究和提炼,进一步开发用户潜在的需求,引导和帮助用户进行需求创新。其次要处理好业务需求、用户需求和功能需求(包括非功能性需求)之间的关系。这3个层次的需求,各有侧重,相互关联,互相影响,不能简而化之,更不能以一代之,而是要做到着眼于业务需求,立足于用户需求,落脚于功能需求。
做好需求分析:(1)开发人员必须熟悉和理解用户的业务,并与用户进行充分的交流,从多角度、深层次了解用户的需求,在此基础上进行分析和提炼。(2)要想用户之所想,满足用户之所需。做到这一点,首先要思考用户希望解决什么问题,开发出来的产品能给用户带来多大的益处?(3)既要“瞻前”也要“顾后”。所谓“瞻前”就是要站在一定的高度,保证软件的前瞻性和先进性。要以对用户高度负责的态度和创新的精神,主动从客户的发展战略目标出发,想客户之未想,看客户之未看到的,积极引导用户的需求,深入挖掘用户的需求,努力创新用户的需求,提出用户尚没有发现而却有价值的需求,做到不仅能够满足用户当前的需求,还能够满足客户不断发展的需求。所谓“顾后”就是要充分考虑到操作人员的具体需求,只有让他们满意,高层才能满意。
铁路应用软件开发,就是要紧紧围绕运输组织、客货营销、经营管理3大领域,抓住转变传统生产方式、经营管理方式,提高生产效率、服务水平和管理水平,保障运输安全等关键问题,以实现运输组织的智能化、客货营销服务的社会化和经营管理的现代化为目标,从业务需求分析入手,高度关注用户的高层次需求,认真研究和明确业务需求,充分体现用户具体需求,并最终落实到系统功能上。对于软件开发来说,虽然业务需求只是一个指导性的,但它却反映了用户的战略目标和主要业务要求,不仅为软件开发后续工作建立了框架,而且是其他任何说明需要遵循的规定,应当引起我们的充分重视。
做好应用软件开发,需求分析固然十分重要,但仅此是不够的,还必须采取科学有效的管理办法,加强对软件开发过程的严格控制。目前,在软件项目开发方面有许多好的方法。如CMM、CMMI和ISO9000等,这些方法是开发高质量软件产品必要的手段和基本条件,也是衡量一个软件企业水平的重要方面。但这里有一个“要我用”和“我要用”的问题。一些单位在执行过程中往往存在着一定的应付现象,没有真正发挥其有效作用。我们要转变思想,真正把实施CMM、CMMI和ISO9000等先进方法作为自己的内在需要,作为打造优秀软件产品的一种重要保证手段和必然选择,使其成为一种习惯、一种文化、一种自觉行动,由被动变主动,由“要我用”变为“我要用”。实施CMM、CMMI和ISO9000等,有许多约束条件,不按计划执行不行,光说、光干不写也不行。所做的必须是写下来的(指必须按标准执行),做完的还必须写下来。这在具体执行中看似有些麻烦,但对于规范管理,保证质量,非常有好处,习惯成自然。实施这些先进的管控方法,还有另外一个好处,就是它不仅可以保证软件质量,还不至于让软件绑定在某一个人身上,从而降低了软件风险。利用这些先进的管控方法是保证软件产品开发工作质量非常重要的手段,我们要把这些科学的方法和手段应用好,切实发挥它应有的作用。
开发一个优秀的软件产品,需要有一个良好的环境,既包括硬环境,也包括软环境。硬环境包括工作条件、开发条件、测试条件等。软环境包括企业理念、文化氛围、管理氛围、激励机制等。要注意处理好以下3个关系:
(1)处理好与客户的关系。要不断向客户学习,建立良好的沟通机制,及时了解客户的想法,始终跟踪客户的业务发展趋势,不断提高专业化服务能力和水平。
(2)处理好与合作伙伴的关系。随着信息技术的发展,信息技术分工越来越细。专注于某一项研究,必然有它的优势。我们既要看到自己的优势,也要了解别人的长处。要加强与合作伙伴的合作。通过合作把他们的经验和知识不断的丰富到自己的产品中来,使得我们自己的产品能够与时俱进,能够更好、更快地满足客户的要求,进而保持我们核心的竞争优势。
(3)处理好与竞争对手的关系。要正确对待行业内的竞争,有竞争才能有发展,这是市场经济的法则。只有在激烈的竞争中,才能始终有一种危机意识,才能不断地改进自己的产品和服务。要把竞争对手看成促进自己不断提高和发展的动力。通过竞争提高自己,通过竞争发展自己。有时也要善于把竞争对手变为合作伙伴,在竞争中共同提高、共同发展。
铁路信息化的建设和发展,培养和造就了一大批优秀的人才,这些人才是铁路信息化建设的宝贵财富。铁路行业不同于其他行业,铁路信息化也不同于其他行业的信息化。铁路行业是一个复杂的系统,涉及专业多,相互关联紧密,作业流程复杂,安全性要求高。既有管理,也有生产,既有人工作业,也有复杂的控制系统。我们要努力营造有利于人才成长的环境和氛围,建立一支既精通信息技术,又全面熟悉铁路业务的信息技术队伍,这是打造优秀软件产品的必要条件。
铁路应用软件开发是一项复杂的系统工程,需要采用先进的方法、科学严格地管理、良好的开发环境,更需要一支能够适应铁路信息化建设需要,技术精湛、业务过硬、兢兢业业、任劳任怨、努力拼搏,无私奉献的信息技术队伍,这是铁路信息化和铁路现代化事业的根本保证。
[1]石 柱. 软件工程标准手册[S]. 北京:中国标准出版社,2004.
[2]彭 一. 信息化主管案头手册[S]. 北京:机械工业出版社,2004.
[3]薛华成. 管理信息系统[M]. 3版. 北京:清华大学出版社,1999.