在我们着手做任何一项工作之前,必须明确该工作的性质、任务,并制订完成任务的计划,这是非常有必要的。同样,对于软件产品的开发,也应该解决好类似的问题,即明确该软件产品开发的任务以及完成任务的价值,从而制订出能够完成任务的计划。
问题定义和可行性研究是制订软件系统计划的第一步。在软件工程中,把这一步称为计划时期。在瀑布模型中,软件生命周期的第一个时期是计划时期,包括问题定义和可行性研究两个阶段。
我们的目标是开发有用的软件,需要明确3个W,即:Who——为谁设计、用户是谁,What——要解决哪些问题,Why——为什么要解决这些问题。
问题定义是计划时期的第一个阶段,其目的是要弄清楚用户需要计算机解决什么样的问题以及实现新系统所需的资源和经费。该阶段的主要任务是在用户调查的基础上,形成一个资料文档(系统目标与范围的说明)。该文档被用户认可后,即可作为下一步工作的依据。该阶段所涉及的工作内容全部由系统分析员和用户来操作。具体来说,本阶段需要确定研究的对象、分析研究的意义和价值、了解当前的研究成果和程度、明确目前还存在的问题、研究获得成果的条件是否具备、落实研究的方法和方案,即确定:
●What、Why(目的、目标是什么,要做什么),据此进行初步的问题(需求)分析和设计;
●Whether(是否可能成功),进行风险分析;
●How(步骤、技术、条件)、When(时间计划)、Who+Which(人员职责),此即问题的定义(软件)过程。
可行性研究主要对系统的经济可行性、技术可行性、社会可行性、法律可行性等方面进行研究。软件开发人员大都存在一个通病,即只考虑到满足人的一切需要,而忽略了技术上的可行性,或过分依赖未来新技术的突破。这样的设计通常会导致软件的失败,浪费大量的人力、物力。事实上,很多技术并不是一蹴而就的,而是需要较长时间的积累才可以实现。软件设计工作只有基于用户需求、立足于可行的技术才有可能成功。
可行性研究的主要步骤有:确定目标、系统调查、列出可能的技术方案、技术先进性分析、经济效益分析、综合评价、优选可取方案并撰写可行性分析报告。
因此,软件可行性研究的目的是用最小的代价在尽可能短的时间内确定该软件项目是否能够开发,是否值得开发。可行性研究实质上是要进行一次简化、压缩了的需求分析和设计过程,要在较高层次上以较抽象的方式进行需求分析和设计。
例如,前面提到的日本第五代计算机。在20世纪80年代,日本政府和学术界发起了第五代计算机的革命,投入了大量的财力和人力,其目的在于使计算机以人的智能帮助人类,包括能看、能听、能说、能与人对话、能理解人及能翻译的智能机器人。这一革命在当时极大地推动了计算机人工智能的发展,但可惜的是人们过于乐观、操之过急。人工智能的发展未能如愿,在当时的大环境下,绝大多数基本技术(包括算法、存储等方面的问题)不能解决,日本最终不得不宣布放弃革命,第五代计算机终成泡影。
再来看项目可行性的论证,其焦点是围绕系统开发价值进行的,主要体现在以下四个方面。
1)技术可行性:分析技术冒险的各种因素,对系统的性能、可靠性、可维护性以及生产率等方面的信息进行评价。技术可行性常常是系统开发过程中最难决断和最关键的问题,分析人员需要建立系统模型,从技术的角度研究系统实现的可行性。
技术可行性研究包括:开发的风险,即能否设计出系统,包含实现必需的功能和性能;资源的有效性,即硬件/软件资源、现有技术人员的技术水平与已有的工作基础;技术,即相关技术的发展是否能支持本系统,如现有的技术是否能实现本系统、现有的技术人员是否能胜任、开发系统的软硬件资源是否能如期得到等。
技术可行性分析将为新系统提交技术的可行性评估,以指明为完成系统的功能和性能需要什么技术,以及需要哪些材料、方法、算法或者过程等。常用的技术可行性分析方法包括数学模型和优化技术、概率和统计、排队论、控制论等。
2)经济可行性:分析开发本系统有没有经济效益、多久能收回成本,要对经济的合理性进行评价。基于计算机系统的成本通常有4部分:购置软硬件及有关设备费用;系统开发费用;系统安装和维护费用;人员培训费用。
3)运行可行性:分析为新系统规定的运行方案是否可行,如果新系统建立在原来已担负其他运行任务的计算机系统上,就不能要求它在当前状态下运行,以免与原来的任务相矛盾。
4)法律可行性:分析新系统的开发会不会侵犯他人、集体或国家的利益并由此而承担法律责任。
在开发方案的选择方面,一般通过“将一个大而复杂的系统分解为若干个子系统”的办法来降低开发的复杂性。那么如何进行系统分解?如何定义各子系统的功能、性能和界面?实现方案不是唯一的。可以采用折中的方法,反复比较各个方案的成本∕效益,选择可行的方案。因为用户无法准确知道自身的需求,所以必须由开发方理解用户的问题,并给出有效的解决方案,这是现代软件开发的重点,带来的好处是需求更容易明确,开发和维护成本降低,质量提高,产品附加值提高,利润增加。方案会考虑用户的隐性需求,产品使用寿命延长,同时可能带来一系列的后续项目。
可行性论证工作由系统分析员完成,具体包括以下几个部分。
1)复查系统规模和目标:系统分析员对所提交的文档(系统目标与范围说明书)进行复查确认,改正含糊不清的叙述,清晰描述系统的一切限制和约束,确保解决问题的正确性。
2)研究目前正在使用的系统:现有系统是信息的来源,通过对现有系统文档资料的审读、分析和研究,再加实地考察该系统,总结现有系统的优点和不足,从而得出新系统的雏形。这样的调查研究是了解一个陌生应用领域的最快方法,它既可以使新系统脱胎而生,又不会全盘照抄。
3)导出新系统的高层逻辑模型:优秀的设计通常总是从现有的物理系统出发,导出现有系统的高层逻辑模型,逻辑模型通常由程序流图来描述。
4)推荐建议方案:在对提出的各种方案分析比较的基础上,提出推荐给用户的方案,在推荐的方案中应清楚地表明本项目的开发价值、推荐该方案的理由、制订实现进度表(主要用来估算生命周期每个阶段的工作量)等。
5)书写计划任务书:把上述材料进行分析汇总,然后草拟一份计划任务书,即可行性论证报告。此报告应包含以下内容:
●系统概述,是对当前系统及其存在问题以及新系统的开发目的、目标、业务对象和范围等的简单描述,着重说明新系统和其各个子系统的功能与特性。
●可行性分析,是报告的主体,包括新系统在经济上、技术上、运行上、法律上的可行性以及对新系统主客观条件的分析。
●拟订开发计划,包括工程进度、人员配备情况、资源配备情况,需要估计出每个阶段的成本、约束条件。
●结论意见,综合上述分析,说明新系统是否可行。结论可分为三类:立即进行、推迟进行、不能或不值得进行。
6)提交申请:请用户和使用部门的负责人仔细审查上述文档,也可以召开论证会。通常论证会成员包括用户、使用部门负责人及有关方面专家。论证会成员对该方案进行论证,最后由论证会成员签署意见,指明该任务计划书是否能够通过。
当我们进行可行性分析和研究时,需要了解和分析现有的系统。为此涉及若干工具,如系统流程图和系统结构图,具体介绍如下。
1.系统流程图
系统流程图用图形符号的形式描绘系统中的每个部件,表达对现有系统的认识。它清楚地表达了信息在系统各部件之间流动的情况,也称为业务流程图。
制作系统流程图的过程是系统分析员全面了解系统业务处理的过程,可利用系统流程图来分析业务流程的合理性。系统流程图不仅可用于可行性分析,还可以用在后续的需求分析阶段。
系统流程图有三种基本的结构:顺序、选择和循环。其中顺序结构适用于具有先后发生特性的处理程序,例如绘制图形的上下顺序就是程序的处理顺序;选择结构分为二元结构和多重结构,二元结构适用于需要进行选择或决策的过程,依据选择或决策结果,择一进行不同处理,而多重结果适用于多于两种的选择或决策;循环结构分为repeat-until结构和do-while结构。
在绘制系统流程图时,可以按照以下次序进行:首先记录调查材料,整理工作顺序;然后分析工作流程和业务关系;接着分解业务过程并描述业务处理;最后整合成完整的系统流程图。
2.系统结构图
系统结构图是结构化设计方法所使用的描述方式,也称结构图或控制结构图。它表示一个系统(或功能模块)的层次分解关系、模块之间的调用关系以及模块之间数据流和控制流信息的传递关系,是描述系统物理结构的主要图表工具。系统结构图反映的是系统中模块的调用关系和层次关系,有先后次序(时序)关系。所以系统结构图既不同于数据流图,也不同于程序流程图。在系统结构图中的有向线段表示调用时程序的控制从调用模块移到被调用模块,并隐含了当调用结束时将控制交回给调用模块。
为了开发系统模型,可以使用一个结构模板,如图2.2所示。系统工程师把各种系统元素分配到模板内的五个处理区域:用户界面处理、输入处理、系统功能与控制、输出处理、维护和自测试。结构模板能够帮助系统分析员建立一个逐层细化的层次结构并形成系统模型。其中,外部实体是系统所使用信息的产生者、由系统建立信息的使用者以及通过接口进行通信或实施维护与自测试的所有实体。
图2.2 系统结构模板图