1、项目一 软件工程基础任务任务一一 理理解软件及软件工程解软件及软件工程任务二任务二 熟悉软件开发流程熟悉软件开发流程任务三任务三 认识软件质量模型与认识软件质量模型与CMMI模型模型习习题题项目引导项目引导本项目主要介绍软件、软件工程以及软件开发流程,其中重点介绍软件工程的内涵、软件生命周期和常用的软件开发模型,帮助读者建立对软件及软件工程的概念,熟悉软件开发流程各个阶段所做的工作内容。知识目标知识目标(1)了解软件的定义、特点和分类。(2)了解软件危机、软件的发展历程。(3)理解软件工程的内涵和目标。(4)熟悉软件生命周期和常用的软件开发模型。(5)了解软件质量模型和CMMI模型。目标能力目
2、标能力能够了解软件工程的基本概念,重点理解软件生命周期,熟悉软件产品的开发流程,认识到软件质量的重要性。任务一任务一 理解软件及软件工程理解软件及软件工程一、软件及分类一、软件及分类1软件定义软件定义国家标准(GB)中对软件的定义为:与计算机系统操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。其他定义:(1)运行时,能够提供所要求功能和性能的指令或计算机程序集合。(2)程序能够满意地处理信息的数据结构。(3)描述程序功能需求以及程序如何操作和使用所要求的文档。以开发语言作为描述语言,可以认为:软件=程序+数据+文档。软件按照功能可以分为应用软件、系统软件和支撑软件(或工具软件)
3、,见表1-1。2软件特点软件特点软件产品不同于其他硬件产品,有其自身的特点:(1)软件是无形的,没有物理形态,只能通过运行状况来了解功能、特性和质量。(2)软件渗透了大量的脑力劳动,人的逻辑思维、智能活动和技术水平是软件产品的关键。(3)软件具有可复用性,软件开发出来很容易被复制,从而形成多个副本。(4)软件不会像硬件一样老化磨损,但存在缺陷维护和技术更新。(5)软件的开发和运行必须依赖于特定的计算机系统环境,对于硬件有依赖性,为了减少依赖,开发中提出了软件的可移植性。二、软件危机二、软件危机1软件的发展历程软件的发展历程计算机系统总是离不开软件的,然而早期的硬件、软件是融于一体的,为了使得某
4、台计算机设备能够完成某项工作,不得不给它专门配置程序。观察软件的发展,可发现软件生产有三个发展阶段,即程序设计阶段、程序系统阶段和软件工程阶段。1)程序设计阶段20世纪50至60年代中期,随着硬件的飞速发展,计算机实现批量生产,逐步商业化,从一定程度上带动了软件的发展,然而,软件生产仍然以个体为主。这一时期的程序通常是针对特定计算机或者特定任务编制的专用程序,程序规模小,编写强调算法效率和对计算机资源的充分利用,但没有系统化方法和管理理论指导软件开发。2)程序系统阶段大约在20世纪60年代中期到70年代中期,出现了多道程序、多用户系统和第一代数据库管理系统等新技术。以IBM的S/360为典型的
5、通用商业化大型计算机出现后,一些软件开发人员集合起来,专门为特定用户在大型计算机上开发大型软件系统,编程语言和程序设计理论开始成熟,软件生产以软件作坊的形式出现。3)软件工程阶段 在20世纪70年代中期到80年代中后期,结构化的工程方法获得了广泛应用,并已成为了一种成熟的软件工程方法学。应该说,采用工程的原理、技术和方法实施软件产品开发,以适应软件产业化发展的需要,成为了这个时期诸多软件企业的追求目标。软件工程”自产生以来,人们就寄希望于它去冲破“软件危机”这朵乌云。但是,软件危机现象并没有得到彻底排除,特别是,一些老的危机问题可能解决了,但接着又出现了许多新的危机问题,于是不得不去寻找一些更
6、新的工程方法。应该说,正是危机问题的不断出现,推动着软件工程方法学的快速发展。2软件危机软件危机(Software Crisis)20世纪60年代以前,计算机刚刚投入实际使用,软件设计往往只是为了一个特定的应用而在指定的计算机上进行设计和编制,并采用密切依赖于计算机的机器代码或汇编语言,软件的规模比较小,文档资料通常也不存在,很少使用系统化的开发方法;设计软件往往等同于编制程序,基本上是个人设计、个人使用、个人操作和自给自足的私人化的软件生产方式。1)软件危机的表现软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象,例如软件的开
7、发成本、进度、软件质量等。这些问题绝不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。具体来说,软件危机主要有以下几方面的典型表现:(1)软件开发成本、进度的估计很不准确。软件开发机构制订的项目计划跟实际情况有很大差距,使得开发经费一再突破。(2)软件产品常常与用户的要求不一致。在开发过程中,软件开发人员和用户之间缺乏信息交流。(3)软件产品质量可靠性差。软件开发过程中,没有建立起确实有效的质量保证体系。(4)软件文档不完整、不一致。计算机软件不仅仅是程序,在软件开发过程中还应该产生出一系列的文档资料。实际上,软件开发非常依赖这些文档资料。在软件开发过程中,软件
8、开发机构的管理人员需要使用这些文档资料来管理软件项目;技术人员则需要利用文档资料进行信息交流;用户也需要通过这些文档资料来认识软件,对软件进行验收,熟悉软件的安装、操作等。(5)软件产品可维护性差。软件中的错误非常难改正,软件很难适应新的硬件环境,很难根据用户的需要在原有软件中增加一些新的功能。(6)软件生产率低。软件生产率跟不上硬件的发展速度,不能适应计算机应用的迅速普及,使得现代计算机硬件提供的巨大潜力不能被充分利用。2)软件危机的原因软件危机现象最初出现在软件发展的第二个阶段程序系统阶段。通过对一系列危机现象的研究,人们总结发现,产生软件危机的原因主要体现在以下几个方面:(1)软件的不可
9、见特性。软件不同于硬件,它是计算机系统中的逻辑部件,缺乏“可见性”。(2)软件系统规模庞大。软件成为产品以后已不同于早期程序,随着其功能的增多,其规模越来越大、复杂程度越来越高。(3)软件生产工程化管理程度低。软件生产的工程化管理是软件作为产品所必需的,这意味着软件也需要像硬件一样,在软件分析、设计完成之后,才能考虑软件的实现。应该说,工程化管理能够降低解决问题的代价。(4)对用户需求关心程度不够。软件开发机构不熟悉用户业务领域。软件技术人员所关注的仅仅是计算机技术,他们不太愿意和用户沟通,轻视对用户的需求调查,也缺乏有效的用户调查策略和手段。(5)对软件维护重视程度不够。软件开发缺乏统一的规
10、范。在软件产品开发过程中,开发者很少考虑到这个软件今后还需要提供维护。(6)软件开发工具自动化程度低。尽管软件开发工具比 30 年前已经有了很大的进步,但直到今天,软件开发仍然离不开工程人员的个人创造与手工操作,软件生产仍不可能像硬件设备的生产那样,达到高度的自动化。三、软件工程三、软件工程1软件工程的定义软件工程的定义软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。1983年美国IEEE软件工程标准术语对软件工程下的定义为:软件工程是开发、运行、维护和修复软件的系统方法。其中对“软件”的定义
11、为:计算机程序、方法、规则、相关的文档资料以及在计算机上运行时所必需的数据。软件工程是指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来开发与维护软件的学科。2软件工程的目标软件工程的目标软件工程的目标是指在给定成本、进度的前提下,开发出具有适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可追踪性、可互操作性和满足用户需求的软件产品。追求这些目标有助于提高软件产品的质量和开发效率,减少维护的困难。(1)适用性:软件在不同的系统约束条件下,使用户需求得到满足的难易程度。(2)有效性:软件系统能最有效地利用计算机的时间和空间资源。各种软件无不把系统的时/空开销
12、作为衡量软件质量的一项重要技术指标。(3)可修改性:允许对系统进行修改而不增加原系统的复杂性。(4)可靠性:能防止因概念、设计和结构等方面的不完善造成的软件系统失效,具有挽回因操作不当造成软件系统失效的能力。(5)可理解性:系统具有清晰的结构,能直接反映问题的需求。可理解性有助于控制软件系统复杂性,并支持软件的维护、移植或重用。(6)可维护性:软件交付使用后,能够对它进行修改,以改正潜伏的错误,改进性能和其他属性,使软件产品适应环境的变化等。(7)可重用性:把概念或功能相对独立的一个或一组相关模块定义为一个软部件,可组装在系统的任何位置,降低工作量。(8)可移植性:软件从某一环境搬到另一个环境
13、的难易程度。(9)可追踪性:根据软件需求对软件设计、程序进行正向追踪,或根据软件设计、程序对软件需求进行逆向追踪的能力。(10)可互操作性:多个软件元素相互通信并协同完成任务的能力。3软件工程的三要素软件工程的三要素软件工程技术是指软件工程所具有的技术要素。作为软件开发与维护的工程方法学,软件工程具有三个方面的技术要素,即软件工程方法、软件工具和软件工程过程。软件工程方法是指完成软件开发与维护任务时,应该“如何做”的技术方法。它所涉及的任务贯穿于软件开发、维护的整个过程之中,包括软件需求分析、软件结构设计、程序算法设计等诸多任务。1)结构化方法结构化方法(Structured Approach
14、)也称新生命周期法,是生命周期法的继承与发展,也是生命周期法与结构化程序设计思想的结合。结构化的最早概念是描述结构化程序设计方法的,它用三种基本逻辑结构来编程,使之标准化、线性化。结构化方法不仅提高了编程效率和程序清晰度,而且大大提高了程序的可读性、可测试性、可修改性和可维护性。后来,把结构化程序设计思想引入MIS(Management Information System,管理信息系统)开发领域,逐步发展成结构化系统分析与设计的方法。2)面向对象方法 面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象
15、”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。软件工具是为了方便软件工程方法的运用而提供的具有自动化特征的软件支撑环境。软件工具通常也称为CASE,它是计算机辅助软件工程(Computer-Aided Software Engineering)的英文缩写。CASE工具覆盖面很广,包括分析建模、设计建模、源代码编辑生成、软件测试等。表1-2所列是一些常用的CASE工具类型。软件工程过程是指为了开发软件产品,开发机构在软件工具的支持下,按照一定的软件工程方法所进行的一系列软件工程活动。实际上,这一系列的活动也就是软件开
16、发中开发机构需要制定的工作步骤,它应该是科学的、合理的,否则将影响软件开发成本、进度与产品质量。因此,软件工程过程也就涉及了软件产品开发中有哪些工作步骤,各个工作步骤分别具有什么样的工作特征,以及各个工作步骤分别需要产生一些什么结果等方面的问题。4软件工程的基本原则软件工程的基本原则 软件工程是关于软件项目的工程方法学,其价值只能通过具体的软件项目才能真正体现出来。著名的软件工程专家B.W.Boehm经过总结,提出了以下七条基本原则:(1)采用分阶段的生命周期计划,以实现对项目的严格管理。软件项目的开展,需要计划在先,实施在后。统计表明,50%以上的失败项目是由于计划不周而造成的。(2)坚持阶
17、段评审制度,以确保软件产品质量。软件质量是通过软件产品反映出来的,但是,软件质量的形成将贯穿于整个软件开发过程之中。(3)实行严格的产品控制,以适应软件规格的变更。软件规格是软件开发与软件验收的基本依据,是不能随意变更的。(4)采用先进的程序设计技术。许多先进的软件工程方法往往都起源于先进的程序设计技术。(5)软件成果应该能够清楚地被审查。软件成果是软件开发的各个阶段产生出来的一系列结果,是对软件开发给出评价的基本依据,包括系统文档、用户文档、源程序、资源数据和最终产品等内容。(6)开发小组的人员应该少而精。这条基本原则具有以下两点含义:其一,软件开发小组的组成人员的素质应该好。其二,软件开发
18、小组的成员人数不宜过多。(7)承认不断改进软件工程实践的必要性。软件工程的意义重在实践,作为一门工程方法学,它所推出的一系列原则、方法和标准,不仅来源于工程实践,而且也需要在工程实践中不断地改进、完善。上述七条基本原则是实现软件开发工程化这个目标的必要前提。但是,仅有上述七条原则,还不足以保证软件开发工程化进程能够持久地进行下去。因此,Boehm提出了“承认不断改进软件工程实践的必要性”,这表明:软件工程在实际应用中,应该积极主动地采纳新的软件技术,并不断总结新的工程经验。软件技术在不断进步,软件的应用领域也在不断拓宽。软件工程必须紧紧跟上新时代软件的发展,才能获得更加持久的生命力。任务二任务
19、二 熟悉软件开发流程熟悉软件开发流程一、软件生命周期一、软件生命周期正如任何事物一样,软件也有其孕育、诞生、成长、成熟和衰亡的生存过程,一般称其为“软件生命周期”(Software Life Cycle,SLC)。软件生命周期是软件的产生直到报废或停止使用的生命周期。软件生命周期又称为软件生存周期或系统开发生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,从而提高软件的质量。但随着新的面向对象的设计方法和
20、技术的成熟,软件生命周期设计方法的指导意义正在逐步变小。生命周期的每一个周期都有确定的任务,并产生一定规格的文档(资料),提交给下一个周期作为继续工作的依据。按照软件的生命周期,软件的开发不再只单单强调“编码”,而是概括了软件开发的全过程。软件工程要求每一周期工作的开始只能且必须是在前一个周期结果“正确”前提的方式上的延续,因此,每一周期都是按“活动结果审核再活动直至结果正确”的方式循环往复进展的。软件生命周期一般分为六个阶段,即制订计划、需求分析、设计、编码、测试、运行和维护。软件开发的各个阶段之间的关系不可能是顺序且线性的,而应该是带有反馈的迭代过程。在软件工程中,这个复杂的过程用软件开发
21、模型来描述和表示。1)问题定义要求系统分析员与用户进行交流,弄清“用户需要计算机解决什么问题”,然后提出关于“系统目标与范围的说明”,提交用户审查和确认。2)可行性研究一方面在于把待开发的系统目标以明确的语言描述出来,另一方面从经济、技术、法律等多方面进行可行性分析。3)需求分析弄清用户对软件系统的全部需求,编写需求规格说明书和初步的用户手册,提交评审。4)开发阶段开发阶段由以下三个阶段组成:(1)设计。(2)实现:根据选定的程序设计语言完成源程序的编码。(3)测试。5)维护维护包括以下四个方面:(1)改正性维护:在软件交付使用后,由于开发测试时的不彻底、不完全,必然会有一部分隐藏的错误被带到
22、运行阶段,这些隐藏的错误在某些特定的使用环境下就会暴露出来。(2)适应性维护:为适应环境的变化而修改软件的活动。(3)完善性维护:根据用户在使用过程中提出的一些建设性意见而进行的维护活动。(4)预防性维护:为了进一步改善软件系统的可维护性和可靠性,并为以后的改进奠定基础。二、软件开发模型二、软件开发模型软件生命周期模型是指人们为开发更好的软件而归纳总结的软件生命周期的典型实践参考。常见的软件生命周期模型有瀑布模型、迭代式模型、螺旋模型、快速原型模型、喷泉模型等,本节将简单地分析并比较这几种模型。1瀑布模型瀑布模型瀑布模型(Waterfall Model)是一个项目开发架构,开发过程是通过设计一
23、系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好返回上一个阶段并进行适当的修改,否则项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。瀑布模型将软件生命周期划分为软件计划、需求分析和定义、软件设计、软件实现、软件测试、软件运行和维护这六个阶段,规定了它们自上而下、相互衔接的固定次序,如同瀑布流水逐级下落。采用瀑布模型的软件过程如图1-1所示。图1-1 采用瀑布模型的软件过程然而软件开发的实践表明,上述各项活动之间并非完全是自上而下且呈线性图式的,因此瀑布模型存在如下严重的缺陷:(1)由于开发
24、模型呈线性,所以当开发成果尚未经过测试时,用户无法看到软件的效果。这样软件与用户见面的时间间隔较长,也增加了一定的风险。(2)在软件开发前期未发现的错误传到后面的开发活动中时,可能会扩散,进而可能会造成整个软件项目开发失败。(3)在软件需求分析阶段,完全确定用户的所有需求是比较困难的,甚至可以说是不太可能的。2迭代式模型迭代式模型迭代式模型是RUP(Rational Unified Process,统一软件开发过程)推荐的周期模型。在RUP中,迭代被定义为包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和要使用该发布必需的所有其他外围元素。所以,在某种程度上,开发迭代是一次完整地经过所
25、有工作流程的过程,至少包括需求工作流程、分析设计工作流程、实施工作流程和测试工作流程。实质上,它类似小型的瀑布式项目。RUP认为,所有的阶段(需求及其他)都可以细分为迭代。每一次的迭代都会产生一个可以发布的产品,这个产品是最终产品的一个子集。迭代式模型如图1-2所示。图1-2 迭代式模型迭代式模型和瀑布模型的最大的差别就在于风险的暴露时间上。任何项目都会涉及一定的风险。如果能在生命周期中尽早确保避免了风险,那么计划自然会更趋精确。有许多风险直到已准备集成系统时才被发现。不管开发团队经验如何,都绝不可能预知所有的风险。由于瀑布模型的特点(文档是主体),很多的问题在最后才会暴露出来,这些问题的风险
26、是巨大的。在迭代式生命周期中,需要根据主要风险列表选择要在迭代中开发的新的增量内容。每次迭代完成时都会生成一个经过测试的可执行文件,这样就可以核实是否已经降低了目标风险。3螺旋模型螺旋模型螺旋模型是一种演化软件开发过程的模型,它兼顾了快速原型的迭代的特征及瀑布模型的系统化与严格监控。螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径。螺旋模型更适合大型的昂贵的系统级的软件应用。这种模型的每一个周期都包括需求定义、风险分析、工程实现和评审四个阶段,由这四个阶段进行迭代。软件开发过程每迭代
27、一次,软件开发又前进一个层次。采用螺旋模型的软件过程如图1-3所示。图1-3 采用螺旋模型的软件过程螺旋模型基本做法是在“瀑布模型”的每一个开发阶段前引入非常严格的风险识别、风险分析和风险控制,它把软件项目分解成一个个小项目。每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定。与瀑布模型相比,螺旋模型支持用户需求的动态变化,为用户参与软件开发的所有关键决策提供了方便,有助于提高目标软件的适应能力,并且为项目管理人员及时调整管理决策提供了便利,从而降低了软件开发风险。但是,我们不能说螺旋模型绝对比其他模型优越,事实上,这种模型也有其自身的缺点:(1)采用螺旋模型需要具有相当丰富的
28、风险评估经验和专业知识,在风险较大的项目开发中,如果未能及时标识风险,势必造成重大损失。(2)过多的迭代次数会增加开发成本,延迟提交时间。4快速原型模型快速原型模型快速原型模型又称原型模型,它是在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。从需求收集开始,开发者和客户在一起定义软件的总体目标,标识出已知的需求,并规划出需要进一步定义的区域;然后进行“快速设计”,即集中于软件中那些对用户/客户可见的部分的表示,以创建原型,并由用户/客户并评估进一步精化待开发软件的需求。随后逐步调整原型使其满足客户的要求,同时也使开发者对将要做的事情有更好的理解。这个过程是迭代的
29、,其流程从听取客户意见开始,随后是建造/修改原型、客户测试运行原型,然后往复循环,直到客户对原型满意为止。采用快速原型模型的软件过程如图1-4所示。图1-4 采用快速原型模型的软件过程快速原型模型的最大特点是能够快速实现一个可实际运行的系统初步模型,供开发人员和用户进行交流和评审,以便较准确地获得用户的需求。该模型采用逐步求精的方法使原型逐步完善,即每次经用户评审后修改、运行,不断重复最终得到双方认可。这个过程是迭代过程,它可以避免在瀑布模型冗长的开发过程中看不见产品雏形的现象。其优点一是开发工具先进,开发效率高,使总的开发费用降低,时间缩短;二是开发人员与用户交流直观,可以澄清模糊需求,调动
30、用户积极参与,能及早暴露系统实施后潜在的一些问题;三是原型系统可作为培训环境,有利于用户培训和开发同步,开发过程也是学习过程。快速原型模型的缺点是产品原型在一定程度上限制了开发人员的创新,没有考虑软件的整体质量和长期的可维护性。由于达不到质量要求,产品可能被抛弃而采用新的模型重新设计,因此快速原型模型不适合嵌入式、实时控制及科学数值计算等大型软件系统的开发。5喷泉模型喷泉模型喷泉模型(Fountain Model)是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。该模型认为软件开发过程自下而上,各阶段是周期性的并且是相互迭代和无间隙的,就像水喷上去又可以落下来,类
31、似一个喷泉。各个开发阶段没有特定的次序要求,并且可以交互进行,可以在某个开发阶段中随时补充其他任何开发阶段中的遗漏。采用喷泉模型的软件过程如图1-5所示。图1-5 采用喷泉模型的软件过程喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,这样就不利于项目的管理。此外,这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资
32、料的情况。任务三任务三 认识软件质量模型与认识软件质量模型与CMMI模型模型一、软件质量模型一、软件质量模型软件质量是指与软件产品满足规定的和隐含的需要的能力有关的特征或特性的组合。软件质量的特性是多方面的,但必须包括:与明确确定的功能和性能需求的一致性,能满足给定需要的全部特性;与明确成文的开发标准的一致性;与所有专业开发的软件所期望的隐含特性的一致性;顾客或用户认为能满足其综合期望的程度,即软件的组合特性,它确定即软件在使用中将满足顾客预期要求的程度。目前已有很多质量模型,它们分别定义了不同的软件质量属性。比较常见的三个质量模型是McCall 模型(1977年)、Boehm 模型(1978
33、 年)和ISO 9126模型(1993年)。McCall等认为,特性是软件质量的反映,软件属性可用做评价准则,定量化地度量软件属性可知软件质量的优劣。图1-6给出了McCall模型的组成部分。图1-6 McCall质量模型软件质量保证的主要活动内容归纳如下:(1)质量方针的制定与展开;(2)质量保证方针和质量保证标准的制定;(3)质量保证体系的建立与管理;(4)各阶段的质量评审;(5)确保设计质量;(6)重要质量问题的提出与分析;(7)总结实现阶段的质量保证活动;(8)整理面向用户的文档资料和说明书等;(9)产品质量鉴定、质量保证系统鉴定;(10)质量信息的收集、分析和使用。二、二、CMMI模
34、型模型CMMI(Capability Maturity Model Integration)为改进一个组织的各种过程提供了一个单一的集成化框架,该框架消除了各个模型的不一致性,减少了模型间的重复,增加了透明度和理解,建立了一个自动的、可扩展的框架,因而能够从总体上改进组织的质量和效率。CMMI主要关注点包括成本效益、明确重点、过程集中和灵活性四个方面。CMMI系统在内的信息化系统对公司的规范化管理、提高管理和运行效率、控制物料成本、降低经营风险等方面起到重要作用。CMMI的五个台阶(五个等级)如下:台阶一:CMMI一级,完成级。在完成级水平上,企业对项目的目标与要做的努力很清晰,项目的目标得以
35、实现。但是由于任务的完成带有很大的偶然性,企业无法保证在实施同类项目的时候仍然能够完成任务。企业在一级上的项目实施对实施人员有很大的依赖性。台阶二:CMMI二级,管理级。在管理级水平上,企业在项目实施上能够遵守既定的计划与流程,有资源准备,权责到人,对相关的项目实施人员有相应的培训,对整个流程有监测同控制,并同上级单位对项目与流程进行审查。企业在二级水平上体现了对项目的一系列的管理程序,这一系列的管理手段排除了企业在一级时完成任务的随机性,保证了企业的所有项目实施都会获得成功。台阶三:CMMI三级,定义级。在定义级水平上,企业不仅能够对项目的实施有一整套的管理措施,并保障项目的完成,而且企业能
36、够根据自身的特殊情况以及自己的标准流程,将这套管理体系与流程予以制度化,这样企业不仅能够在同类的项目上得到成功的实施,而且在不同类的项目上也能够得到成功的实施。科学的管理成为企业的一种文化、企业的组织财富。台阶四:CMMI四级,量化管理级。在量化管理级水平上,企业的项目管理不仅形成了一种制度,而且要实现数字化的管理,对管理流程要做到量化与数字化。通过量化技术来实现流程的稳定性,实现管理的精度,降低项目实施在质量上的波动。台阶五:CMMI五级,优化级。在优化级水平上,企业的项目管理达到了最高的境界。企业不仅能够通过信息手段与数字化手段来实现对项目的管理,而且能够充分利用信息资料,对企业在项目实施
37、的过程中可能出现的次品予以预防,能够主动地改善流程,运用新技术,实现流程的优化。由上述五个台阶可以看出,每一个台阶都是上面一层台阶的基石。要上高层台阶必须首先踏上较低一层台阶。企业在实施CMMI的时候,路要一步一步地走,一般先从二级入手。要在管理上下工夫,争取最终实现CMMI的第五级。习习 题题1名词解释 软件 软件工程 软件危机 软件生命周期2软件生命周期分哪几个时期?每个时期所完成的基本任务是什么?3软件生命周期每个阶段提交的文档是什么?项目二 问题定义及可行性研究任务一任务一 问题定义问题定义任务二任务二 可可行行性性研研究究习习题题项目引导项目引导本项目主要介绍问题定义阶段的任务和过程
38、,可行性研究阶段的任务、过程,可行性分析图形工具,成本估算技术。知识目标知识目标(1)了解问题定义阶段的任务和过程。(2)了解可行性研究阶段的任务和过程。(3)熟悉可行性分析图形工具。(4)掌握成本效益分析技术。(5)熟悉项目计划和可行性研究报告的内容。能力目标能力目标了解软件调研方法,掌握可行性分析的思路,会编写可行性研究报告。任务一任务一 问问 题题 定定 义义一、问题定义概述一、问题定义概述问题定义是软件定义时期的第一个阶段。作为软件的开发者,在这个阶段必须弄清用户“需要计算机解决什么问题”。问题定义阶段的基本任务就是分析要解决的问题,提交问题定义报告。二、教务管理信息系统概述二、教务管
39、理信息系统概述以下通过希望中学的教务管理信息系统概况(见表2-1)分析案例,将具体阐述教务管理信息系统要解决的问题是什么。系统分析员将与用户就对教务管理信息系统要解决的问题在理解上达成一致。此过程中,应该形成初步的系统方案,包括项目组织机构概况、项目开发背景、项目开发意义、初步的软件计划等内容。任务二任务二 可可行行性性研研究究一、可行性研究概述一、可行性研究概述在问题定义阶段,分析员和用户确定待开发软件所能够解决的问题。然而,在现实中这些问题并不一定可以在预定的系统规模之内解决。如果问题受到当前条件的约束,没有可行的解,那么花费在这个项目上的时间、资源、人力和经费都将被浪费。因此,从软件项目
40、的多个角度全面地分析问题是否有可行的解,对软件项目进行可行性研究是非常必要的。1可行性研究的任务可行性研究的任务可行性研究的目的不是解决待开发软件系统的问题,而是要确定这些问题在现有的条件下是否值得去解决。同时,应该用最小的代价确定在问题定义阶段所确定的系统的目标和规模是否符合实际,所确定的问题是否有可行的解决方案,论证系统方案在经济、技术和操作等方面是否可行。可行性研究主要论证以下三个方面的内容:(1)经济可行性。估算项目的开发费用以及新系统可能为用户组织带来的收益,将两者进行权衡,看结果是否可以接受。(2)技术可行性。分析项目要求的功能、性能以及限制条件,以现有的技术是否能够实现预期的软件
41、系统。所考虑的因素通常还应包括开发的风险、所需的软硬件资源、有力的开发团队等。(3)操作可行性。判断系统的操作方式在该用户组织内是否有可行性。除以上三种可行性,必要时还应从法律、社会效益等方面进一步研究分析。可行性研究的过程:首先是分析设计人员进一步分析和澄清问题定义,确定系统目标、约束和限制条件,并一一列举出来;其次是分析员使用系统分析方法和工具导出系统的逻辑模型;然后是根据逻辑模型,提供一种以上的系统实现方案,对每种方案都应该从技术可行性、经济可行性、操作可行性等方面进行研究比较;最后,分析员必须明确给出可行性研究的结果。2可行性研究的步骤可行性研究的步骤典型的可行性研究过程具体步骤如下:
42、1)复查系统规模和目标分析员对问题定义阶段书写的关于规模和目标的报告书进一步复查确认,改正含糊或不确切的叙述,清晰地描述对目标系统的一切限制和约束。2)研究目前正在使用的系统如果目前有系统在运行,则必须对现有的系统进行分析,不但要阅读现有系统的文档资料和使用手册,也要实地考察,找出其缺陷,使新系统能解决旧系统中存在的问题。常见的错误做法是花费过多时间去分析现有的系统。3)导出新系统的高层逻辑模型从现有的物理系统出发,根据现有系统的逻辑模型,导出新系统的逻辑模型,最后构造出新的物理系统。为了把新系统描绘得更加清晰准确,分析员通常利用数据流图和数据字典等工具,对系统中的数据进行描述和定义。4)进一
43、步定义问题新系统的逻辑模型实质上表达了分析员对新系统必须做什么的看法。分析员应该和用户一起再次复查问题定义、工程规模和目标,这次复查应该把数据流图和数据字典作为讨论的基础。5)导出和评价供选择的解法分析员应该从其建议的系统逻辑模型出发,导出若干个较高层次的(较抽象的)物理解法供比较和选择。首先从技术角度考虑,根据技术可行性初步排除一些不现实的系统。把技术上行不通的解法去掉之后,就剩下了一组技术上可行的方案。其次考虑操作方面的可行性。分析员应该根据使用部门处理事务的原则和习惯检查技术上可行的那些方案,去掉其中从操作方式或操作过程的角度看用户不能接受的方案。再次考虑经济方面的可行性。分析员应该估计
44、余下的每个可能的系统的开发成本和运行费用,并且与现有的系统进行比较。最后为每个在技术、操作和经济等方面都可行的系统制定实现进度表,这个进度表不需要(也不可能)制订得很详细,通常只需要估计生命周期每个阶段的工作量。6)推荐行动方针根据可行性研究结果,分析员应该做出是否进行这项工程的开发决定。如可行,分析员还应该选择一种最好的解法,说明选择这个解决方案的理由,并对所推荐的系统进行比较仔细的成本/效益分析。7)草拟开发计划分析员为所推荐的方案草拟一份开发计划,除了制订工程进度表之外,还应该估计对各类开发人员和各种资源的需要情况,此外还应该估计系统生命周期每个阶段的成本。8)书写文档提交审查分析员应该
45、把可行性研究结果写成清晰的文档,请用户、客户组织的负责人及评审组审查,以决定是否继续这项工程及是否接受分析员推荐的方案。二、系统流程图二、系统流程图系统流程图(System Flowchart)是描绘软件系统物理模型的图形工具。它的基本思想是用图形符号以黑盒子的形式描绘系统里面的每个部件(程序、文件、数据库、表格、人工过程等),表达信息在各个部件之间流动的情况,系统分析员绘制该图的过程有助于全面了解系统业务处理的概况,同时也有助于系统分析员与用户更好地相互交流。系统流程图不是对数据进行加工处理的控制过程,因此尽管系统流程图的某些符号和程序流程图的符号形式相同,但它们是完全不同的。1系统流程图的
46、符号系统流程图的符号系统流程图被用来描述系统的工作流程,以系统中的物理组件为单元说明系统的基本构造,并由此说明系统对数据的加工步骤。表2-2所列是系统流程图中常用的图形符号。显然,系统流程图中的符号是一些可以从系统中分离出来的物理元素,例如,设备、程序模块、报表等。2实例实例图2-1所示系统流程图表明了该学校系统内外之间、内部各部门之间、人员之间的业务关系及作业顺序、管理信息流动的流程。图2-1 希望中学教务管理信息系统流程图三、成本效益分析三、成本效益分析经济可行性研究是对项目实施成本和所能带来的经济效益的分析,以确定等待实施的项目是否值得投资。1成本估算成本估算在项目初期,无论是进行可行性
47、分析,还是制订项目预算,或是向客户提供软件报价,都需要针对软件项目进行成本的初步估算。下面将要介绍的是一些常用的软件项目成本估算方法。1)基于软件规模的成本估算 传统的软件规模是通过代码行数计算的。也就是说,通过估算软件代码总行数,可以计算出创建软件的总工作量和软件总成本。基于软件代码行数的人力成本估算公式是:2)基于任务分解的成本估算 这是一种以项目任务的人力消耗为依据的成本估算方法。可以把项目任务分解成诸多活动,例如,按照工程过程将项目任务分解成需求分析、概要设计、详细设计等若干个阶段,然后根据每个阶段的人员配备、周期长短和阶段任务参加人员平均工资情况,估算出每个阶段的人力成本,由此累计出
48、项目总成本。示例如表2-3所示。2效益分析效益分析无论是开发机构或是用户,都会关心项目效益,但值得注意的是,开发机构的效益直接来源于软件产品,而用户的效益则来自于对软件的应用,并且不同的软件产品会有不同的效益来源,例如,软件机构自主开发的通用软件和用户委托开发的定制软件,它们在效益来源上就分别有各自不同的途径。在计算项目的经济效益时,还不得不注意到,软件的经济效益是在软件投入使用之后的若干年里逐渐产生出来的,而资金投入则是当前之事。为了更加合理地计算资金效益,未来效益中产生的资金需要折算为现值进行计算。资金折现公式是:其中,k是银行利率;n是年份。可以使用一些经济指标来衡量项目的经济效益,其主
49、要经济指标有:(1)纯收入:指软件在估算的正常使用期内产生的资金收益被折算为现值之后,再减去项目的成本投入。(2)投资回收期:指软件投入使用后产生的资金收益折算为现值,到项目资金收益等于项目的成本投入时所需要的时间。(3)投资回收率:指根据软件的资金收益进行利息折算,可以将其与银行利率做比较。例如某“企业资源综合管理系统”的开发,假设开发过程中,人力、设备、支撑软件等各项成本总计预算是20万,计划一年开发完成并投入使用。表2-4所列为预计有效5年生命期内的逐年经济收益与折现计算。其中,银行年利率按6%计算。四、教务管理信息系统可行性研四、教务管理信息系统可行性研究究可行性分析是确定项目的开发是
50、否必要和可行,进一步明确系统的目标、规模与功能,提出系统开发的初步方案与计划,其关键问题是系统开发的技术可行性研究、经济可行性研究、营运可行性研究,以及系统开发初步方案与开发计划的制订。示例如表2-5所示。习习 题题1名词解释:系统流程图 可行性研究 投资回收期2简述可行性分析报告的内容。3简述成本估计以及软件项目效益分析技术。项目三 需求分析任务一任务一 认识需求分析认识需求分析任任务二务二 需求分析图形工具需求分析图形工具任任务三务三 结构化分析技术结构化分析技术任任务四务四 编写文档编写文档习习题题项目引导项目引导本项目主要对软件进行需求分析的任务步骤、所用到的图形工具,重点介绍结构化分