1、信息应用系统工程监理,报告人:王宝会 信息产业部信息化专家,信息应用系统建设监理课程计划,第一讲 信息应用系统建设基础知识 第二讲信息应用系统监理工作 第三讲准备阶段的监理工作 第四讲分析设计阶段监理 第五讲实施阶段监理 第六讲验收阶段的监理工作,第一讲 信息应用系统建设基础知识,在本讲中您能了解如下知识点:第一章软件的概念、特点和分类 第二章软件工程 第三章软件配置管理 第四章软件测试 第五章软件评审 第六章软件维护 第七章软件工程标准 第八章软件开发文档 第九章软件工业化生产时代的基础技术和方法,第一章 软件的概念、特点和分类,“确立并使用正确的工程原理和方法,以便能够经济地获得可靠而有效
2、的软件”。Friedrich I. Bauer,软件的概念,软件是与计算机系统的操作有关的程序、规程、规则及与之 有关的文档。 软件是计算机系统中与硬件相互依存的另一部分,它是包括 程序,数据及其相关文档的完整集合。其中,程序是按事先 设计的功能和性能要求执行的指令序列;数据是使程序能正 常操纵信息的数据结构;文档是与程序开发,维护和使用有 关的图文材料。,软件的构成要素,1、程序 2、规程 3、规则 4、文档,软件的特点,具有抽象性、严密性、“一次性”、智能性、持久性、依赖 性、复杂性、难以度量、易出错、必须维护、成 本昂贵等特点。 (1) 软件是一种逻辑实体,具有抽象性。 (2) 对软件的
3、质量控制:必须着重在软件开发方面下功夫。 (3) 软件没有老化问题:然而它存在退化问题。 (4) 软件的开发和运行存在:移植的问题。 (5) 软件的开发方式:手工。 (6) 软件本身是复杂的:实际问题,程序逻辑结构所决定的。 (7) 软件成本昂贵:投入大量、复杂、高强度的脑力劳动。,源程序、执行程序,高级语言源程序经编译后,得到的目标模块还需进行连接。连接程序(即Linker)找出需要连接的外部模块并到模块库中找出被调用的模块,调入内存并连接到目标模块上,形成可执行程序。,软件的分类方法,按软件的功能进行划分: 系统软件 支撑软件 应用软件 在信息系统工程建设中,系统软件和支撑软件通常为外购软
4、 件,应用软件通常为承建单位自主开发或分包开发的软件。 按软件服务对象的范围划分: 项目软件 产品软件 按软件规模进行划分: 按开发软件所需的人力、时间以及完成的源程序行数,可确 定六种不同规模的软件。 按软件工作方式划分: 实时处理软件 分时软件 交互式软件 批处理软件 按使用的频度进行划分: 一次使用 较高的使用频度 按软件失效的影响进行划分: 影响不大 影响酿成灾难性后果,软件的分类方法,按技术特点的角度进行划分: 业务软件:处理日常业务,已成为管理信息系统MIS 科技计算软件: 注重数值算法的速度和精度。目前转向多机协作计算、并行计算、可视计算等 嵌入式(embeded)软件:使工业产
5、品自动化、智能化 实时(real-time)软件多用于工业控制系统 个人计算机软件: 字处理、报表、制图、多媒体写作、娱乐游戏、个人数据库、个人财务、联机上网等 人工智能软件:以非数值算法解题,一般有一知识库存放知识和规则。,软件工程是一类求解软件的系统工程的派生,软件工程是一门交叉性学科。软件工程这一概念,主要是针对20世纪60年代“软件危机”而提出的。其主要成果有:提出了瀑布模型,开发了一些结构化程序设计语言、结构化方法等。并且围绕项目管理提出了费用估算、文档复审等方法和工具,第二章 软件工程概述,70年代初,自“软件工厂”这一概念提出以来,其主要成果有:提出了应用广泛的面向对象语言以及相
6、关的面向对象方法。尤其是近几年来,针对软件复用及软件生产,软件构件技术以及软件质量控制技术、质量保证技术得到了广泛的应用。,软件工厂,软件工程框架,软件工程的框架是由软件工程目标、软件工程活动和软件工程原则三个方面的内容组成。,由上图可以看出软件工程可定义为三元组: 目标,原则,活动 其中目标定义为: 正确性:软件产品达到预期功能的程度。 可用性:软件基本结构、实现及文档为用户可用的程度。 开销适宜性:软件开发、运行的整个开销满足用户要求的程度。 这三方面的特性决定了软件过程、过程模型和工程方法的选择。,软件工程目标,选取适宜开发范型。对需求定义的易变性,采用适宜的开发范型予以控制,以保证软件
7、产品满足用户的要求。 采用合适的设计方法。合适的设计方法有助于这些特征的实现,以达到软件工程的目标。 提供高质量的工程支持。在软件工程中,软件工具与环境对软件过程的支持颇为重要。 重视开发过程的管理。当软件过程得以有效管理时,才能实现有效的软件工程。,软件工程原则,软件工程活动是“生产一个最终满足需求且达到工程目标的软件产品所需要的步骤”。主要包括需求、设计、实现、确认以及支持等5个活动。 需求活动包括问题分析和需求分析。问题分析获取需求定义。需求分析生成功能规约。 设计活动一般包括概要设计和详细设计。概要设计建立整个软件体系结构。详细设计产生程序员可用的模块说明。 实现活动CODING AN
8、D TESTING。 确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。 支持活动包括修改和完善。维护。,软件工程活动,需求:定义问题,即建立系统模型,主要任务包括:需求获取需求定义,系统功能的一个正确的陈述需求规约系统需求规格说明,其主要成分:系统模型、系统功能的一个精确、系统的描述及需求验证 。 设计:在需求分析的基础上,给出系统的软件解决方案。 1)总体设计: 系统的软件体系结构2)详细设计: 针对总体设计结果,给出每一构件的详细描述。 实现:选择可用的构件或语言,对每一构件进行编码。 确认:贯穿软件开发的整个过程,主要任务是:软件测试。 支持:完善性维护、纠错性
9、维护。,软件工程流程,软件生存周期,软件生存周期是“从设计软件产品开始到软件产品不能再使用为止的时间周期。软件生存周期典型地包括项目计划阶段,需求阶段,设计阶段、实现阶段、测试阶段、安装和验收阶段、运行和维护阶段,有时还包括引退阶段。,确定要开发软件系统的总目标,给出它的功能、性能、可靠性及接口等方面的要求;根据有关成本与进度的限制分析项目的可行性,探讨解决问题的可能方案;制定完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查。,软件项目计划,需求分析和定义方式: 需求明确的:用正式的信息域分析,可用于建立信息流和信息结构的模型,然后逐渐扩充这些模型成为软件的规格说明。 需求非明确:
10、用软件原型化方法,即建立软件原型,并由用户进行评价,从而确定软件需求。编写出软件需求说明书及初步的用户手册,提交管理机构评审。,软件需求分析,概要设计,把已确定了的各项需求转换成一个相应的体系结构,以结构设计和数据设计开始,建立程序的模块结构,定义接口并建立数据结构。此外,要使用一些设计准则来判断软件的质量。 详细设计,考虑设计每一个模块部件的过程描述,对每个模块要完成的工作进行具体的描述。编写设计说明书,提交评审。,软件设计分为概要设计和详细设计,系统设计是把需求转化为软件系统的最重要的环节。系统设计的优劣在根本上决定了软件系统的质量。就象“一切帝国主义都是纸老虎”那样可以断定“差的系统设计
11、必定产生差的软件系统。”所以我们要努力保证系统设计“根正苗红”,把一切左倾、右倾的设计思潮消灭在萌芽状态。,保证系统设计“根正苗红”,Windows NT的一位系统设计师拥有8辆法拉利跑车,让Microsoft公司的一些程序员十分眼红。但你只能羡慕而不能愤恨,因为并不是每个程序员都有本事成为复杂软件系统的设计师。系统设计要比纯粹的编程困难得多。即便你清楚客户的需求,却未必知道应该设计什么样的软件系统既能挣最多的钱又能让客户满意。,神气的软件设计师,用一种适当的程序设计语言把软件设计转换成计算 机可以接受的程序代码。应当就风格及清晰性对代 码进行评审,而且反过来应能直接追溯到详细设计 描述。,程
12、序编码,软件测试,软件测试的主要任务是发现并排除在软件需求分析、设计和实现阶段产生的各种错误,以保证交付软件的质量。 软件测试目的是“在一定的开发时间和经费的限制下,通过执行有限个测试过程,尽可能多的发现软件中的错误。,单元测试检查每一单独的模块部件的功能和性能。 组装测试提供了构造软件模块结构的手段,同时测试其功能和接口。 确认测试检查所有的需求是否都得到满足。 在每一个测试步骤之后,要进行调试,以诊断和纠正软件的故障。,软件测试,软件测试的基本原则,1、程序员或程序设计机构不应测试自己设计的程序 2、在设计测试用例时,不仅要确定输入数据,还要确定预期的输出结果 3、在设计测试用例时,不仅要
13、考虑合理的输入数据,还要考虑不合理的输入数据。 4、除了检查程序是否做了它应当做的事情之外,还应检查它是否做了不应当做的事 5、应保留所有的测试用例,以便软件维护和回归测试 6、模块中存在错误的概率与已发现的错误数成正比 7、严格执行测试计划,排除测试的随意性,例:Outlook溢出,起源于vCard(一种电子名片) Outlook直接打开并运行附件中的vCards而不提示用户 vCards存储于.vcf文件中,也是没有提示而直接运行的 当vCards的生日字段(BDAY)超过55字符时,就会出现溢出 对策:应用IE 5.5 sp2,已交付的软件投入正式使用,并在运行 过程中进行适当的维护。为
14、改正错误, 适应环境变化及功能增强而进行的一系 列修改活动。与软件维护相关联的那些 任务依赖于所要实施的维护的类型。,运行维护,软件开发模型是软件建设过程的结构框架。 软件开发的承建单位必须首先制定出适宜的开发策略和软件工程模型,以便对要交付的软件的开发过程实施有效的控制和管理。监理单位应该根据承建单位选定的模型制定自己的监理策略。 承建单位可根据软件开发项目的具体情况选择采用何种开发策略、方法和模型,并要在有关文档中(例如在“项目开发计划”中)对所采用的软件工程方法与模型加以说明。,软件开发模型,规定了各项软件工程活动,包括:制定开发计划,进行需求分析和说明,软件设计,程序编码.测试及运行维
15、护,并且规定了它们自上而下,相互衔接的固定次序,如同瀑布流水,逐级下落,瀑布模型,瀑布式生存周期模型,软件开发的实践表明,上述各项活动之间并非完全是自上而下,呈线性图式。实际情况是,每项开发活动均处于一个质量环(输入-处理-输出-评审)中。只有当其工作得到确认,才能继续进行下一项活动 瀑布模型的开发策略是要求软件开发组织在进行软件开发时,要严格划分开发过程的每一个阶段,并根据工程化的有关规定,在“软件开发计划”及“软件质量保证计划”中反映每个阶段的活动。对每阶段的工作要进行认真的评审。只有在某个阶段的目标确实达到后,才能进入下一阶段的工作。 瀑布模型为软件开发和软件维护提供了一种理想情况下的管
16、理模式,从理论上讲,对需求能严格地进行预先定义的软件开发项目是合适和有效的。然而在软件工程实践中,这一开发策略一旦遇到与假设不相符合的情况,就容易导致失败。尽管如此,该模型仍不失为一个很好的基准模型。事实上,在今天的软件工程实践中常常都是以瀑布模型为基础综合采用其它各种模型的优点,以改善软件开发过程对现实情况的适应性。,瀑布模型,原型模型也称演化模型,此方法主要针对所要开发的系统的需求不是很清楚, 需要一个可实际运行的工作演示系统,即原型,作为软件开发人员和用户学习、 研究、试验和确定软件需求的工作平台。 原型模型又可细分为增量模型和渐进模型。,原型模型,快速分析。快速确定软件系统的基本要求。
17、 构造原型。尽快实现一个可运行的系统。 运行和评价原型。验证原型的正确程度,根据用户的新设想,提出全面的修改意见。 修正和改进。首先修改并确定需求规格说明,然后再重新构造或修改原型。 判定原型是否完成。如果用户认可,迭代过程可以结束。否则,继续迭代。 判断原型细部是否说明。 原型细部的说明。 判定原型效果。 整理原型和提供文档。,原型化开发方法步骤,对于需求不能很快全部明确的系统,软件开发项目难于 做到一次开发成功,可使用此模型。此时,应尽可能明 确已知的软件需求,完成相应的需求分析,并按瀑布模 型的方法进行第一次开发工作。在系统集成时,通过实 验找出需求中的欠缺和不足之处,明确那些未知的软件
18、 需求,再迭代进行增加部分的需求分析和开发。对有些 系统这种反复可能要进行几次,但尽可能不要超过两 次,否则难以控制软件的结构规模、开发质量和进度。,增量模型,此模型主要是针对部分需求尽管明确但一时难以准确进行 定义的系统设计。如:用户的操作界面等。使用此模型 时,可以先做初步的需求分析,之后立即进行设计和编 码,随后与系统进行第一次集成(不作或少作测试)。根 据集成后反映的问题,进一步做更全面的需求分析、设 计、编码、测试和集成,渐进模型,对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模型与演化模型结合起来,并且加入两种模型均忽略了的风险分析。螺旋模型沿着螺线旋转,如下图所示
19、,在笛卡尔坐标的四个象限上分别表达了四个方面的活动,即: 制定计划确定软件目标,选定实施方案,弄清项目开发的限制条件; 风险分析分析所选方案,考虑如何识别和消除风险; 实施工程实施软件开发 客户评估评价开发工作,提出修正建议。 沿螺线自内向外每旋转一圈便开发出更为完善的一个新的软件版本。,螺旋模型,螺旋模型,螺旋模型是软件开发的高级策略,它不仅适合结构化方法而且更适合面向对象方法。它的实施将对软件开发组织的工作模式、人员素质、管理和技术水平产生深远的影响,是最有前途的过程模型之一。(适用于产品开发),螺旋模型,喷泉模型对软件复用和生存周期中多项开发活动的集成提供了支持,主要支持面向对象的开发方
20、法。“喷泉”一词本身体现了迭代和无间隙特性。系统某个部分常常重复工作多次,相关功能在每次迭代中随之加入演进的系统。所谓无间隙是指在开发活动,即分析、设计和编码之间不存在明显的边界,喷泉模型,配置管理项 在软件生存周期内所产生的各种管理文档和技术文档、源代 码列表,及其可执行代码,以及运行所需的各种数据,构成 软件配置管理项。 配置管理库 各系统应在其所属各级中建立下列各库: 开发库(DL) 通常,开发库可仅在项目开发组内设立,并由其负责维护。 受控库(CL) 通常,受控库以软件配置项为单位建立并维护。 产品库(PL 通常,产品库可在系统、子系统级上设立并维护。 各类库中应存放哪些软件成分,应视
21、所开发软件的实际情况酌定。,第三章 软件配置管理,质量要求 软件配置管理项是该软件的真正实质性材料,因此必须保持正确性、完备性和可 追踪性;任何软件配置管理项都必须做到“文实相符、文文一致”。以满足“有 效性”、“可见性”和“可控性”要求。管理规程 软件配置项不论大小都必须实施软件配置管理。但所管软件实体的多少,实施控制的方式和投入人力多少则与软件配置项的规模等级、安全性关键等级,以及风险大小有关。必须指出,对于安全性关键等级为A、B级的软件配置项的管理必须从严。 每个计算机系统均应制定软件配置管理规程,至少应明确规定: 各级、各库中所管的软件实体的清单; 保证安全性、可靠性、保密性、正确性、
22、完备性、一致性和可追踪性的具体措施; 入库控制办法和审批手续; 出库条件及其必备的手续; 变更控制办法和审批手续。 工具 为了严格、有效地实施软件配置管理,承建单位应使用软件配置管理工具,以满 足上述质量要求。(VSS),第三章 软件配置管理,第四章 软件测试,测试目的: 通过测试,发现软件错误; 验证软件是否满足软件需求规格说明和软件设计所规定的功能、性能及其软件质量特性的要求; 为软件质量的评价提供依据。 软件测试技术: 虽然软件测试技术在不断地发展,但传统的 分类方法仍然适用。按使用的测试技术不同 可以将测试分为: 静态测试:静态分析和代码审查 动态测试:白盒测试和黑盒测试。,静态分析主
23、要对程序进行控制流分析、数据流分析、接口分析和表达式分析等。静态分析一般由计算机辅助完成。目前具备静态分析功能的软件测试工具有很多。 白盒测试是一种按照程序内部的逻辑结构和编码结构设计并执行测试用例的测试方法。根据覆盖准则使程序中的每个语句、每个条件分支、每个控制路径都在程序测试中受到检验。主要以LOG。 黑盒测试是一种着重于验证软件功能和性能的正确性,它的典型测试项目包括功能测试、性能测试、边界测试、余量测试、强度测试等。,软件测试方式,制定“软件测试计划”。 编写“软件测试说明”。对各测试用例所需的测试环境、测试软件的准备工作给予说明。对于软件安全性关键等级为A、B级或软件规模等级为A、B
24、级的软件,软件开发单位必须组织此测试阶段的准备就绪评审,以审查测试用例、环境、测试软件、测试工具等准备工作是否全面、到位。 测试用例设计要求:测试用例的设计应包括该测试用例的测试过程、测试输入数据、期望测试结果和评价测试结果的标准等; 测试用例的输入应包括合理的(有效等价类)值、不合理的(无效等价类)值和边界值输入; 为每个测试用例规定测试规程,包括运行测试用例的准备、初始化、中间步骤、前提和约束;,软件测试工作规程,把全部测试用例写入“软件测试说明”。 执行软件测试。按照“软件测试计划”和“软件测试说明”对软件进行测试。在测试过程中,应填写“软件测试记录”。如果发现软件问题,应填写“软件问题
25、报告单”。测试记录包括测试的时间、地点、操作人、参加人、测试输入数据、期望测试结果、实际测试结果及测试规程等。 编制“软件测试报告”。具体的软件测试工作完成之后,依照“软件测试计划”、“软件测试说明”、“软件测试记录”对测试结果进行统计、分析和评估,在此基础上编制“软件测试报告”。 修正软件测试过程中发现的问题。修正软件问题要有受控措施,应先填写“软件变更变更报告单”,在得到同意的答复之后进行软件的修改(包括软件文档、程序和数据的全面修改),修改完成之后,必须进行回归测试。 软件测试阶段评审:测试阶段工作全部完成之后,应组织本测试阶段的评审。,软件测试工作规程,在软件生存周期各阶段应开展的软件
26、测试活动,软件测试应由独立于软件设计开发的人员进行,根据软 件项目的规模等级和安全性关键等级,软件测试可由不 同机构组织实施。 软件单元测试由承建单位自行组织,一般由软件开发组实施测试。 软件集成测试由承建单位自行组织,软件开发组和软件测试组联合实施测试。 软件确认测试由承建单位自行组织,软件测试组实施测试。 系统测试应由业主单位组织,成立联合测试组(一般由专家组、业主单位、软件评测单位、承建单位等联合组成测试组)实施测试。,测试组织,承建单位在测试过程中应编制“软件问 题报告”和“软件变更报告”, 描述在 配置控制下的软件或文档中发现的各种 问题。“软件问题报告”和“软件变更 报告”应描述必
27、需的纠错工作和解决问 题所进行的各项活动。,软件问题报告和软件变更报告,承建单位应建立和实施纠错工作规程, 以便处理 在配置控制下和按产品合同要求进行软件开发活动 中发现的问题。纠错工作规程应遵照软件配置管 理执行。,纠错工作过程,第五章 软件评审,评审目的 软件评审是为了使软件开发按软件工程提出的过程循序进行,在各研制阶段结束 时,检查该阶段的工作是否完成,所提交的软件阶段产品是否达到了规定的质量 和技术要求,决定是否可以转入下一阶段研制工作。,内部评审对每个软件的每个开发阶段都要进行;外部评审在内部评审的基础上进行。一般情况下,软件需求分析、概要设计、确认测试和系统测试 阶段应进行外部评审
28、。,软件评审,提出评审申请 承建单位在本阶段工作完成并通过内部评审后,至少提前十天提出外部评审申请。同时将评审文档及资料交给软件专家组成员进行审查。 成立评审组织 成立评审委员会。宣布评审委员会的组成成员和参加审查组的软件专家组成员。 评审委员会成员一般应包括: 软件专家组成员(占评审委员会总人数的50% 以上); 质量管理人员; 科研计划管理人员; 开发组成员; 业主单位代表。,外部评审的步骤,审查组由软件专家组成; 参加同一个项目的软件专家组成员应相对稳定。,审查组成员组成及要求,评审结论 评审小组写出结论提交专家组. 专家组审查结论 专家组审查结论分为:通过和不通过,并以此向评审委员会提
29、出建 议。通过情况下,承建单位对提出的软件问题要限期修改,修改情 况由软件专家组负责人同意签字后可转入下一阶段工作。不通过情 况下,对提出的问题由承建单位重新做工作后,再提出评审申请进 行复审。在复审通过前不能转入下一阶段工作。复审的步骤与外部 评审相同。,软件评审,第六章 软件维护,软件维护是软件产品交付使用后,为纠正错误或 改进性能与其他属性,或使软件产品适应改变了 的环境而进行的修改活动。软件维护一般分为纠 错性维护、适应性维护和完善性维护三种类型。,纠错性维护,纠正在开发阶段产生而在测试和验收过程没有发现的错误。其主要 内容包括: 设计错误; 程序错误; 数据错误; 文档错误。,为适应
30、软件运行环境改变而作的修改。环境改变的主要内容包括: 影响系统的规则或规律的变化; 硬件配置的变化,如机型、终端、外部设备的改变等; 数据格式或文件结构的改变; 软件支持环境的改变,如操作系统,编译器或实用程序的变化等。,适应性维护,完善性维护 为扩充功能或改善性能而进行的修改。修改方式有插 入、删除、扩充和增强等。主要内容包括: 为扩充和增强功能而作的修改,如扩充解题范围和算法优化等; 为改善性能而作的修改,如提高运行速度、节省存贮空间等; 为便于维护而作的修改,如为了改进易读性而增加一些注释等。,软件维护,第七章 软件工程标准,在开发一个软件时,需要有许多层次、不同分工的人员 相互配合;在
31、开发项目的各个部分以及各开发阶段之间 也都存在着许多联系和衔接问题。如何把这些错综复杂 的关系协调好,需要有一系列统一的约束和规定。在软 件开发项目取得阶段成果或最后完成时,还需要进行阶 段评审和验收测试。投入运行的软件,其维护工作中遇 到的问题又与开发工作有着密切的关系。软件的管理工 作则渗透到软件生存期的每一个环节。所有这些都要求 提供统一的行为规范和衡量准则,使得各种工作都能有 章可循。,与软件相关的各种标准,(1)网络协议:ISO/OSI vs TCP/IP(2)软件构件:CORBA vs COM(3)建模语言:UML(4)数据访问:ODBC/JDBC(5)工程管理:CMM vs IS
32、O(9001-3,15504),根据软件工程标准制定的机构和标准适用 的范围有所不同,它可分为五个级别,即 国际标准、国家标准、行业标准、企业(机 构)标准及项目(课题)标准。以下分别对五级标准的标识符和标准制定(或批准)的机构做一简要说明:,软件工程标准的层次,由国际联合机构制定和公布,提供各国参考的标准。如 ISO(International Standards Organization)国际标准化组织。这一国际机构有着广泛的代表性和权威性,它所公布的标准也有较大的影。1960年代初,该机构建立了“计算机与信息处理技术委员会”, 简称ISOTC97,专门负责与计算机有关的标准化工作。这一标
33、准通常冠有ISO字样,如ISO 8631 86 Information processingprogram constructs and conventions for their representation信息处理程序构造及其表示法的约定。该标准现已由中国收入国家标准。,国际标准,由政府或国家级的机构制定或批准,适用于全国范围的标准,如: GB中华人民共和国国家技术监督局是中国的最高标准化机构,它所公布实施的标准简称为“国标”。现已批准了若干个软件工程标准。,国家标准,由行业机构、学术团体或国防机构制定,并适 用于某个业务领域的标准,如: IEEE(Institute of Electri
34、cal and Electronics Engineers)美国电气与电 子工程师学会。近年该学会专门成立了软件标准分技术 委员会(SESS),积极开展了软件标准化活动,取得了显 著成果,受到了软件界的关注。IEEE通过的标准经常要 报请ANSI审批,使之具有国家标准的性质。,行业标准,1983年5月中国原国家标准总局和原电子工业部主持成立了“计算机 与信息技术标准化技术委员会”,下设十三个分技术委员会。与软 件相关的程序设计语言分委员会和软件工程技术分委员会。中国制 定和推行标准化工作的总原则是向国际标准靠拢,对于能够在中国 适用的标准一律按等同采用的方法,以促进国际交流。这里,等同 采用是
35、要使自己的标准与国际标准的技术内容完全相同,仅稍做编 辑性修改。 从1983年起到现在,中国已陆续制定和发布了20项国家标准。这些 标准可分为4类: 基础标准; 开发标准; 文档标准; 管理标准。,软件工程的国家标准,软件工程标准,第八章 软件开发文档,文档的种类 GB 8567-88 计算机软件产品开发文件编制指南中规定,在软件的开发 过程中,一般地说,应该产生十四种文件。这十四种文件是: 可行性研究报告; 项目开发计划; 软件需求说明书; 数据要求说明书; 概要设计说明书; 详细设计说明书; 数据库设计说明书; 用户手册; 操作手册; 模块开发卷宗; 测试计划; 测试分析报告; 开发进度月
36、报; 项目开发总结报告。,文档的作用,(1)提高软件开发过程的可见性 (2)提高开发效率 (3)可作为开发人员在一定阶段内的工作成果和结束标志 (4)记录开发过程中的有关技术信息,以便协调以后的软件开发、使用和维护 (5)提供有关软件运行、维护和培训的信息 (6)便于潜在用户了解软件的功能、性能等各项指标,软件开发文档,第九章 软件工业化生产时代的基础技术和方法,CMM软件过程成熟度模型概要 个体软件过程PSP 群组软件过程TSP 面向对象的软件开发方法 可视化开发方法 软件复用技术,CMM软件过程成熟度模型概要,CMM是Capability Maturity Model的英文单词的第一字母缩
37、写,中文称:软件能力成熟度模型。 发展史 1986年美国政府委托卡内基梅隆大学软件工程研究所(SEI)开发一套评估软件承包商能力的方法。 1987年9月发布了一套软件过程成熟度框架。 1991年SEI将这套框架发展成为软件成熟度模型,简称CMM,定义为CMM1.1版。 1997年11月SEI完成CMM2.0版,1999年发布。 CMM将能力成熟度模型分为5个级别,CMM的5个级别,CMM1:初始级 企业一般不具备稳定的软件开发与维护的环境,软件项目的成功取决于某些个人的技能和经验。 CMM2:可重复级 建立了基本的软件项目管理过程规范。项目经理可以基于过往的项目的经验来计划与管理新的项目。 C
38、MM3:定义级 已经将管理和开发两方面的过程文档化、并综合成为企业机构的标准软件过程。公司所有项目都可以通过裁减机构的标准软件过程而建立适合于本项目的过程规范。 CMM4:定量管理级 企业对产品与过程建立起定量的质量目标,同时在过程中加入规定得很清楚的连续的度量。作为企业的度量方案, 要对所有项目的重要的过程活动进行生产率和质量的度量。 CMM5:优化级 整个企业将会把重点放在对过程进行不断的优化。企业会采取主动去找出过程的弱点与长处,以达到预防缺陷 的目标。同时,分析有关过程的有效性的资料,作出对新技术的 成本与收益的分析,以及提出对过程进行修改的建议。,在介绍CMM内容之前,首先概述一下不
39、成熟软件组织与成熟软件组织的差异。在不成熟的软件单位,软件过程一般由实践者及其管理者在项目进程中临时拼凑而成,因而推迟进度和超出预算已成为惯例,产品质量难以预测,有时为了满足进度要求,常在产品功能和质量上做出让步。 然而,一个成熟软件组织具有在全组织范围内管理软件、开发过程和维护过程的能力,规定的软件过程被正确无误地通知到所有员工,工作活动均按照已规划的过程进行。并通过可控的先导性试验和费效分析使这些过程得到改进,对已定义过程中的所有岗位及其职责都有清楚的描述,和通过文档与培训使全组织有关人员对已定义的软件过程都有很好的理解,从而使其软件过程所导致的生产率和质量能随时间的推移得到改进。 下表给
40、出了不成熟和成熟软件组织的比较,这种比较分析不仅是形成软件能力成熟模型的基础,也有利于理解该模型。,CMM软件过程成熟度模型概要,CMM软件过程成熟度模型概要,CMM的一些基本概念 (1)软件过程:人们用于开发和维护软件及其相关过程的一系列活动,包括软件工程活动和软件管理活动。 (2)软件过程能力:描述(开发组织或项目组)遵循其软件过程能够实现预期结果的程度,它既可对整个软件开发组织而言,也可对一个软件项目而言。 (3)软件过程性能:表示(开发组织或项目组)遵循其软件过程所得到的实际结果,软件过程性能描述的是已得到的实际结果,而软件过程能力则描述的是最可能的预期结果,它既可对整个软件开发组织而
41、言,也可对一个特定项目而言。 (4)软件过程成熟:一个特定软件过程被明确和有效地定义,管理测量和控制的程度。 (5)软件能力成熟度等级:软件开发组织在走向成熟的途中几个具有明确定义的表示软件过程能力成熟度的平台。 (6)关键过程域:每个软件能力成熟度等级包含若干个对该成熟度等级至关重要的过程域,它们的实施对达到该成熟度等级的目标起到保证作用。这些过程域就称为该成熟度等级的关键过程域,反之有非关键过程域是指对达到相应软件成熟度等级的目标不起关键作用。归纳为:互相关联的若干软件实践活动和有关基础设施的一个集合。 (7)关键实践:对关键过程域的实践起关键作用的方针、规程、措施、活动以及相关基础设施的
42、建立。关键实践一般只描述“做什么”而不强制规定“如何做”。整个软件过程的改进是基于许多小的、渐进的步骤,而不是通过一次革命性的创新来实现的,这些小的渐进步骤就是通过一些关键实践来实现。 (8)软件能力成熟度模型:随着软件组织定义、实施、测量、控制和改进其软件过程,软件组织的能力也伴随着这些阶段逐步前进,完成对软件组织进化阶段的描述模型。,CMM软件过程成熟度模型概要,软件开发的风险之所以大,是由于软件过程能力低,其中最关键的问题在于软件开发组织不能很好地管理其软件过程,从而使一些好的开发方法和技术起不到预期的作用。而且项目的成功也是通过工作组的杰出努力,所以仅仅建立在可得到特定人员上的成功不能
43、为全组织的生产和质量的长期提高打下基础,必须在建立有效的软件工程实践和管理实践的基础设施方面,坚持不懈地努力,才能不断改进,才能持续地成功。 CMM提供了一个框架,将软件过程改进的进化步骤组织成5个成熟等级,为过程不断改进奠定了循序渐进的基础。这5个成熟度等级定义了一个有序的尺度,用来测量一个组织的软件过程成熟和评价其软件过程能力,这些等级还能帮助组织自己对其改进工作排出优先次序。成熟度等级是已得到确切定义的,也是在向成熟软件组织前进途中的平台。每一个成熟度等级为连续改进提供一个台基。每一等级包含一组过程目标,通过实施相应的一组关键过程域达到这一组过程目标,当目标满足时,能使软件过程的一个重要
44、成分稳定。每达到成熟框架的一个等级,就建立起软件过程的一个相应成分,导致组织能力一定程度的增大。,CMM软件过程成熟度模型概要,CMM软件过程成熟度模型概要,CMM软件过程成熟度模型概要,个体软件过程(Personal Software Process ,PSP)是由美国Carnegie Mellon大 学软件工程研究所(CMU/SEI)的Watts s. Humphrey领导开发的,于1995年推出,在 软件工程界引起了极大的轰动,可以说是由定向软件工程走向定量软件工程的一个 标志。PSP是一种可用于控制、管理和改进个人工作方式的自我改善过程,是一个 包括软件开发表格、指南和规程的结构化框架
45、。 PSP为基于个体和小型群组软件过 程的优化提供了具体而有效的途径,例如如何制订计划,如何控制质量,如何与其 他人相互协作等等。在软件设计阶段, PSP的着眼点在于软件缺陷的预防,其具体 办法是强化设计结束准则,而不是设计方法的选择。根据对参加培训的104位软件 人员的统计数据表明,在应用了PSP后,软件中总的差错减少了58.0,在测试阶 段发现的差错减少了71.0,生产效率提高了20.0。PSP的研究结果还表明,绝 大多数软件缺陷是由于对问题的错误理解或简单的失误所造成的,只有很少一部分 是由于技术问题而产生的。而且根据多年来的软件工程统计数据表明,如果在设计 阶段注入一个差错,则这个差错
46、在编码阶段引发了3一5个新的缺陷,要修复这些缺 陷所花的费用要比修复这个设计缺陷所花的费用多一个数量级。因此,PSP保障软 件产品质量的一个重要途径是提高设计质量。,个体软件过程PSP,个体软件过程PSP,个体软件过程PSP的内容 PSP与具体的技术(程序设计语言、工具或者设计方法)相对独立,其原则能够应用到几乎任何的软件工程任务之中。PSP能够: (1) 说明个体软件过程的原则; (2) 帮助软件工程师作出准确的计划; (3) 确定软件工程师为改善产品质量要采取的步骤; (4) 建立度量个体软件过程改善的基准; (5) 确定过程的改变对软件工程师能力的影响。 个体软件过程PSP的作用 使用自
47、底向上的方法来改进过程,向每个软件工程师表明过程改进的原则,使他们能够明白如何有效地生产出高质量的软件。 为基于个体和小型群组软件过程的优化提供了具体而有效的途径。其研究与实践填补了CMM的空白。 帮助软件工程师在个人的基础上运用过程的原则,借助于PSP提供的一些度量和分析工具,了解自己的技能水平,控制和管理自己的工作方式,使自己日常工作的评估、计划和预测更加准确、更加有效,进而改进个人的工作表现,提高个人的工作质量和产量,积极而有效地参与高级管理人员和过程人员推动的组织范围的软件工程过程改进。,个体软件过程PSP,致力于开发高质量的产品,建立、管理和授权项目小组,并且指导他们如何在满足计划费
48、用的前提下,在承诺的期限范围内,不断生产并交付高质量的产品。 TSP指导项目组中的成员如何有效地规划和管理所面临的项目开发任务,并且告诉管理人员如何指导软件开发队伍。始终以最佳状态来完成工作。TSP实施集体管理与自己管理自己相结合的原则,最终目的在于指导开发人员如何在最少的时间内,以预定的费用生产出高质量的软件产品,所采用的方法是对群组开发过程的定义、度量和改进。 实现TSP方法需要具备的条件 需要有高层主管和各级经理的支持,以取得必要的资源 整个软件开发小组至少应在CMM的第二级(可重复层)。 全体软件开发人员必须经过PSP的培训,并有按TSP工作的愿望和热情。 开发小组成员应在2到20个人
49、之间。,群组软件过程TSP,按TSP原理对开发小组的基本度量要素 所编文档的页数。 所编代码的行数。 花费在各开发阶段或各开发任务上的时间(以分为单位)。 在各个开发阶段中引入和改正的差错数目。 在各个阶段对最终产品增加的价值。 度量TSP实施质量的过程质量元素 软件设计时间应大于软件实现时间。 设计评审时间至少应占一半以上的设计时间。 代码评审时间至少应占一半以上的代码编制时间。 在编译阶段发现的差错不超过10个 在测试阶段发现的差错不超过5个。,群组软件过程TSP,CMM、PSP和TSP组成的软件过程框架,CMM是过程改善的第一步,它提供了评价组织的能力、识别优先改善需求和追踪改善进展的管
50、理方式。企业只有开始CMM改善后,才能接受需要规划的事实,认识到质量的重要性,才能注重对员工经常进行培训,合理分配项目人员,并且建立起有效的项目小组。然而,它实现的成功与否与组织内部有关人员的积极参加和创造性活动密不可分。,CMM、PSP和TSP组成的软件过程框架,PSP能够指导软件工程师如何保证自己的工作质量,估计和规划自身的工作,度量和追踪个人的表现,管理自身的软件过程和产品质量。经过PSP学习和实践的正规训练,软件工程师们能够在他们参与的项目工作之中充分运用PSP,从而有助于CMM目标的实现。 TSP结合了CMM的管理方法和PSP的工程技能,通过告诉软件工程师如何将个体过程结合进小组软件过程,并将后者与组织进而整个管理系统相联系;通过告诉管理层如何支持和授权项目小组,坚持高质量的工作,并且依据数据进行项目的管理,向组织展示如何应用CMM的原则和PSP的技能去生产高质量的产品。,