▶2.2.2.1 软件开发的过程
软件开发工作的第一阶段是初始要求的提出。软件开发工作者的任务是根据这种初始要求形成严格的、明确的、可供实际开发使用的功能说明书。由于一般的用户对于计算机的功能并不熟悉,在多数情况下,用户最初提出的要求是不能直接用来作为编制软件的依据。软件设计者需要从这个初始要求出发,经过大量的调查研究工作,抽象出应用领域中的实际的信息需求,设计出在计算机系统内外的、合理的信息流程,并规定软件系统的功能与性能要求。这些调查分析的成果集中体现在第一个重要文档——软件功能说明书中。这一阶段的工作可以概括地称之为需求分析。经验证明,这一阶段工作虽然并没有具体地开始编写程序,但是其重要性绝不亚于编程工作。因为许多软件的失败并不是由于编程中的错误,而是由于一开始没有真正弄清应用领域中的信息需求以及实际的信息流程,从而造成软件与实际应用环境的冲突与脱节。把需求分析包括进软件开发过程,作为一个重要的、不可缺少的阶段是软件工作的一大进步。
第二阶段是总体设计。它的任务是根据软件功能说明书的要求,完成软件的总体设计,这包括整个软件的结构设计、公用的数据文件或数据库的设计、各部分的连接方式及信息交换的标准等几个主要内容。这里所说的设计是对整个软件而言的,不是具体的编程。所谓结构设计是把软件划分成若干个模块,指定每个模块的功能要求,以及它们之间的相互关系(调用关系、参数传递关系或信息共享关系)。总体设计的成果是系统的总体设计文件及各个模块的设计任务书。总体设计文件应当包括结构图、模块清单、公用数据结构(文件或数据库的格式)。
以下是两件并行的工作:程序的编写与文档的编写,我们可以统称之为实现阶段。程序的编写(Coding)无疑是占用人力、时间较多的任务。在这里需要加以强调的是组织与协调的重要性。大型软件不可能由一两个人完成,由于程序员个人的习惯、风格、背景、能力的不同,背离总体设计要求的情况是常常会发生的。组织与协调的目的就在于及时发现及纠正这种情况。作为软件项目的负责人,主要的任务不是自己直接编写程序,而是做好这种组织与协调工作。文档的编写工作常常被人忽视。不少专家已多次强调,软件的概念应当是程序加文档,没有文档的程序是无法推广应用的。因此,正规的程序工作组都有专人(秘书)负责文档的整理与保管工作。一些大型软件公司在程序编写的同时,也要组织相当多的人力撰写使用说明、用户手册等文档。因此,必须对文档工作给予足够重视,而且与编程工作同步进行。
第四个阶段是测试或调试阶段。其中包括两个部分,模块的调试与整个软件的联调。模块的测试是根据总体设计时制定的各个模块的设计任务书,对程序员完成的模块进行验收,看它们是否实现了所要求的功能,是否达到了所要求的性能指标。由于设计不可能百分之百的完美,即使每个模块都达到了设计任务书的要求,整个系统能否达到预期的目标还需要进行测试,另外,完成的软件与编写的文档是否一致也必须认真检查。这些任务应当由总体测试或联调来完成。许多国内外成功的软件开发案例表明,测试工作最好由专门的小组去进行,不应当由编程者自己测试。测试的方法和技术是软件开发技术的重要方面。
作为一个版本的软件开发过程,到调试结束即可告终。但是如果从软件的不断发展和更新的角度来看,这只是一个版本的完成,随着应用的发展,使用者(或应用领域)必然会提出新的要求,从而促使开发者进入下一个版本的开发。这个过程实际上是不断重复、不断上升的。当我们从这种观念去看待软件开发时,就会对这项工作有更深的认识和更高的要求。
▶2.2.2.2 软件开发工具的功能要求
从上面所说的软件开发过程可以看到,其中有许多工作需要用软件开发工具去支持或帮助。归纳以上的各个工作阶段,把软件开发工具应提供的各类支持工作归纳成以下五个主要方面。
(1)认识与描述客观系统。这主要是用在软件开发工作的第一个阶段——需求分析阶段。由于需求分析在软件开发中的地位越来越重要,人们迫切需要在明确需求、形成软件功能说明书方面得到工具的支持。与具体的编程相比,这方面工作的不确定程度更高,更需要经验,更难形成规范化,因为这是一种对复杂系统的认识与理解的工作。俗话说:“隔行如隔山”。每一个应用领域都有各自特殊的情况与规律,在这个领域中工作的人常常是通过几十年的实践工作才深刻领会的。而编写软件的人员要在尽可能短的时间内了解它,并在此基础上抽象出信息需求与信息流程,这无疑是十分困难的。这也正是人们希望软件开发工具给予帮助的一个重要方面。
(2)存储及管理开发过程中的信息。在软件开发的各阶段都要产生及使用许多信息。例如,需求分析阶段要收集大量客观系统的信息,在此基础上形成系统功能说明书。而这些信息到了测试阶段还要用来对已经编好的软件进行评价。同样,在总体设计阶段形成的对各模块的要求,也要在模块验收时使用。当项目规模比较大时,这些信息量就会大大增加,当项目持续时间比较长的时候,信息的一致性就成为一个十分重要、十分困难的问题。如果再涉及软件的长期发展和版本更新,则有关的信息保存与管理问题就显得更为突出了。
(3)代码的编写或生成。在整个软件开发工作过程中,程序编写工作占了较多的人力、物力和时间,提高代码的编制速度与效率显然是改进软件工作的一个重要方面。根据目前以第三代语言编程为主的实际情况,这方面的改进主要是从代码自动生成和软件模块重用两个方面去考虑。代码的自动生成对于某些比较固定类型的软件模块来说,可以通过总结一般规律,制作一定的框架或模板,利用某些参数控制等方法,在一定程度上加以实现。这正是许多软件开发工具所做的。至于软件重用,则需要从更为根本的方面,对软件开发的方法、标准进行改进,在此基础上形成不同范围的软件构件库(通用的、行业专用的、企业专用的等),这是十分重要而困难的工作。(www.xing528.com)
(4)文档的编写或生成。文档编写是软件开发中一项十分繁重的工作,不但费时费力,而且很难保持一致。在这方面,计算机辅助的作用可以得到充分的发挥。在各种文字处理软件的基础上,已有不少专用的软件开发工具提供了这方面的支持与帮助,如文档自动生成系统等。困难表现在保持程序的一致性。
(5)软件项目的管理。这一功能是为项目管理人员提供支持。一般来说,项目管理包括进度管理,资源与费用管理,质量管理三个基本内容。在项目管理方面已有不少成功的经验、方法与软件工具。对于软件项目来说,还有两个比较特殊的问题。首先是测试工作方面的支持。由于软件的质量比较难于测定,所以不仅需要根据设计任务书提出测试方案,而且还需要提供相应的测试环境与测试数据,软件开发工具能够在这些方面提供帮助。另一个是版本管理问题。当软件规模比较大的时候,版本的更新,各模块之间以及模块与使用说明之间的一致性,向外提供的版本的控制等,都带来一系列十分复杂的管理问题。
▶2.2.2.3 软件开发工具的性能
任何软件都有一定的性能指标。由于功能范围十分广泛,各种功能在性能上的要求也不尽相同,很难有统一的规定。
所谓功能是指软件能做什么事情,所谓性能则是指事情做到什么样的程度。简单地说,前者是定性地说明能做什么的问题,后者是尽可能定量地说明能做到什么样的程度。作为一般的软件来说,效率、响应速度等必须考虑。但是,对于软件开发工具来说,以下五项特别重要。
(1)表达能力或描述能力。因为软件项目的情况千变万化,软件开发工具要能够适用某些软件项目,就要能适应软件项目的种种不同的情况,否则就不可能对软件开发提供有效的、实际的帮助。比如,在代码生成类型的软件开发工具中,常常根据使用者的若干参数来生成特定的代码段。这些参数的多少与选择是否合理就决定了这个工具的能力大小。如果选择合理、参数详尽,则使用者可以通过选择适当的参数,充分地规定自己所需要代码段的各种特征,从而成为自己真正需要的代码段落。反之,如果工具只提供很少几个参数,用户没有什么选择的余地,那么生成的代码段落十分死板,很难符合具体的应用软件的要求。类似的情况在需求分析、文档生成、项目管理中也经常遇到,将其统称为描述能力或表达能力。在选择与比较软件开发工具的时候,这一点应当是首先要考虑的。
(2)保持信息一致性的能力。软件开发者在管理开发过程中涉及大量的信息,信息一致性的检验与控制十分关键。随着软件项目规模的增大,单靠人的头脑来保证信息的一致性,几乎是不可能的。所以实际工作要求软件开发工具不但要存储大量的有关信息,而且要有条不紊地管理这些信息,而管理的主要内容就是保持它的一致性,至少在出现不一致的情况时要能够给出警告与提示。这方面的要求现在越来越高:各部分之间的一致,代码与文档的一致,功能与结构的一致,都要求软件开发工具提供有效的支持与帮助。
(3)使用的方便程度。工具应当尽量方便用户,而不能让用户因为使用工具而增添麻烦。在计算机技术中,人机界面已经发展成为一个重要的分支。软件开发工具无疑应当充分利用这些技术成果使其成为用户与硬件之间的桥梁。软件的开发应当与用户(或预期用户)有充分的交流,其中涉及的表达方法、人机界面应当尽量通俗易懂,以便吸引使用者参与开发过程。因此,对于软件开发工具来说,是否易用是一项重要的性能指标。
(4)工具的可靠性。软件开发工具应当具有足够的可靠性,即在各种干扰条件下仍能保持正常工作,而不致丢失或弄错信息。软件开发工具涉及的都是软件开发过程中的重要信息,绝对不能丢失或弄错,因此可靠性特别重要。而且,使用软件开发工具的目的就是要防止出现不一致的情况,工具自己应具备可靠性,才能够起到应起的作用。
(5)对硬件和软件环境的要求。如果软件开发工具对硬件、软件的环境要求太高,也会影响它的使用范围。一般来说,软件开发对环境的要求不应当超出它所支持的应用软件的环境要求,有时甚至还应当低于应用软件的环境要求。例如,项目管理的一些工具就可以在便捷机上运行,尽管它支持的项目也许是小型机以至中型机上运行的应用系统。当然,对于综合的、集成化的软件开发工具来说,环境的要求总比单项的工具要求高,但随着硬件、软件技术的迅速发展,这方面的限制将减少。软件开发工具的环境要求应当尽量降低,以利于广泛使用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。