第一篇:软件工程考核知识点-第8章-软件维护
软件工程考核知识点-第8章-软件维护
第8章 软件维护
软件投入使用后就进入软件维护阶段。维护阶段是软件生存周期中时间最长的一个阶段,所花费的精力和费用也是最多的一个阶段。8.1软件维护的内容
软件维护内容有四种:校正性维护,适应性维护,完善性维护和预防性维护。
1.校正性维护
在软件交付使用后,由于在软件开发过程中产生的错误并没有完全彻底的在测试中发现,因此必然有一部分隐含的错误被带到维护阶段来。这些隐含的错误在某些特定的使用环境下会暴露出来。为了识别和纠正错误,修改软件性能上的缺陷,应进行确定和修改错误的过程,这个过程就称为校正性维护。校正性维护占整个维护工作的20%左右。
2.适应性维护
随着计算机的飞速发展,计算机硬件和软件环境也在不断发生变化,数据环境也在不断发生变化。为了使应用软件适应这种而修改软件的过程称为适应性维护。这种维护活动占整个维护活动的25%。
3.完善性维护
在软件漫长的运行时期中,用户往往会对软件提出新的功能要求与性能要求。这是因为用户的业务会发生变化,组织机构也会发生变化。为了适应这些变化,应用软件原来的功能和性能需要扩充和增强,为达到这个目的而进行的维护活动称为完善性维护,占整个维护活动的50%。
4.预防性维护
为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护。这是为以后进一步的运行和维护打好基础,占整个维护工作的4%。8.2 维护的特点
8.2.1非结构化维护和结构化维护
软件的开发过程对软件的维护过程有较大的影响。若不采用软件过程的方法开发软件,则软件只有程序而无文档,维护工作非常难,这就是一种非结构化的维护。若采用软件工程的方法开发软件,则各阶段都有相应的文档,这容易进行维护工作,这是一种结构化的维护。1.非结构化维护
因为只有源程序,而文档很少或没有文档,维护活动只能从阅读、理解、分析源程序开始。这是软件工程时代以前进行维护的情况。2.结构化维护
用软件工程思想开发的软件具有各阶段的文档,这对于理解和掌握软件功能、性能、系统结构、数据结构、系统接口和设计约束有很大作用。这种维护对减少精力、减少花费、提高软件维护效率有很大的作用。8.2.2维护的困难性
软件维护的困难性是由于软件需求分析和开发方法的缺陷。软件生存周期中的开发阶段没有严格而又科学的管理和规划,就会引起软件运行时的维护困难。表现在以下几个方面: 1.读懂别人的程序是困难的。2.文档的不一致性。
由于开发过程中文档管理不严所造成的,在开发过程中经常会出现修改程序却遗忘了修改与其相关的文档,使得文档前后不一致。3.软件开发和软件维护在人员和时间上的差异
由于维护阶段持续时间很长,正在运行的软件可能是十几、二十年前开发的,开发工具、方法、技术与当前的工具、方法、技术差异很大,这又是维护困难的另一因素。4.软件维护不是一项吸引人的事
由于维护工作的困难性,维护工作经常遭受挫折,而且很难出成果,不像软件开发工作那样吸引人。
8.2.3软件维护的费用
软件维护的费用在总费用中的比重是不断增加的。七十年代占35%~40%,八十年代上升到40%~60%,九十年代上升到70%~80%。软件维护费用不断上升,这只是软件维护有形的代价,无形的代价是要占用更多的资源,并在维护时对软件的改动,引入了潜在的故障,从而降低了软件的质量。用于软件维护工作的活动可分为生产性活动和非生产性活动两种。生产性活动包括分析评价、修改设计和编写程序代码等。非生产性活动包括理解程序代码功能、解释数据结构接口特点和设计约束。
维护活动总的工作两由下式表示:M=P+K×exp(C-D)
其中:M表示维护工作的总工作量;
P表示生产性活动工作量;
K表示经验常数;
C表示复杂性程度;
D表示维护人员对软件的熟悉程度;
上式表明,若C越大,D越小,那么维护工作量将成指数增加;C增加表示软件因未用软件工程方法开发,从而使得软件为非结构化设计,文档缺少,程序复杂性高。D表示维护人员不是原来的开发人员,对软件熟悉程度低,重新理解软件花费很多时间。8.3维护任务的实施 8.3.1维护的组织
为了有效地进行软件维护,应事先开始组织工作,建立维护机构。这种维护机构通常以维护小组形式出现。维护小组分为临时维护小组和长期维护小组。8.3.2维护的流程
软件维护的流程如下:
(1)制定维护申请报告。
(2)审查申请报告并批准。
(3)进行维护并做详细记录。
(4)复审。1.制定维护申请报告
所有软件维护申请报告应按照规定的方式提出。该报告也称为软件问题报告。它是维护阶段的一种文档,由申请维护的用户填写。维护申请报告是一种由用户产生的文档,在软件维护组织内部还要制定一份软件修改报告,该报告是维护阶段的另一种文档。
提出维护申请报告之后,由维护机构来评审维护请求。评审工作很重要,通过评审回答要不要维护,从而可以避免盲目的维护。2.维护过程
一个维护申请提出之后,经评审需要维护则按下列过程实施维护:
(1)首先确定要进行维护的类型。
(2)对校正性维护从评价错误的严重性开始。
(3)对适应性维护和完善性维护。
(4)实施维护任务。不管维护类型如何,大体上要开展相同的技术工作。这些工作包括修改软件设计、必要的代码修改、单元测试、集成测试、确认测试以及复审。每种维护类型的侧重点不一样。
(5)“救火”维护。在发生重大问题时,需要立即解决的问题。
3.维护的复审
在维护任务完成后,要对维护任务进行复审。8.3.3维护技术
有两类维护技术,它们是面向维护的技术和维护支援技术。
1.面向维护的技术
面向维护的技术涉及软件开发的所有阶段。
2.维护支援技术
维护支援技术包括下列方面的技术:
.信息收集;
.错误原因分析;
.维护方案评价;
.软件分析与理解;
.代码与文档修改;
.修改后的确认;
.远距离的维护; 8.3.4维护的副作用 维护的目的是为了延长软件的寿命并让创造更多的价值,经过一段时间的维护,软件中的错误减少了,功能增强了。但修改软件会造成软件的错误,这种因修改软件而造成的错误或其他不希望出现的情况称为维护的副作用。
维护的副作用有编码副作用、数据副作用、文档副作用三种。
1.编码副作用
在使用程序设计语言修改源代码时可能引入错误。
2.数据副作用
在修改数据结构时,有可能造成软件设计与数据结构不匹配,因而导致软件错误。
3.文档副作用
对数据流、软件结构、模块逻辑或任何其他有关特性进行修改时,必须对相关技术文档进行相应修改,否则会导致文档与程序功能不匹配、缺省条件改变、新错误信息不正确等错误,使文档不能反映软件当前的状态。
【大 中
8.4 软件可维护性
软件的维护是十分困难的,为了使软件能易于维护,必须考虑使软件具有可维护性。8.4.1可维护性定义
软件可维护性的定义:软件能够被理解、校正、适应及增强功能的容易程度。
软件的可维护性、可使用性、可靠性是衡量软件质量的几个主要特性,也是用户十分关心的几个问题。
软件的可维护性是软件开发阶段的关键目标。影响软件可维护性的因素较多,设计、编码及测试中的疏忽和低劣的软件配置,缺少文档等都对软件的可维护性产生不良影响。软件可维护性可用下面七个质量特性来衡量,即可理解性、可测试性、可修改性、可靠性、可移植性、可使用性和效率。对于不同类型的维护,这七种特性的侧重点也是不相同。8.4.2可维护性的度量
目前有若干对软件可维护性进行综合度量的方法,但要对可维护性作出定量度量还是困难的。还没有一种方法能够使用计算机对软件的可维护性进行综合性的定量评价。
下面是度量一个可维护的软件的七种特性时常采用的方法,即质量检查表、质量测试、质量标准。
质量检查表是用于测试程序中某些质量特性是否存在的一个问题清单。
质量测试与质量标准则用于定量分析和评价程序的质量。由于许多质量特性是相互抵触的,要考虑几种不同的度量标准去度量不同的质量特性。8.4.3提高可维护性的方法
从下面五个方面来阐述如何提高软件的可维护性:
1.建立明确的软件质量目标
如果要程序满足可维护性七个特性的全部要求,那么要付出很大的代价,甚至是不现实的,但有些可维护性是相互促进的,因此要明确软件所追求的质量目标。
2.使用先进的软件开发技术和工具 利用先进的软件开发技术能大大提高软件质量和减少软件费用。面向对象的软件开发方法就是一个非常实用而强有力的软件开发方法,用面向对象方法开发出来的软件系统,稳定性好,比较容易修改,比较容易理解,易于测试和调试,因此,可维护性好。
3.建立明确的质量保证
质量保证是指为提高软件质量所做的各种检查工作。质量保证检查是非常有效的方法,不仅在软件开发的各阶段中得到了广泛应用,而且在软件维护中也是一个非常主要的工具。为了保证可维护性,以下四类检查是非常有用的:
(1)在检查点进行检查。
(2)验收检查。
(3)周期性的维护检查。(4)对软件包的检查。
4.选择可维护的语言
程序设计语言的选择对维护影响很大。低级语言很难掌握,很难理解,因而很难维护。一般来说,高级语言比低级语言更容易理解,第四代语言更容易理解,容易编程,程序容易修改,改进了可维护性。
5.改进程序的文档
程序文档是对程序功能、程序各组成部分之间的关系、程序设计策略、程序实现过程的历史数据等的说明和补充。程序文档对提高程序的可阅读性有重要作用。为了维护程序,人们必须阅读和理解程序文档。
一、名词解释
1.校正性维护
2.适应性维护 3.完善性维护
4.预防性维护
5.软件可维护性 6.软件维护的副作用
二、填空题
1.维护阶段是软件生存周期中时间最长的阶段,也是花费精力和费用________的阶段。2.在软件交付使用后,由于在软件开发过程中产生的错误没有完全彻底在开发阶段发现,必然有一部分隐含错误带到_________阶段。
3.采用手工方法开发软件只有程序而无文档,维护困难,这是一种___________维护。4.软件维护费用增加的主要原因是维护的_________非常低。5.软件维护工作的活动分为生产性活动和__________活动。
6.所有软件维护申请报告要按规定方式提出,该报告也称_________报告。
7.有两类维护技术:在开发阶段使用来减少错误,提高软件可维护性的面向维护技术;在维护阶段用来提高维护的效率和质量的_______技术。
三、选择题
1.在生存周期中,时间长、费用高、困难大的阶段是()。A.需求分析 B.编码 C.测试 D.维护 2.为适应软硬件环境变化而修改软件的过程是()。
A.校正性维护 B.适应性维护 C.完善性维护 D.预防性维护 3.软件维护困难的主要原因是()。
A.费用低 B.人员少 C.开发方法的缺陷 D.维护难 4.软件维护费用高的主要原因是()。
A.生产率高 B.生产率低 C.人员多 D.人员少 5.维护阶段的文档是()。
A.软件需求说明 B.操作手册 C.软件问题报告 D.测试分析报告 6.产生软件维护的副作用,是指()。
A.开发时的错误 B.隐含的错误 C.因修改软件而造成的错误 D.运行时误操作 7.维护中,因误删除一个标识符而引起的错误是()副作用。A.文档 B.数据 C.编码 D.设计 8.可维护性的特性中相互促进的是()。
A.可理解性和可测试性 B.效率和可移植性 C.效率和可修改性 D.效率和结构好 9.可维护性的特性中,相互矛盾的是()。
A.可修改性和可理解性
B.可测试性和可理解性 C.效率和可修改性 D.可理解性和可读性
四、简答题
1.软件维护有哪些类型? 2.软件维护的特点是什么? 3.软件维护的流程是什么? 4.软维护的副作用有哪些?
5.可维护性度量的质量特性有哪些? 6.提高可维护性有哪些方法? 参考答案
二、填空题
1.最多 2.维护 3.非结构化 4.生产率 5.非生产性 6.软件问题 7.维护支援
三、选择题
1.D 2.B 3.C 4.B 5.C 6.C 7.C 8.A 9.C
第二篇:软件工程知识点
第一章
软件工程概述
一、软件的定义和特性
(P2—P3)定义:软件=程序+数据+文档
程序:按照事先设计的功能和性能要求执行的指令或语句序列
数据:程序能正常操纵信息的数据结构
文档:描述程序操作和使用的文档 特性:
(1)软件是一种逻辑实体,具有抽象性,不是一般的物理实体;
(2)软件的成产与硬件存在某些相同点,但有根本上的不同,软件开发是人的智力的高度发挥,而不是传统意义上的制造,它更依赖于开发人员的素质,智力,人员和组合,合作和管理;
(3)软件维护与硬件维修有着本质的差别,软件维护没有硬件维护那样有可替换的标准零件;(4)软件在运行和使用期间没有硬件那样的机械磨损,老化问题,但存在退化问题;
(5)基于构件的开发方法由于其自身的特点越来越受到人们的重视,这些技术可以减少开发时间、提高质量,并提高复用水平。
* 掌握P4图1-2(b)软件失效率曲线
二、计算机软件的发展经历了几个阶段?各有何特征?(P1—P2)
共经历了四个阶段
特征:第一阶段——程序规模小且主要采用个体工作方式,开发的系统大多采用批处理技术
第二阶段——引入人机交互的概念,实时系统出现,产生了第一代数据库管理系统,程序编制采用了合作的工作方式,出现了早期的软件危机
第三阶段——分布式系统出现,嵌入式系统得到广泛应用,低成本硬件
第四阶段——强大的桌面系统和计算机网络迅速发展时期,面向对象技术得到广泛应用,人工智能技术和专家系统开始应用于软件。
三、什么是软件危机?其产生的原因是什么?
定义:软件危机是指由于落后的软件生产方式无法满足迅速增长的计算机软件应用需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。(P4)原因:(P5)
(1)用户对软件需求的描述不准确、不全面,甚至有错误,以及在开发过程中,不断提出或者修改需求;(2)用户和开发人员对软件需求的理解存在差异,导致所开发的软件产品和用户需求不一致;
(3)大型软件项目需要组织一定的人力共同完成,各类人员的信息交流不及时、不准确,有时还可能产生误解,软件开发人员对大型软件缺少开发经验,管理人员缺少相应的管理经验;
(4)软件开发人员不能有、独立自主的处理大型软件的全部关系和各个分支,因此容易产生疏漏和错误;
(5)开发技术落后,缺乏有效的方法学和工具方面的支持,过分依赖程序设计人员在软件开发过程中的技巧和创造性,加剧软件产品的个性化
(6)软件产品的特殊性和人类智力的局限性,导致人们无法处理“复杂问题”,因为软件是逻辑产品,软件开发进展情况较难衡量、软件开发质量难以评价、管理和控制软件开发过程相当困难。
四、什么是软件工程?它的目标和内容是什么?
定义:将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中,并对方法的研究。(P6)
目标:在给定的成本和进度前提下,开发出具有可修改性、可理解性、可维护性、有效性、可靠性、可适用性、可重用性、可移植性、可跟踪性和互操作性并且满足用户需求的软件产品。(P7)
内容:主要内容包括软件开发技术和软件工程管理两方面。(P6)
要素:方法,工具,过程
五、什么是软件生存周期?它有哪几个活动?
定义:(software life cycle)把软件产品从形成概念开始,经过定义、开发、使用和维护直到最后退役的全过程。
活动:软件定义、软件开发、软件使用维护和退役(P9)
六、什么是软件生存周期模型?它有哪些主要模型?
定义:又称为软件开发模型,软件过程模型,它清晰直观地反映了软件开发的全部过程、所涉及的活动和任务结构框架,并指出了开发了开发各阶段的关系、开发活动的衔接情况。
主要模型:瀑布模型(waterfall model),原型(prototype)模型,螺旋(the spiral)模型,增量(incremental)模型,喷泉(fountain)模型,迭代(iterative)模型
七、简述有哪些主要的软件开发方法?(P22)
结构化方法:也称为生命周期方法或传统方法,由结构化分析(structured analysis)、结构化设计(SD)、结构化编程(SP)三部分有机组合而成。其基本思想是自顶向下,逐步求精,基本原则是抽象和分解。
面向对象方法(Object—Oriented Method):把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO。包括面相对象分析(OOA)、面向对象设计(OOD)、面向对象的程序设计(OOP)等过程。
八、软件生命期各阶段的任务是什么?(P10)
软件定义:问题定义,系统的可行性研究,需求分析
软件开发:概要设计,详细设计,编码实践,软件测试
软件使用维护和退役:软件发布与实施,软件维护,版本更新或退役
九、简述瀑布模型(P12)、原型模型特点。
瀑布模型:软件开发的各项活动严格按照线性方式进行,各阶段之间具有顺序性和依赖性,且为了保证软件的开发质量进行阶段性评审。缺点是逆转性差,若在评审中发现缺陷或错误往回追溯修正时要付出一定的代价。适合在软件需求明确且很少发生变化、开发技术比较成熟、工程管理比较严格地场合使用。
原型模型:有助于用户和软件分析员双方相互学习对方领域知识,使得用户和开发人员统一对软件需求的认识,理解,有助于需求的定义评审,从而有助于提高开发速度。缺点是用户对原型没有正确认识,会催促开发人员尽早交付软件,同时也在一定程度上限制了软件开发人员的创新。(P14)
第二章
软件需求基础
一、试述软件需求、需求分析、需求建模概念的含义及区别。
软件需求:指用户对目标软件系统在功能、性能、行为、涉及约束等方面的期望,这种期望可能是原始的、笼统的,也可能是抽象的太细节化的。(P26)
需求分析:通过对应用问题及其环境的分析与理解,采用一系列的分析方法和技术,将用户的需求逐步精确化、完全化、一致化,最终形成需求规格说明文档的过程。(P26)
需求建模:需求建模是为了更好的理解用户所描述的需求所作出的一种抽象,是用符号语言对事务无歧义的书面描述。模型主要包括数据模型,功能模型和行为模型。(P38)
二、可行性研究的任务是什么?(P31)
用最小的代价在尽可能短的时间内确定该软件项目是否能够开发,是否值得去开发。
三、成本—效益分析可用哪些指标进行度量?(P32)
成本效益分析是衡量经济可行性的。
指标:(1)货币的时间价值。(2)投资回收期(3)纯收入
四、需求分析阶段的基本任务是什么?(P27)
任务:深入描述软件的功能和性能,确定软件设计的限制和软件同其他系统元素的接口细节,定义软件的其他有效性需求。
五、简述需求分析阶段的过程。(P36)
1.问题识别
2.分析与综合3.编制需求分析阶段的文档
4.需求验证
六、常用的初步软件需求获取的方法有哪些?为什么要用这些方法来进行需求获取?(P33)
方法: 1.访谈与会议
2.观察用户工作流程
3.建立联合小组
4.其他获取方法:快速原型法,基于本体的需求获取方法
原因:分析人员和用户的共同知识领域可能不多,致使分析人员对问题往往知之不多,而用户对目标软件的要求及对要求的描述常常是零乱而模糊地,从而会造成相互交流和互相理解上的困难。
七、在软件需求分析时,应首先建立当前系统的物理模型,在根据物理模型尽力当前系统的逻辑模型。试问:什么是当前系统?当前系统的物理模型与逻辑模型有什么差别?(P28)
当前系统:可能是需要改进的某个已在计算机运行的数据处理系统,也可能是一个人工的数据处理过程。
物理模型是确定待开发软件系统的系统元素,并将功能和数据结构分配到这些系统元素中,它是软件实现的基础。逻辑模型忽视实现机制与细节,只描述系统要完成的功能和要处理的数据。
逻辑模型是在物理模型的基础上去掉一些非本质因素形成的,它反应的是系统的本质。
第三章
软件设计基础
一、什么是软件概要设计?该阶段的基本任务是什么?
定义:设计人员依据软件需求规格说明文档,确定软件的体系结构,建立软件模块间的关系,定义个功能模块的接口,设计全局数据库或数据结构,规定设计约束,指定组装测试计划。
任务:将软件需求转化为软件的系统结构和数据结构(P49)
*力争做到功能模块之间有比较低的耦合度而功能模块内部有较高的内聚度。
二、详细设计的基本任务是什么?有哪几种描述方法?
任务:通过对软件结构细化,得到软件的详细的算法和数据结构。(P49)
描述方法:(过程设计)程序流程图
盒图(N-S图)
问题分析图(PAD图)
判定表和判定树
过程设计语言(PDL)(P77)
三、软件设计的基本原理包括哪些内容?(P51)
抽象与逐步求精、模块化、信息隐蔽、模块独立
四、衡量模块独立性的两个标准时什么?各表示什么含义?
标准:内聚和耦合
含义:内聚(cohesion)——衡量一个模块内部各个元素彼此结合的紧密程度
耦合(coupling)——衡量不同模块之间的相对独立性(互相连接的紧密程度)
五、模块的耦合性有哪几种?各表示什么含义?
种类:非直接耦合——两个模块之间没有直接关系,他们中任何一个都不依赖于另一个而能独立工作
数据耦合——一模块访问另一模块,相互传递的信息已参数形式给出,并且传递的参数完全是简单数据元素,而不是控制元素、公共数据结构和外部变量。
标记耦合——两模块之间都要使用同一数据结构的一部分,不是采用全程公共数据区共享,而是通过模块接口界面传递数据结构的一部分。
控制耦合——一模块传递给另一模块的参数中包含了控制信息(开关,标记,名字等),该控制信息勇于控制接收模块中的执行逻辑。
外部耦合——一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量信息。
公共耦合——一组模块都访问同一个公共数据环境
内容耦合——一模块直接访问另一模块的内部数据;一个模块不通过正常入口转到另一模块内部;两个模块有一部分程序代码重迭(只出现在汇编程序中);一个模块有多个入口。
*从上到下耦合性从低到高,独立性从高到底
六、模块的内聚有哪几种?各表示什么含义?
种类:巧合内聚(偶然内聚)——将几个模块中没有明确表现出独立功能的相同程序代码段独立出来建立的模块
逻辑内聚——完成一组在逻辑上相关的任务的模块间具有逻辑内聚
时间内聚(经典内聚)——完成几个必须在同一时间内进行的任务的模块间具有时间内聚
过程内聚——一个模块完成多个任务,这些任务必须按指定的过程执行。把流程图中的某一部分划出组成模块就得到过程内聚模块
通信内聚——一个模块内所有成分都使用同一输入数据或产生同一输出数据,即一个模块内所有处理元素都集中在某个数据结构的一块区域中的模块具有通信内聚
信息内聚——一个模块内完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点
七、结构化程序设计的基本要点是什么?
结构化程序设计是尽可能少用GOTO语句的程序设计方法。最好仅在检测出错误时才使用GOTO语句,而且应该总是使用前句GOTO语句。
第四章 结构化分析与设计
一、什么是结构化分析方法?该方法使用什么描述工具?(P85—P86)
定义:结构化分析方法是一种利用自顶向下逐层分解、由粗到细、由复杂到简单技术的求解方法。
工具:数据流图(DFD 实体—关系图(E-R)数据字典(DD)描述基本加工小说明(Process SPECification)
二、什么是数据流图?其作用是什么?其中的基本符号各表示什么含义?(P87)
定义:数据流图是描述数据加工处理过程的有效工具。它标识了一个系统的逻辑输入和逻辑输出,以及把逻辑输入转换逻辑输出所需的加工处理。
作用:主要描述系统的功能,即当前系统主要完成哪些功能。
基本符号:箭头——数据流
圆或椭圆——加工(变换)
双杠或单杠——数据
矩形框——外部实体
三、什么是数据字典?其作用是什么?共有哪些条目?(P94)
定义:数据字典是对所有与系统相关的数据元素的一个有组织的列表,以及精确地、严格地定义了每一个与系统相关的数据元素,并以字典式顺序将它们组织起来,使得用户和分析员对所有的输入、输出、存储成分和中间计算有共同的理解。
作用:对系统所有的数据进行描述和解释并进行管理。条目:数据项条目、数据流条目、数据库文件条目(P96)
四、简述如何画分层数据流图,对分层数据流图的审查由哪些审查要点?(P88 P92)
画法:首先,把整个系统看成一个加工作为顶层数据流图(0层);然后,逐层对大的加工进行分解,分解为更小的自加工;最后,直到所有的加工都成为基本加工(不需要再分解,足够简单可以直接解决的加工)为止。
审查:
1、数据流图和程序流程图的混淆
2、父图和子图的平衡问题
3、局部文件问题
4、分解的深度与层次
五、什么样是“事物流”?什么事“变换流”?试将相应形式的数据流图转换为软件结构图。(P104)
事物流——数据沿传入路径到系统,由外部形式变换为内部形式后到达事务中心(完成分派任务),事务中心根据数据项计值结果从若干动作路径中选定一条继续执行。(事务中心)
变换流——信息以“外部世界”所具有的形式进入系统,经处理后又以这种形式离开系统。包括传入路径,变换中心,传出路径三部分。(变换中心)步骤:(1)对结构化分析阶段产生的DFD图进行复审;
(2)确定数据流图的类型
(3)按照SD方法所规定的一组映射规则,把DFD图转换为初始SC图
六、试述“变换分析”、“事务分析”设计步骤。(P106—P108)
变换分析:第一步——划分DFD图的边界,也就是将DFD图划分为三个基本的组成部分,不同的设计人员可能产生不同的划分结果;
第二步——完成第一级分解,建立初始SC图的框架;
第三步——完成第二级分解,细化SC图的每个分支,得到初始SC图。
事务分析:首先确定事务中心,即几条动作路径的公共源头;其次划定接收路径和发送路径;然后分解和细化每个接收分支和发送分支,完成初始的SC图。
七、简述有哪些启发式设计策略可以帮助软件设计人员改善软件质量,优化软件结构。(P108—P110)
(1)模块的高独立性和规模适中
(2)保持高扇入和低扇出
(3)模块的作用域应在控制域之内
(4)降低模块接口的复杂度
第五章
面向对象的分析与设计
一、说明对象、类、类结构、消息的基本概念(P113)
对象:是封装了数据结构及可以施加在这些数据结构上的操作的封装体。
类:对具有相同属性和操作的一组对象的抽象性描述,它描述了属于该对象类型的所有对象的性质,包括外部特性和内部实现两个方面。类结构:(实例)
消息:是用来请求对象执行某一处理或回答某一要求的信息。
二、试述面向对象方法学的优点。(P112)
1、开发的软件比较容易理解
2、稳定性好
3、可重用性好
4、较易开发大型软件产品
5、可维护性好
三、什么是UML?为什么使用UML?(P118)
定义:UML(Unified Modeling Language)是一个通用的、可视化标准建模语言。
使用原因:统一的标准
面向对象
可视化、表示能力强
独立于过程
易掌握、易用
四、在UML中用例图的作用是什么?其包括哪些符号?简述各符号的含义。(P122)
作用:捕获系统中用户的需求
符号:人形(stickman)——活动者
椭圆——用例
实线——关系
五、简述用例建模的步骤。
步骤:识别参与者——识别用例——识别关系——建模——用例规约
六、什么是用例规约?其包括哪些基本内容?什么是基本流和备选流?
定义:用例的补充说明,包括简要说明,事件流,用例场景,特殊需求,前置条件,后置条件 基本流: 备选流:
七、在UML中的状态图,活动图,时序图在系统分析中各起到了什么作用?
状态图——描述对象在生命周期内处于哪些状态,每一种状态的行为以及什么样的事件引起对象状态发生改变,展示了系统的动态视图。P144 活动图——描述动作及对象状态改变的结果,描述采取何种动作似的对象的状态改变,动作的序列是什么及在何处发生。P148 时序图——详细表示对象之间以及对象与系统外部的参与者之间动态联系的图形文档,它详细而直观地表现了一组相互协作的对象在执行一个(或少量几个)用例时的行为依赖关系,以及操作和消息的时序关系。P139
八、简述类图中关联和依赖关系的区别。
关联表示两个类的对象之间存在某种语义上的联系。(组合/聚合关联)如:学生选课,学生与课程间
依赖是类与类之间最弱的关系,它是两个模型元素(类、用例等)之间的语义连接关系,其中一个模型元素是独立,另一模型元素依赖于独立的模型元素,如果独立的模型元素改变了,将影响依赖于它的模型元素。如教师与粉笔。
九、类图中类与类之间的关系有哪几种?
类与类之间的静态关系:关联,泛化,依赖,细化
第六章
人机界面设计
一、简述人机界面的设计过程。(P168)
1、确定任务的目标和含义;
2、将每个目标或含义映射为一系列特定的动作;
3、说明这些动作将来在界面上执行的顺序;
4、指明系统状态,及上述各动作序列中每个动作在界面上执行时界面呈现的形式;
5、定义控制机制,即用户可用的改变系统状态的设备和动作;
6、说明控制机制怎样作用于系统状态;
7、指明用户如何根据界面上反映出的信息,解释系统的状态。
二、简述人机界面设计过程中应考虑哪些一般问题?(P168)
系统响应时间
用户帮助设施
出错信息处理
命令交互
三、如何理解界面设计中“人的因素”(P162)
人对感知过程的认识
用户的技能和用户间的差异
第八章
软件测试
一、什么是白盒测试法?有哪些覆盖标准?P205
定义:(结构测试或逻辑驱动测试)测试时,把程序看做一个打开的盒子,它是知道产品内部工作过程,而不顾他的功能。
覆盖标准:语句覆盖
判定覆盖
条件覆盖
判定/条件覆盖
条件组合覆盖
路径覆盖
二、什么是黑盒测试法?采用黑盒技术测试用例有哪几种方法?(P199)
定义:(功能测试或数据驱动测试)它是在已知产品所应具有功能的基础上,通过测试来检测每个功能是否都能正常使用。
方法:等价类划分
边界值分析
错误推测
因果图
比较测试
三、软件测试要经过哪些步骤?这些测试与软件开发各阶段之间有什么关系?
步骤:单元测试——集成测试——确认测试——系统测试
关系:单元测试(模块测试)——是最小单位的测试,其依据是详细设计说明书。测试者(程序员)根据详细设计说明书和源程序清单了解模块的I/O条件和模块的逻辑结构。
集成测试(组装测试、联合测试、子系统测试、部件测试)——是在单元测试的基础上,将所有模块按照概要设计要求组装成为子系统或系统进行测试。
确认测试(有效性测试)——检查软件能否按合同要求进行工作,即是否满足软件需求说明书中的确认标准(用户参与)。
系统测试——针对整个产品系统进行的测试,验证系统是否满足了需求规格的定义,找出与需求规格不相复合或与之矛盾的地方。
四、单元测试有哪些内容?
模块接口
局部数据结构测试
路径测试
错误处理测试
边界测试
五、什么是集成测试?非渐增式测试与渐增式测试有什么区别?渐增式测试如何组装模块?
定义:集成测试(组装测试、联合测试、子系统测试、部件测试)是在单元测试的基础上,将所有模块按照概要设计要求组装成为子系统或系统进行测试。
区别:P216自己看
组装:
六、什么是回归测试?(P218)
发生修改之后重新测试先前的测试以保证修改的正确性。目的在于检验以前出现过的但已修复好的缺陷不再出现。
七、什么是测试用例?(P194)
测试用例由测试输入数据和预期输出结果组成。
八、软件测试和软件调试有何区别?
第九章
软件维护
一、软件维护有哪些内容?(P229)
改正性维护
适应性维护
完善性维护
预防性维护
二、何为非结构化维护和结构化维护?(P231)
结构化维护——采用软件工程的方法进行软件的开发,则每一个阶段都有相应的文档,且文档与程序代码互相匹配,因此维护容易进行。
非结构化维护——没有采用软件工程的方法进行软件的开发,开发出的软件只有程序没有文档,或者仅有一些片段的说明性文档。给维护工作带来很大的困难,耗时耗力且代价高。
三、软件维护的流程是什么?(P233)
提交维护申请报告——生成软件修改报告——软件修改——主要流程
四、软件维护的副作用有哪些?(P240)
修改编码的副作用 修改数据结构的副作用 修改文档的副作用
第三篇:软件工程知识点
1.什么是软件危机,它有哪些典型表现?答:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。
软件危机典型表现:对软件开发成本和进度的估计常常很不准确。用户对“已完成的”软件系统不满意的现象经常发生。软件产品的质量往往靠不住。软件常常是不可维护的。软件通常没有适当的文档资料。软件成本在计算机系统总成本中所占的比例逐年上升。软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势.产生软件危机的原因:一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件。管理和控制软件开发过程相当困难。软件是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。目前相当多的软件专业人员对软件开发和维护还有不省糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这是使软件问题发展成软件危机的主要原因.2.简述产生软件危机的原因和解决的思路:答:软件危机产生的原因一方面与软件本身的特点有关,另一方面,是与已有软件开发、维护的方法不正确有密切关系.解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。即采用工程化的原则和方法组织软件开发是摆脱软件危机的一个主要出路.3.什么是软件工程?它有哪些本质特性?答:软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它.软件工程本质特性:
1、软件工程关注于大型程序的构造;
2、软件工程的中心课题是控制复杂性;
3、软件经常变化;
4、开发软件的效率非常重要;
5、和谐地合作是开发软件的关键;
6、软件必须有效地支持它的用户;
7、在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品.4.软件工程是如何用来消除软件危机的?软件工程是从技术和管理两个方面来研究如何更好地开发和维护计算机软件,从源头上消除软件危机.5.软件工程的目的是什么?为高质量的软件开发提供一个科学的体系框架.6.什么是软件工程方法学?软件工程是一种什么样的技术?包括哪三大要素?分为哪三个分支?软件工程方法学就是指在软件生命周期全过程中使用的一整套管理和开发技术方法的集合。目前,使用最广泛的软件工程方法学分别是传统方法学和面向对象方法学.软件工程作为一种层次化的技术,有方法、工具和过程三大要素,并由于其涉及学科内容的极为广泛,而分为三个分支:软件开发技术、软件项目管理技术、软件质量管理技术.7.什么是软件生命周期?什么是软件生命周期模型?软件如同自然界任何事物一样,都有其孕育、诞生、成长、成熟、衰亡的生存过程。软件的这一过程,称为软件生命周期.软件生命周期模型也称软件开发过程模型,是为了解决产业环境中的实际问题,而提出的开发策略。是反映整个软件生命期中,系统开发、运行、维护等实施活动的一种结构框架.8.试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明它们各自的适用范围.1.瀑布模型:瀑布模型广为人知和历史悠久,其优势是规范及文档驱动的方法。但问题是,往往不能够真正满足用户的需求..适用于传统软件工程领域的结构化开发..2.原型模型:是为了克服瀑布模型的缺点而提出来的。通过快速构建一个在机器上可运行的原型系统,让用户试用原型,并收集反馈意见的办法,来获取用户真实的需求..3.螺旋模型:螺旋模型适用于大型软件项目,比起之前的其它模型而言,有其一定的优越性,但这些优越性并不是绝对的。主要体现在对开发人员的风险评估经验和专门知识的要求较高。如果项目风险较大,而开发人员的水平较低,不能准确的识别和分析风险,则势必造成重大损失..4.增量模型:具有在软件开发早期阶段使投资获得明显回报和交易维护的优点,但是要求软件具有开放的结构.9.软件过程(Software Procedure)是指软件生存周期所涉及的一系列相关过程.10.软件测试用例就是指导你对软件执行操作,帮助你证明软件功能或发现软件缺陷的一种说明.11.单元测试——是最小粒度的测试,以测试某个功能或代码块.单元测试的对象是软件设计的最小单位——模块。单元测试的依据是详细设描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试.12.人机界面设计的三条“黄金规则”:1.置用户于控制之下.2.减少用户记忆负担.3.保持界面一致.13.jackson图:jackson结构化程序设计使用的图。什么是HIPO图:它是表示软件系统结构的工具。HIPO图以模块分解的层次性以及模块内部输入、处理、输出三大基本部分为基础建立的.它既可以描述软件总的模块层次结构--H图(层次图),又可以描述每个模块输入/输出数据、处理功能及模块调用的详细情况--IPO图.14.试说明Jackson方法是一种怎么样的程序设计方法。它有哪些工作步骤:Jackson方法是以数据结构(data structure)为基础设计每个模块的处理过程,将数据结构转化成程序结构。具体工作步骤有:第1步:用Jackson图描述 IO 的数据结构;第2步:在两个图中指出有直接因果关系、可以同时处理的单元;第3步:将数据结构映射到程序结构;第4步:列出所有操作条件,并分配到上幅程序结构图中;第5步:用Pseudocode 表示程序.15.简述结构化设计的特点:1.自顶向下、逐步求精.2.具有单入、单出的控制结构.
第四篇:软件工程考核知识点-第2章-软件可行性研究与项目开发计划
软件工程考核知识点-第2章-软件可行性研究与项目开发计
划
2.1可行性研究
目的就是用最小的代价在尽可能短的时间内确定该软件项目是否能够开发,是否值得去开发。2.1.1可行性研究的任务
1.技术可行性
对要开发的项目的功能、性能、限制条件进行分析,确定在现有的资源条件下,技术风险有多大,项目是否能实现。
2.经济可行性 3.社会可行性
要开发的项目是否存在任何侵犯、妨碍等责任问题,要开发项目的运行方式在用户组织内是否行得通,现有管理制度、人员素质、操作方式是否可行。2.1.2 可行性研究的具体步骤
典型性的可行性研究有下列步骤:
1.确定项目规模和目标
2.研究正在运行的系统
3.建立新系统的高层逻辑模型
根据对现有系统的分析研究,逐步明确了新系统的功能、处理流程以及所受的约束,然后使用建立逻辑模型的工具——数据流图和数据字典来描述数据在系统中的流动和处理情况。现在还不是软件需求分析阶段,不是完整、详细地描述,只是概括地描述高层的数据处理和流动。
4.导出和评价各种方案
5.推荐可行的方案
6.编写可行性研究报告
2.2 系统流程图
1.系统流程图的作用
系统流程图是描绘物理系统的传统工具,它用图形符号来表示系统中的各个元素,例如人工处理、数据处理、数据库、文件、设备等。它表达了系统中各个元素之间的信息流动的情况。
2.系统流程图的符号
系统流程图的符号如表2-1所示。
2.3成本——效益分析
成本——效益分析的目的是从经济角度评价开发一个新的软件项目是否可行。1.货币的时间价值
项目开发后,应取得相应得效益,有多少效益才合算?这就要考虑货币的时间价值。通常用利率表示货币的时间价值。
设年利率为i,现存入P元,n年后可得钱数为F,若不计复利则
F=P×(1+n×i)F就是P元在n年后得价值。反之,若n年能收入F元,那么这些钱现在得价值是: P =F/(1+n×i)第2章例题分析与解答
一、填空题
1.可行性研究实质上是进行一次简化、压缩了的________。2.可行性研究的三个方面是技术可行性、社会可行性和_________。
3.可行性研究的第一个具体步骤是__________。
4.若年利率为i,不计复利,P元在n年后的价值F是_________。5.可行性研究中描述系统高层物理模型的工具是_______。
二、选择题 1.可行性研究的目的是决定()。
A.开发项目 B.项目值得开发否 C.规划项目 D.维护项目 2.技术可行性要研究的问题之一是()。
A.存在侵权否 B.成本效益问题 C.运行方式可行否 D.技术风险问题
3.纯收入是累计效益现在值与投资之()。A.和 B.差 C.积 D.商 4.项目开发计划这类文档是一种()。
A.技术性文档 B.管理性文档 C.需求分析文档 D.设计文档
答案
一、填空题
1.[答案]需求分析和设计 2.[答案]经济可行性
3.[答案]确定项目的规模和目标 4.[答案]p×(1+n×i)5.[答案]系统流程图
二、选择题 1.B 2.D 3.B 4.B
第五篇:软件工程知识点总结
7.1软件的定义及特点
软件(Software)是计算机系统中与硬件相互依存的另一部分,它是包括程序(Program),数据(Data)及其相关文档(Document)的完整集合。
三个特点:
(1)软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性;(2)软件的生产与硬件不同,在它的开发过程中没有明显的制造过程;(3)在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。
7.2软件危机及其表现
软件危机(softward crisis)是指在计算机软件的开发和维护中所遇到的一系列严重问题。这些问题绝不仅仅是“不能正常运行的”软件才具有,实际上几乎所有软件都不同程度地存在这些问题。
具体地说,软件危机主要有下述一些表现。
(1)对软件开发成本和进度的估计常常很不准确。
(2)用户对“已完成的”软件系统不满意的现象经常发生。
(3)软件产品的质量往往靠不住。
(4)软件常常是不可维护的。
(5)软件通常没有适当的文档资料。
(6)软件成本在计算机系统总成本中所占的比例逐年上升。
7.3软件工程及三要素
软件工程:软件工程是采用工程的概念、原理、技术和方法来指导软件开发和维护的工程学科,以工程化的原理和方法来解决软件问题。
软件工程的特性:
(1)软件工程关注于大型程序的构造(2)软件工程的中心课题是控制复杂性(3)软件经常变化
(4)开发软件的效率非常重要(5)和谐地合作是开发软件的关键(6)软件必须有效地支持它的用户
(7)在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人
软件工程方法学包含3个要素:方法、工具和过程。
7.4软件生命周期
软件生命周期又称为软件生存周期或系统开发生命周期,是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和 测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审 查、形成文档以供交流或备查,以提高软件的质量。
每个阶段的任务如下
问题定义阶段:该阶段的关键任务是要明确:要解决的问题是什么? 可性行研究阶段:该阶段的关键任务是要明确:做不做? 需求分析阶段:该阶段的关键任务是要明确:做什么?
概要设计(总体设计)阶段:该阶段的关键任务是要明确:怎么做? 详细设计阶段:该阶段的关键任务是要明确:具体做法。
编码和单元测试阶段:该阶段的关键任务是:编码和单元测试。
综合测试阶段:该阶段的关键任务是通过各种类型的测试(及调试)使软件达到预定的要求。软件维护阶段:该阶段的关键任务是通过各种必要的维护活动使系统持久地满足用户的要求。
7.4.1瀑布模型
瀑布模型有以下优点
1)为项目提供了按阶段划分的检查点。
2)当前一阶段完成后,您只需要去关注后续阶段。3)可在迭代模型中应用瀑布模型。
4)它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。
瀑布模型适合于用户需求明确、完整、无重大变化的软件项目开发。瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型。
瀑布模型有以下缺点
1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
2)由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
3)通过过多的强制完成日期和里程碑来跟踪各个项目阶段。4)瀑布模型的突出缺点是不适应用户需求的变化。
“瀑布模型是由文档驱动的”这个事实也是它的一个主要缺点。实际项目很少按照该模型给出的顺序进行,用户常常难以清楚地给出所有需求,用户必须有耐心,等到系统开发完成。
7.4.2 原型模型—快速原型模型
在用户不能给出完整、准确的需求说明,或者开发者不能确定算法的有效性、操作系统的适应性或人机交互的形式等许多情况下,可以根据用户的一组基本需求,快速建造一个原型(可运行的软件),然后进行评估,进一步精化、调整原型,使其满足用户的要求,也使开发者对将要做的事情有更好的理解。优点:
(1)开发人员和用户在“原型”上达成一致。这样一来,可以减少设计中的错误和开发中的风险,也减少了对用户培训的时间,而提高了系统的实用、正确性以及用户的满意程度。(2)缩短了开发周期,加快了工程进度。(3)降低成本。
尽早发现需求,揭示风险 缺点:
⑴为了使原型尽快的工作,没有考虑软件的总体质量和长期的可维护性。
⑵为了演示,可能采用不合适的操作系统、编程语言、效率低的算法,这些不理想的选择成了系统的组成部分。
⑶开发过程不便于管理。
7.4.3螺旋模型
螺旋模型的优点:(1)对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标
(2)减少了过多测试或测试不足(3)维护和开发之间并没有本质区别 螺旋模型的缺点:
(1)风险驱动,需要相当丰富的风险评估经验和专门知识,否则风险更大
(2)主要适用于内部开发的大规模软件项目,随着过程的进展演化,开发者和用户能够更好的识别和对待每一个演化级别上的风险
(3)随着迭代次数的增加,工作量加大,软件开发成本增加
7.4.4增量模型
增量模型优点:
(1)在较短时间内向用户提交可完成部分工作的产品,并分批、逐步地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。
(2)整个软件产品被分解成许多个增量构件,开发人员可以一个构件一个构件地逐步开发。(3)逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。(4)采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报。增量模型的缺点:
(1)在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。
(2)开发人员既要把软件系统看作整体。又要看成可独立的构件,相互矛盾。(3)多个构件并行开发,具有无法集成的风险。
7.4.5喷泉模型
主要用于支持面向对象开发过程体现了软件创建所固有的迭代和无间隙的特征。喷泉模型的优点
喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。
喷泉模型的缺点
由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。
其特点如下:
(1)开发过程有分析、系统设计、软件设计和实现4个阶段。(2)各阶段相互重叠,它反映了软件过程并行性的特点。(3)以分析为基础,资源消耗成塔型。
(4)反映了软件过程迭代性的自然特性,从高层返回低层无资源消耗。(5)强调增量开发,整个过程是一个迭代的逐步提炼的过程。
7.4.6构件组装模型
构件组装模型导致软件复用,而可复用性给软件工程师提供了大量的可见的益处。软件开发不
用一切从零开始,开发过程就是一个组装构件的过程,维护的过程就是对构件升级、替换和扩充的过程,大大提高了软件的开发效率。构件模型允许多个项目同时开发,降低了费用,提高了可维护性。
构件模型也存在一些缺点,如:由于存在多种构件标准,缺乏通用的构件组装结构标准,如果自行定义会引入较大的风险;构件可重用性和软件系统高效性之间不易协调;如果过分依赖构件,构件质量会影响最终的产品质量。
7.4.7 RUP RUP是由Rational公司的Booch、Jacobson、Rumbaugh提出的软件过程模型,也称RUP(Rational Unified Process)。RUP重复一系列周期,每个周期由一个交付给用户的产品结束。
每个周期划分为初始、细化、构造和移交四个阶段,每个阶段围绕着五个核心工作流(需求、分析、设计、实现、测试)分别迭代。模型见下图:
1.4个阶段
初始阶段:进行问题定义,确定目标,评估其可行性,降低关键风险。细化阶段:制定项目计划、配置各类资源、建立系统架构(包括各类视图)。构造阶段:开发整个产品,并确保产品可移交给用户。移交阶段:产品发布、安装、用户培训。
在每个阶段的每次迭代的最后,用例模型、分析模型、设计模型、实现模型都会增量,每个阶段结束的里程碑处,管理层做出是否继续、进度、预算、是否给下一阶段提供资助等决定。
不同阶段工作流的侧重点不同,前两阶段大部分工作集中在需求、分析和架构设计上;在构造阶段,重点转移到详细设计、实现和测试上。
2.9个工作流
RUP中有9个核心工作流,分为6个核心过程工作流(Core Process Workflows)和3个核心支持工作流(Core Supporting Workflows)。
商业建模:深入了解使用目标系统的机构及其商业运作,评估目标系统对使用它的机构的影响。需求:捕获客户的需求,并且使开发人员和用户达成对需求描述的共识。分析和设计:把需求分析的结果转化成分析模型与设计模型。实现:把设计模型转换成实现成果。
测试:检查个子系统的交互与集成,验证所有需求是否都被正确地实现了,识别,确认缺陷并确保在软件部署之前消除缺陷。
部署:成功地生成目标系统的可运行版本,并把软件移交给最终用户。
配置和变更管理:跟踪并维护在软件开发过程中产生的所有制品的完整性和一致性。
软件项目管理:提供项目管理框架,为软件开发项目制定计划,人员配备,执行和监控等方面的实用准则,并为风险管理提供框架。
环境:向软件开发机构提供软件开发环境,包括过程管理和工具支持。
7.5 UML UML适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域以及各种开发工具。UML由以下5类图来定义: 第1类:用例图
第2类:静态图(包括类图、对象图和包图)第3类:行为图(包括状态图和活动图)第4类:交互图(包括时序图和协作图)第5类:实现图(包括组件图和配置图)
第一类是用例图:从用户角度描述系统功能,并指出各功能的操作者。
第二类是静态图:包括类图,对象图,包图。类图描述系统中类的静态结构,不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等也包括类的内部结构(类的属性和动作)。
第三类是行为图:描述系统的动态模型和组成对象之间的交互关系,其中状态图描述类的对象所有可能的状态,以及事件发生时的状态的转移条件,通常,状态图为类图的补充,在实用上并不需要为所有的类画状态图,仅为那些有多个状态其行为受外界环境的影响并且状态发生改变的类画状态图,活动图描述满足用例要求所要进行的活动以及活动的约束关系,有利于识别并行的活动。
第四类是交互图:描述对象间的交互关系。其中顺序图显示对象之间的动态合作关系,他强调对象之间消息发送的顺序。
第五类是实现图:其中构建图描述代码部件的物理结构和各部件之间的依赖关系,一个部件可能是一个资源代码部件,一个二进制部件或者一个可执行部件。它包含逻辑类和实际类的有关信息。部件图有利于分析和理解部件间的相互影响程度。
下面分别描述9个图。
7.5.1 类图
类图展示了一组类、接口和协作及它们间的关系,在建模中所建立的最常见的图就是类图。用类图说明系统的静态设计视图,包含主动类的类图——专注于系统的静态进程视图。系统可有多个类图,单个类图仅表达了系统的一个方面。要在高层给出类的主要职责,在低层给出类的属性和操作。
7.5.2对象图
对象图展示了一组对象及它们间的关系。用对象图说明类图中所反应的事物实例的数据结构和静态快照。对象图表达了系统的静态设计视图或静态过程视图,除了现实和原型的方面的因素外,它与类图作用是相同的。
7.5.3用例图
用例图展现了一组用例、参与者以及它们间的关系。可以用用例图描述系统的静态使用情况。在对系统行为组织和建模方面,用例图的是相当重要的。
用例(use case):从用户的观点对系统行为的一个描述。用来从用户的观察角度收集系统需求。
用例图表达系统的外部事物(参与者)与系统的交互,它表达了系统的功能,即系统所提供的服务。
整个软件项目的开发可以采用Use Case 驱动的方式进行。
7.5.4交互图
交互图展现了按一定的目的进行的一种交互,它由在一个上下文中的一组对象及它们间交互的信息组成。交互图也可用于描述一个用例的行为。顺序图和协作图都是交互图,顺序图和协作图可以相互转换。
顺序图和协作图都是交互图,它们既是等价的,又是有区别的。
顺序图和协作图都能等价的表现系统运行中对象通过消息发生的交互行为。
顺序图表示了时间的消息序列,便于分析交互的时序,但没有表示静态对象关系,顺序图可以有效地帮助人们观察系统的顺序行为。
协作图着重表示一个协作中的对象之间的联系和消息。
7.5.5顺序图
展现了一组对象和由这组对象收发的消息,用于按时间顺序对控制流建模。用顺序图说明系统的动态视图。
7.5.6协作图
展现了一组对象,这组对象间的连接以及这组对象收发的消息。它强调收发消息的对象的结构组织,按组织结构对控制流建模。
协作图显示某组对象为了由一个用例描述的一个系统事件而与另一组对象进行协
作的交互图。
协作图只对相互间有交互作用的对象和这些对象间的关系建模,而忽略了其他对象
和关联。
协作图中包括如下元素:1.对象(Object)、2.链(Link)和3.消息(Message)。
协作图的用途:
如果按组织对控制流建模,应该选择使用协作图。协作图强调交互中实例间的结构关系以及所传送的消息。协作图对复杂的迭代和分支的可视化以及对多并发控制流的可视化要比时序图好。
协作图有别于时序图的两点特性:(1)协作图有路径(2)协作图有顺序号
7.5.7状态图
展示了一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态间的转移。一个状态图描述了一个状态机,用状态图说明系统的动态视图。它对于接口、类或协作的行为建模尤为重要,可用它描述用例实例的生命周期。在任一给定的时刻,一个对象总是处于某一特定的状态。
状态图主要表现一个对象所经历的状态序列,引起状态或活动转移的事件,以及因状态或活动转移而伴随的动作。
7.5.8活动图
活动图是一种特殊的状态图,描述需要做的活动、执行这些活动的顺序(多为并行的)以及工作流(完成工作所需要的步骤)。它对于系统的功能建模特别重要,强调对象间的控制流程。
活动图实质上是一种流程图,只不过表现的是从一个活动到另一个活动的控制流。活动图描述活动的序列,并且支持对带条件的行为和并发行为表达。
7.5.9时序图
在一个运行的系统中,对象之间要发生交互,并且这些交互要经历一定的时间。
顺序图表达的正是这种基于时间的动态交互。重点是完成某个行为的对象类和这些对象类之间所传递的消息的时间顺序。
7.5.10构件图
构件图展现了一组构件之间的组织和依赖,用于对原代码、可执行的发布、物理数据库和可调整的系统建模。
组件图代表系统的一个物理实现块,代表逻辑模型元素如类、接口的物理打包。
7.5.11部署图
部署图展现了对运行时处理节点以及其中构件的配署。它描述系统硬件的物理拓扑结构(包括网络布局和构件在网络上的位置),以及在此结构上执行的软件(即运行时软构件在节点中的分布情况)。用部署图说明系统结构的静态部署视图,即说明分布、交付和安装的物理系统
7.5.12区别
1.以描述系统状态转移为主的状态图和活动图
状态图:用来描述对象,子系统,系统的生命周期。通过状态图可以了解一个对象所能达到的所有状态,以及对象收到的事件对对象状态的影响。
活动图:显示动作及其结果。着重描述操作(方法)实现中所完成的工作以及用例实例或对象中的活动,它是状态图的一个变种。
状态图与活动图的区别:活动图主要描述动作及对象状态改变的结果。状态图主要描述的是事件对对象状态的影响。
2.以描述系统系统对象通讯和交互为主的协作图和序列图
序列图:描述对象是如何交互的。重点放在消息序列上,描述消息在对象间是如何收发的。
协作图:描述协作对象的交互与链接。
协作图和序列图的区别:协作图和序列图都是描述对象交互的,但是序列图强调的是时间,协作图强调的空间。
7.6需求分析与用例建模
7.6.1需求分析的任务
需求分析的基本任务不是确定系统怎样完成它的工作,而是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。----准确地回答“系统必须做什么?”。
需求分析的步骤: 需求获取 分析建模 文档编写 需求验证
7.6.2类图
类(Class)、对象(Object)和它们之间的关系是面向对象技术中最基本的元素。类图技术是OO方法的核心。
类图标加上它们之间的关系就构成了类图。
类图用于对系统静态设计视图建模。与数据模型不同,它不仅显示了信息的结构,同时还描述了系统的行为。
类图中可以包含接口,包,关系等建模元素,也可以包含对象,链等实例。
类图典型的应用在下面三类建模:(1)对系统的词汇建模(2)对简单协作建模
(3)对逻辑数据库模式建模
类图通常包含下述内容:类、接口、协作、依赖、泛化和关联关系。
关系(Relationship)是事物间的关系。在类的关系中,最常用的4种分别为: 依赖(Dependency):它表示类之间的使用关系 泛化(Generalization):它表示类之间的一般和特殊的关系; 关联(Association):它表示对象之间的结构关系 实现(Realization):它是规格说明和其实现之间的关系。
类主要包含以下几个部分
(1)名称(Name)名称是每个类所必有的构成,用于和其他类相区分。(2)属性(Attribute)类的一个组成部分描述了类所代表事物的属性(3)操作(Operation)操作是对类的对象所能做的事务的抽象
类在UML中由专门的图符表达,是分成3个分隔区的矩形,顶端为类的名字,中间存放类的属性、属性的类型和值,第3个分隔区放操作、操作的参数表和返回类型,如下图:
7.6.3用例图
在UML中,一个用例模型由若干个用例图(use case diagram)描述。用例图是显示一组用例、参与者以及它们之间关系的图。
用例图是从用户的角度来描述对软件产品的需求,分析产品的功能和行为,因此,对整个软件开发过程而言,用例图是至关重要的。
用例图定义和描述了系统的外部可见行为,是分析、设计直至组装测试的重要依据。让用户参与前期的系统分析与设计。
用例图的组成: 用例(Use Case)参与者(Actor)关系(Relationship)
1.什么是参与者
参与者:在系统之外,透过系统边界与系统进行有意义交互的任何事物。参与者可能是人、另外一个系统、时间的流逝等。
UML中,参与者用“人形”图标来表示,名字写在图标的下方。
参与者
2.什么是用例
用例(use case)一个用例是用户与计算机之间的一次典型交互作用。在UML中,用例被定义成系统执行的一系列动作(功能)。
参与者和用例分别描述了“谁来做?”和“做什么?”这两个问题。每个用例都必须有一个惟一的名字以区别于其他用例。用例用一个椭圆来表示,用例的名字可以书写在椭圆的内部或下方。用例的UML图标如图所示。3.用例间、用例与参与者的关系
(1)泛化关系(Generalization):一个用例可以被特别列举为一个或多个子用例,这被称为用例泛化:
(2)包含关系(Include)一个用例可以简单地包含其他用例具有的行为,并把它所包含的用例行为作为自身行为的一部分,这被称作包含关系。
(3)扩展关系(Extend):一个用例也可以被定义为基础用例的增量扩展,这称作扩展关系,扩展关系是把新行为插入到已有用例的方法。
(4)关联关系:关联关系表示参与者与用例之间的通信。
4.用例间的关系
(1)泛化关系
当多个用例共同拥有一种类似的结构和行为的时候我们可以将它们的共性抽象成为父用例,其他的用例作为泛化关系中的子用例。
用例可以被特别列举为一个或多个子用例,这被称做用例泛化。(2)包含关系
包含是指基本用例(base use case)会用到包含用例(inclusion),具体地讲,就是将包含用例的事件流插入到基础用例的事件流中。包含用例是可重用的用例──多个用例的公共用例。
(3)扩展关系
将扩展用例的事件流在一定的条件下按照相应的扩展点插入到基础用例中。基础用例不必知道扩展用例的任何细节,它仅为其提供扩展点。扩展用例的行为是否被执行要取决于主事件流中的判定点。
扩展关系是从扩展用例到基本用例的关系,它说明为扩展用例定义的行为如何插入到为基本用例定义的行为中。它是以隐含形式插入的,也就是说,扩展用例并不在基本用例中显示。在以下几种情况下,可使用扩展用例:
a.表明用例的某一部分是可选的系统行为(这样,您就可以将模型中的可选行为和必选行为分开);
b.表明只在特定条件(如例外条件)下才执行的分支流;
5.用例之间的关系
包含用例与扩展用例的区别
①相对于基础用例,扩展用例是可选的,而包含用例则不是。
②如果缺少扩展用例,基础用例还是完整的,而缺少包含用例,则基础用例就不完整了。③扩展用例的执行需要满足某种条件,而包含用例不需要。④扩展用例的执行会改变基础用例的行为,而包含用例不会。
6.识别用例的方法:
①参与者希望系统提供什么功能;
②系统是否存储和检索信息;如果是,这个行为由哪个参与者触发; ③当系统改变状态时,是否通知参与者;
④是否存在影响系统的外部事件,是哪个参与者通知系统这些外部事件。
7.6.4活动图
1.什么是活动图
活动图是UML中描述系统动态行为的图之一,是描述系统或业务的一序列活动构成的控制流,它描述了系统从一种活动转换到另一种活动的整个过程。
2.活动图用途
活动图用于对系统的动态行为建模。
活动图常用来描述业务或软件系统的活动轨迹,描述了系统的活动控制流程。我们常用活动图对业务过程、工作流和用例实现进行建模。
活动图主要应用对两个方面建模:一是在业务分析阶段,对工作流程进行建模;二是在系统分析和设计阶段,对操作流程进行建模。
7.6.5面向对象分析建立的3类模型
对象模型、动态模型、功能模型
对象模型
对象模型表示了静态的、结构化的系统数据性质,描述了系统的静态结构,它是从客观世界实体的对象关系角度来描述,表现了对象的相互关系。该模型主要关心系统中对象的结构、属性和操作,它是分析阶段三个模型的核心,是其他两个模型的框架。[2]
⒈对象和类 ⑴对象。
对象建模的目的就是描述对象。⑵ 类。
通过将对象抽象成类,我们可以使问题抽象化,抽象增强了模型的归纳能力。⑶ 属性。
属性指的是类中对象所具有的性质(数据值)。⑷ 操作和方法。
操作是类中对象所使用的一种功能或变换。类中的各对象可以共享操作,每个操作都有一个目标对象作为其隐含参数。
方法是类的操作的实现步骤。⒉关联和链
关联是建立类之间关系的一种手段,而链则是建立对象之间关系的一种手段。⑴ 关联和链的含义。
链表示对象间的物理与概念联结,关联表示类之间的一种关系,链是关联的实例,关联是链的抽象。
⑵ 角色。
角色说明类在关联中的作用,它位于关联的端点。⑶ 受限关联。
受限关联由两个类及一个限定词组成,限定词是一种特定的属性,用来有效的减少关联的重数,限定词在关联的终端对象集中说明。
限定提高了语义的精确性,增强了查询能力,在现实世界中,常常出现限定词。⑷ 关联的多重性。
关联的多重性是指类中有多少个对象与关联的类的一个对象相关。重数常描述为“一”或“多”。⒊类的层次结构 ⑴ 聚集关系。
聚集是一种“整体-部分”关系。在这种关系中,有整体类和部分类之分。聚集最重要的性质是传递性,也具有逆对称性。
聚集可以有不同层次,可以把不同分类聚集起来得到一颗简单的聚集树,聚集树是一种简单表示,比画很多线来将部分类联系起来简单得多,对象模型应该容易地反映各级层次。
⑵一般化关系。
一般化关系是在保留对象差异的同时共享对象相似性的一种高度抽象方式。它是“一般---具体”的关系。一般化类称为你类,具体类又能称为子类,各子类继承了父类的性质,而各子类的一些共同性质和操作又归纳到你类中。因此,一般化关系和继承是同时存在的。一般化关系的符号表示是在类关联的连线上加一个小三角形。
⒋对象模型
⑴模板。模板是类、关联、一般化结构的逻辑组成。⑵对象模型。
对象模型是由一个或若干个模板组成。模板将模型分为若干个便于管理的子块,在整个对象模型和类及关联的构造块之间,模板提供了一种集成的中间单元,模板中的类名及关联名是唯一的
动态模型
动态模型是与时间和变化有关的系统性质。该模型描述了系统的控制结构,它表示了瞬间的、行为化的系统控制
性质,它关心的是系统的控制,操作的执行顺序,它表示从对象的事件和状态的角度出发,表现了对象的相互行为。
该模型描述的系统属性是触发事件、事件序列、状态、事件与状态的组织。使用状态图作为描述工具。它涉及到事件、状态、操作等重要概念。
⒈事件
事件是指定时刻发生的某件事。
⒉状态
状态是对象属性值的抽象。对象的属性值按照影响对象显著行为的性质将其归并到一个状态中去。状态指明了对象对输入事件的响应。
⒊状态图
状态图是一个标准的计算机概念,他是有限自动机的图形表示,这里把状态图作为建立动态模型的图形工具。
状态图反映了状态与事件的关系。当接收一事件时,下一状态就取决于当前状态和所接收的该事件,由该事件引起的状态变化称为转换。
状态图是一种图,用结点表示状态,结点用圆圈表示;圆圈内有状态名,用箭头连线表示状态的转换,上面标记事件名,箭头方向表示转换的方向。
功能模型
功能模型描述了系统的所有计算。功能模型指出发生了什么,动态模型确定什么时候发生,而对象模型确定发生的客体。功能模型表明一个计算如何从输入值得到输出值,它不考虑计算的次序。功能模型由多张数据流图组成。数据流图用来表示从源对象到目标对象的数据值的流向,它不包含控制信息,控制信息在动态模型中表示,同时数据流图也不表示对象中值的组织,值的组织在对象模型中表示。
数据流图中包含有处理、数据流、动作对象和数据存储对象。⒈处理
数据流图中的处理用来改变数据值。最低层处理是纯粹的函数,一张完整的数据流图是一个高层处理。
⒉数据流
数据流图中的数据流将对象的输出与处理、处理与对象的输入、处理与处理联系起来。在一个计算机中,用数据流来表示一中间数据值,数据流不能改变数据值。
⒊动作对象
动作对象是一种主动对象,它通过生成或者使用数据值来驱动数据流图。
⒋数据存储对象
数据流图中的数据存储是被动对象,它用来存储数据。它与动作对象不一样,数据存储本身不产生任何操作,它只响应存储和访问的要求。
7.7设计阶段
7.7.1详细设计
详细设计阶段的根本目标是确定怎样具体地实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。
详细设计的目标: 设计出的处理过程应该尽可能简明易懂。详细设计的任务:
(1)为每个模块确定采用的算法,选择某种适当的工具表达算法的过程,写出模块的详细过程性描述;
(2)确定每一模块使用的数据结构;为以后的编写程序做好充分的准备。(3)确定模块接口的细节。
7.7.2总体设计
1.面向对象设计
面向对象设计的准则:优秀设计就是使得系统在其整个生命周期中的总开销最小的设计, 其主要特点就是容易维护。
面向对象设计(OOD,Object-Oriented Design)是面向对象分析到实现的一个桥梁。面向对象分析是将用户需求经过分析后,建立问题域精确模型的过程;而面向对象设计则根据面向对象分析得到的需求模型,建立求解域模型的过程。即分析必须搞清楚系统“做什么”,而设计必须搞清楚系统“怎么做”,从分析到设计不是传统方法的转换,而是平滑(无缝)过渡,而求解域模型是系统实现的依据。
静态结构设计: 类设计 包设计 接口设计
动态结构设计(行为和交互建模): 对象如何进行交互的
2.GUI(图形用户界面)设计概述
对于用户来说,一个友好的界面是至关重要的。
用户界面(User Interface)的设计质量直接影响用户对软件产品的评价,从而影响软件产品的竞争力和使用寿命,因此,对人机界面的设计必须给予足够的重视。
良好的GUI设计原则
1、关注用户及其任务,而不是技术
2、首先考虑功能,其次才是表现
3、与用户对任务的看法保持一致
4、设计要符合常见情况
5、不要分散用户对他们目标的注意力
6、促进学习,从外(用户)到里(设计人员)思考,而不是相反。
7、传递信息,而不仅仅是数据
8、设计应满足响应需求
9、通过用户试用发现错误,然后修复它
3.数据库设计
设计原则:
每一个类成为一个数据库表。关系映射:
(1)一对多的关系映射为数据库表的主外键关联(1方的主键加入n方成为外键)
(2)一对一的关系映射为数据库表的主外键关联(1方的主键加入另一方成为外键)
(3)多对多的关系映射:产生第三张表,将两个多方的主键加入其中成为外键,两个外键的组合成为主键。
利用数据库三范式检查表,从而考察领域类图的分析是否合理,消除冗余数据。检查数据是否能够反映用例视图的需要;进一步与用户再次确认使用的数据。
7.8注释
夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段。注释决不是可有可无的。一些正规的程序文本中,注释行的数量占到整个源程序的1/3到1/2,甚至更多。
注释分为两类:序言性注释和功能性注释。
1.序言性注释
通常置于每个程序模块的开头部分,它应当给出程序的整体说明,对于理解程序本身具有引导作用。
序言性注释包括: 程序标题;
有关本模块功能和目的的说明; 主要算法;
接口说明:包括调用形式,参数描述,子程序清单;
有关数据描述:重要的变量及其用途,约束或限制条件,以及其它有关信息; 模块位置:在哪一个源文件中,或隶属于哪一个软件包;
开发简历:模块设计者,复审者,复审日期,修改日期及有关说明等。
2.功能性注释
功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎么样,而不要解释下面怎么做。
要点:
描述一段程序,而不是每一个语句; 用缩进和空行,使程序与注释容易区别;
7.9软件测试
软件测试的定义:软件测试是使用人工和自动手段来运行或测试某个系统的过程,其目的在于检测被测试软件系统是否满足规定的需要,或是弄清楚被测系统的预期结果与实际结果之间的差别。
黑盒测试:仅需要知道被测试对象的输入和预期输出,不需要了解代码实现的细节。测试方法
主要分为两类:功能层面的测试方法和函数层面的测试方法(边界值测试、等价类测试、基于决策表测试)。侧重于系统业务流程的梳理,是基于动态业务过程设计测试用例。
白盒测试:是针对程序代码展开的测试,分为静态测试和动态测试:关注对象包括源代码和程序结构。静态白盒测试的方法是代码检查。静态测试不需要运行程序和设计测试用例,侧重于源代码的检查和优化,直接查看源代码和执行代码,直接定位代码中的缺陷。动态测试侧重于程序结构的测试。
测试用例的定义:测试用例是一组测试输入,执行条件和预期结果。目的是要满足一个特定的目标。如果执行一条特定的程序路径或者检验是否符合一个特定的需求的用例。测试用例:输入+输出+测试环境测试环境包括:硬件环境,软件环境,网络环境,历史数据。
测试用例分为两个阶段:测试用例分析阶段,测试用例设计阶段。
7.9.1测试和调试的区别
1、目的不同
软件测试的目的是发现错误,至于找出错误的原因和错误发生的地方不是软件测试的任务,而是调试的任务.调试的目的是为了证明程序的正确,因此它必须不断地排除错误.它们的出发点不一样。前者是挑错,是一种挑剔过程,属于质盘保证活动。后者是排错,是一种排除过程,是编码活动的一部分。
2、任务不同
既然软件测试属于质量保证活动,因此它贯穿于整个开发过程.从需求分析开始,就要制订软件测试计划,软件设计时要设计系统软件测试、集成侧试用例,编码阶段要设计单元软件测试用例并进行单元软件测试,软件测试阶段要进行集成软件测试、系统软件测试等,直到产品交付。只要有修改就有软件测试,产品交付后同样。它是比较有规律的活动,有系统的方法、原则作指导。
而调试是编码活动的一部分,因此有编码就有调试.它的任务主要就是排错。调试的方法经常与使用的开发工具有关,例如:解释型的开发工具可以交互式调试,编译型开发工具就很难较好地查错。当然它有一些启发式的方法,它是一种比较依赖开发人员经验的活动。
3、指导原则和方法不同
软件侧试是一种有规律的活动,有一系列软件软件测试的原则.其中主要是制订侧试计划,然后严格执行.其次是一种挑剔性行为,因此它不但要侧试软件应该做的,还需要侧试软件不应该做的事情。调试所遵循的规律主要是一些启发式规则,是一个推理过程。例如使用归纳法、演绎法、回溯法等。
软件测试的输出是预知的,其软件测试用例必须包括预期的结果,而调试的输出大多是不可预见的,需要调试者去解释、去发现产生的原因。
4、操作者
因为心理状态是软件测试程序的障碍,所以执行软件测试的人一般不是开发人员,以使软件测试更客观、更有效,而调试人员一般都是开发人员.7.9.2软件维护
软件维护活动类型总起来大概有四种:纠错性维护(校正性维护)、适应性维护、完善性维护或增强、预防性维护或再工程。
改正性维护
改正性维护是指改正在系统开发阶段已发生而系统测试阶段尚未发现的错误。这方面的维护工作量要占整个维护工作量的17%~21%。所发现的错误有的不太重要,不影响系统的正常运行,其维护工作可随时进行:而有的错误非常重要,甚至影响整个系统的正常运行,其维护工作必须制定计划,进行修改,并且要进行复查和控制。
适应性维护
适应性维护是指使用软件适应信息技术变化和管理需求变化而进行的修改。这方面的维护工作量占整个维护工作量的18%~25%。由于计算机硬件价格的不断下降,各类系统软件屡出不穷,人们常常为改善系统硬件环境和运行环境而产生系统更新换代的需求;企业的外部市场环境和管理需求的不断变化也使得各级管理人员不断提出新的信息需求。这些因素都将导致适应性维护工作的产生。进行这方面的维护工作也要像系统开发一样,有计划、有步骤地进行。
完善性维护
完善性维护是为扩充功能和改善性能而进行的修改,主要是指对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。这些功能对完善系统功能是非常必要的。另外,还包括对处理效率和编写程序的改进,这方面的维护占整个维护工作的50%~60%,比重较大.也是关系到系统开发质量的重要方面。这方面的维护除了要有计划、有步骤地完成外.还要注意将相关的文档资料加入到前面相应的文档中去。
预防性维护
预防性维护为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件环境的变化,应主动增加预防性的新的功能,以使应用系统适应各类变化而不被淘汰。例如将专用报表功能改成通用报表生成功能,以适应将来报表格式的变化。这方面的维护工作量占整个维护工作量的4%左右。
第一章
1.软件有哪些种类?
答:1.按功能特征进行划分:
(1)系统软件(2)支撑软件(3)应用软件
2.按规模大小进行划分
微型、小型、大型、甚大型、极大型
4.结合自己的亲身经历,谈谈软件工具在软件开发过程中的作用。
使软件开发更加模式化,工程化,从而提高软件开发的效率和封装性。
第二章
2.软件瀑布模型为什么要划分阶段?各个阶段的任务是什么?
在软件开发早期,开发只是被简单地分成编写代码和修改代码两个阶段。往往在拿到项目后立刻编写程序,然后调试通过后直接交付给用户使用。如果应用中出现错误,或者有新的要求,都需要重新修改代码。这种小作坊式的软件开发方法有明显的弊端,如缺乏统的项目规划、不太重视需求的获取和分析、对软件的测试和维护考虑不周等,这些都会导致软件项目的失败。
概念阶段:计划、需求分析
开发阶段:设计、编码、测试
维护阶段:运行维护
3.举例说明哪些项目的开发适用于原型模型或螺旋模型,哪些不适于采用这两种模型。
螺旋模型适合于大型软件的开发,应该说它是最为实际的方法,它吸收了软件工程“演化”的概念,使得开发人员和客户对每个演化层出现的风险有所了解,继而做出应有的反应。
不适用:小型软件。
原型般是指对某种产品进行模拟的初始版本或者原始模型,在工程领域中具有广泛应用。
不适用:大型软件项目;含有对于计算量大、逻辑性较强的程序模块:
第三章
1.可行性研究的任务是什么?
可行性研究的任务是以最小的代价在尽可能短的时间内确定问题是否能够解决。简单的说,可行性研究的最终结果是决定项目y做还是小做”而不是“如何做”。2.项目开发计划有哪些内容?
引言(目的、背景、参考文献、术语);项目概述(功能、条件、运行环境、产品、程序、文档、服务、验收标准、实施计划、工作任务分解、进度、预算、人员)
第四章
1.什么是需求工程?需求工程包括哪些活动?
需求工程是指应用已证实有效的技术、方法进行需求分析,确定客户需求,帮助分析人员理解问题并定义目标系统的所有外部特征的 门学科。它通过合适的工具和记号系统地描述待开发系统,及其行为特征和相关约束,形成需求文档;并对用户不断变化的需求演进给予支持。
一个良好的需求开发过程应该包括需求获取、需求分析与建模、编写需求规格说明书和需求评审4个主要活动。
2.需求工程过程包括哪些主要活动? 需求开发过程应该包括需求获取、需求分析与建模、编写需求规格说明书和需求评审4个主要活动。3.有哪两种主要的需求分析模型?它们的主要思想是什么?
答:面向对象分析模型,结构化分析模型。前者是采用面向对象的思想进行软件需求分析的建模过程,而后者模型的核心是DD,它是设计各种数据对象的总和。他们的模型分别起到了描述数据模型,功能模型与行为模型的作用。
4.需求规格说明书的主要作用是什么?应该包括哪些主要内容? 作用:
(1)作为用户方和开发方之间的合同,为双方相互了解提供基础。
(2)反映问题的结构,作为系统设计和编码的依据。
(3)作为测试和验收目标系统的依据。内容:
用户可以通过需求规格说明书检查需求描述是否满足原来的期望。设计人员根据软件需求规格说明书的描述了解所需开发软件的功能和性能,以及开发软件时必须满足的约束,将其作为软件设计的依据。测试人员根据软件需求规格说明书中对产品的描述,设计测试计划、测试用例和测试过程。产品发布人员根据软件需求规格说明和用户界面设计编写用户手册和帮助信息
第五章
2.简述数据流图分解时的注意事项。
•上层可分解得快些(即分解成子数据处理个数多些),这是因为上层是综合性描述,对可读性的影(即分解成的子数据处理个数多些),这是因为上层是综合性描述,对可读性的影响小。而下层应分解得慢性。
•在不影响可读性的前提下,应适当多分解成几部分,以减少分解层数。3.数据字典的作用是什么?它有哪些基本内容? •分解应自然,概念上要合理、清晰。
作用:数据字典作为分析阶段的工具,有助于改进分析人员和用户.间的通信,进而消除很多的误解,同时也有助于改进不同开发人员之间的通信;.内容:数据字典的内容主要是对数据流图中的数据项、数据流、加工逻辑、数据存储和外部实体
第六章
1.什么是面向对象方法?与传统软件开发方法相比,面向对象方法有什么优点? 是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法。优点:
1.符合人们对问题的认识习惯
2.增强问题域与最终软件系统之间的衔接
3.易于维护和复用
4.易于开发大型软件产品
2.什么是模型?在软件开发过程中为什么需要建立模型?
在软件开发过程中,建立软件模型具有十分重要的作用,主要体现在以下几个方面:
有助于问题的简化,通过抽象降低复杂性;
有助于和其他开发小组成员,各种用户以及系统相关者进行交流;
有助于维护人员了解软件设计的思路和细节,为以后的维护和升级提供了文档。
第七章
1.面向对象分析包括哪些活动?应该建立哪些类型的模型?
面向对象分析OOA模型的过程包括理解用例模型、识别分析类、定义交互行为、建立分析类图、评审分析模型5个活动组成。
目标是建立一个符合问题域、满足用户需求的OOA模型。
2.什么是实体类、边界类和控制类?为什么将分析类划分成这3种类型?
实体类:用于描述必须存储的信息,同时描述相关的行为。实体类代表拟建系统中的核心信息。在RUP的有关文档中对实体类的解释为:“实体类是用于对必须存储的信息和相关行为建模的类。边界类:在系统与外界之间,为它们交换各种信息与事件。边界类处理软件系统的输入和输出。在RUP的有关文档中对边界类的解释为:边界类是一种用于对系统外部环境与其内部运作之间的交互进行建模的类。
控制类:与业务过程相关,它们控制整个业务的流程和执行次序。在RUP的有关文档中对控制类的解释为:控制类用于对一个或几个用例所持有的控制行为进行建模。
控制类对象可以和边界对象交互,也可以和实体对象交互,但不能和用例的参与者直接进行交互。
第八章
1.什么是软件设计?它的目标和任务是什么?
<1>软件设计:在需求分析的基础上通过抽象和分解将系统分解成模块,确定系统功能的实现。即把软件需求转换为软件包表示的过程。
<2>目标:软件设计的最终目标是产生一个设计规约,该规约包括体系结构、描述数据、接口和构件的设计模型。
软件设计的任务,就是把分析阶段产生的软件需求规格说明转换为用适当手段表示的软件设计文档。
2.完成良好的软件设计应遵循哪些原则?
模块化与模块独立性;抽象与逐步求精;信息隐藏。3.如何理解模块独立性?用什么指标来衡量模块独立性?
<1>模块的独立性是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他的模块的接口是简单的。
<2>一般采用两个准则度量模块独立性,即模块的内聚性和模块间的耦合性 4.说明软件设计阶段的任务和过程 软件设计分两步完成,即总体设计与详细设计。第个阶段是总体设计,即概要设计或初步设计。这、阶段主要确定实现目标系统的总体思想和设计框架,确定程序由哪些模块组成,以及模块与模块之间的关系,最后提出概要设计说明书。第二个阶段是详细设计,即过程设计或构件级设计,其任务是通过对结构表示进行细化,确定各个软件构件的详细数据结构和算法,产生描述各个软件构件的详细设计文档。
5.试说明软件体系结构在软件设计阶段中的重要性。
良好的体系结构设计是决定软件系统成功的重要因素。软件体系结构设计的好坏往往会成为一个系统设计成败的关键。通常,软件体系结构涉及软件的总体组织、全局控制、数据存取及子系统之间的通信协议等。
6.简述面向对象设计阶段要做的工作。
OOD主要包括三个方面的工作:系统体系结构设计、用例实现方案设计和用户界面设计。
第十一章
1.简述程序设计语言的基本特征及分类。
基本特征包括心理特性,工程特性和技术特性三个方面。语言的的—心理特性对人机通信的质量有主要的影响;语言的工程特性对软件开发成功与否有重要的影响,此外语言的技术特性也会影响软件设计的质量
•按程序设计语言的历史发展过程,计算机语言可分为机器语言、汇编语言、高级程序设计语言。
•按与机器的依赖程度,可分为低级、中级和高级语言。
•按应用范围,可分为通用语言与专用语言两大类,通用语言义可细分为系统程序设计语言、科学计算语言、事务处理语言和实时控制语言等。
•按程序的设计方法,可分为命令性语言和作用性语言。
•按语言的成分,可以分成顺序语言、并行语言和实时语言等。
•按语言的组成方法,可以分成汇集式语言和可扩充语言。2.为了具有良好的程序设计风格,应该注意哪些方面的问题?
要形成良好的程序设计风格,应从源程序文档化、数据说明、语句构造、输入输出和追求效率几个方面加以注意。
3.什么是软件测试?软件I则试的原则有哪些?
软件测试是按照特定的规则,发现缺陷而执行程序的过程。
一个好的测试用例是指尽可能找到迄今为止尚未发现缺陷的用例。一个成功的测试是指揭示了迄今为止尚未发现缺陷的测试。软件测试的原则:
(l)所有的测试都应该能追溯到用户需求。
(Z)应该在测试之前就制定出测试计划。
(3)Pareto原理可应用于软件测试。
(4)测试应从“小规模”开始,逐步转向“大规模”
(S)穷举测试是不可能的。
(6)既要做通过性测试,又要做失效性测试。
(D为了达到最佳的测试效果,应该由独立的第三方从事测试工作。
第十四章
1.为什么说软件维护是不可避免的?
因为软件的开发过程中,一般很难检测到所有的错误,其次软件在应用过程中需要随用户新的要求或运行环境的变化而进行软件的修改或纠正软件开发过程未发现的错误,增强、改进和完善软件的功能和性能,以适应软件的发展,延长软件的寿命,软件的维护是不可避免的。2.什么是软件再工程?软件再工程的主要活动有哪些?
指在逆向工程所获信息的基础上修改重构已有的系统,产生的―个新版本,或者说利用这些信息修改或重构软件系统的工作。
它定义了6为活动r即库存目录分析、文档重构、逆向工程、代码重构、数据重构、正向工程。3.软件调试与软件测试有什么区别?
1、目的不同
软件测试的目的是发现错误,至于找出错误的原因和错误发生的地方不是软件测试的任务,而是调试的任务。调试的目的是为了证明程序的正确,因此它必须不断地挤除错误.它们的出发点不一样“前者是挑错,是一种挑剔过程,属于质盘保证活动。后者是排错,是-种排除过程,是编码活动的部分•
2、任务不同
既然软件测试属于质量保证活动,因此它贯穿十整个计发过程.从需求分析开始,就要制订软件测试计划,软件设计时要设计系统软件测试、集成侧试用例,编码阶段要设计单元软件测试用例并进行单元软件测试,软件测试阶段要进行集成软件测试、系统软件测试等,直到产品交付。只要有修改就有软件测试,产品交付后同样。它是比较有规律的活动,有系统的方法、原则作指导。
而调试是编码活动的部分,因此有编码就有调试它的任务主要就是排错。调试的方法经常与使用的开发工具有关,例如解释型的开发工具可以交互式调试,编译型开发工具就很难较好地查错。当然它有些启发式的方法,它是.种比较依赖开发人员经验的活动。
3、指导原则和方法不同
软件侧试是种有规律的活动,有一系列软件软件测试的原则.其中主要是制U侧试计划,然后严格执行。其次是种挑剔性行为,因此它不但要侧试软件应该做的,还需要侧试软件个应该做的事情。调试所遵循的规律主要是些启发式规则,是”个推理过程。例如使用归纳法、演绎法、回溯法等。
软件测试的输出是预知的,其软件测试用例必须包括预期的结果,而调试的输出大多是不可预见的,需要调试者去解释、去发现产生的原因。
4、操作者
因为心理状态是软件测试程序的障碍,所以执行软件测试的人一般不是开发人员,以使软件测试更客观、更有效,而调试人员一般都是开发人员•
5、操作环境、配置、工具不同
调试在开发的编码环境下进行。如果编码使用解释型语言,则可以进行人机交互式调试,设里断点、单步调试等。如果编码使用编译型语言,也可以设置断点、显示调试变量值等。而软件测试是在软件测试环境下进行,直接运行开发完成的程序,可能不再需要一些开发时的驱动程序、动态链接库等.使用不同的工具,环境配置也不同。
简答题,1.什么是软件工程?请分析软件工程的目标是什么?
答案:软件工程是:1将系统化的、规范的、可度量的方法应用于软件的升发、运行和维护过程,也就是说将工程化应用于软件开发和管理之中;2对1中所选方法的研究”
软件工程旨在开发满足用户需要、及时交付、不超过预算和无故障的软件,其主要目标如下: a)实现预期的软件功能,达到较好的软件性能,满足用户的需求。
b)增强软件过程的可见性和可控性,保证软件的质量。
c)提高所开发软件的可维护性,降低维护费用。
d)提高软件开发生产率,及时交付使用。
e)合理预算开发成本,付出较低的开发费用。
3.根据相关的法律,对于侵犯软件著作权的行为,根据情节应当给予什么处罚?
对于侵犯软件著作权的行为,要根据情况承担停止侵害、消除影响、赔礼道歉、赔偿损失等民事责任;损害社会公共利益的,由著作权行政管理部门责令停止侵权行为,没收违法所得,没收、销毁侵权复制品,并处罚款;情节严重的,著作权行政管理部门可以没收用子制作侵权复制品的材料、工具、设备等;触犯刑律的,依法追究刑事责任。
4根据你的理解,列举出职业化软件工程师要注意的三个主要问题,请给出理由。没有唯一答案。
1)不遵守标准和规范:职业化的重要特征是遵守行业标准,不能肆意按照自己的想象来发挥。自从人们认识到软件危机以来,总结软件开发的失败教训和成功经验,并把它们总结成为最佳实践,进而形成标准,要充分利用这些最佳实践和标准来指导软件过程。任何闭门造车、想当然的行为都是不被提倡的,注定要走弯路。
2)对待计划不严肃:软件工程强调计划性,计划的内容包括;设备资源、进度安排、人力资源、任务分配等等。在项目的进行中要跟踪计划执行情况,记录计划执行过程中的偏差,对任何变更都要经过评审和批准才能付诸行动。
3)不主动与人沟通:软件不可见的特性,需要软件工程师进行大量书面的、口头的或面对面的沟通,沟通的目的是为了使相关的人员了解项目的进展、遇到的问题、应用的技术、采用的方法。5.软件工程为什么要强调规范化和文档化?.软件工程强调规范化和文档化。规范化的目的是使众多的开发者遵守相同的规范,使软件生产摆脱个人生产方式,进入标准化、工程化的生产方式。文档化是将软件的设计思想、设计过程和实现过程完整地记录下来,以便于后人的使用和维护,在开发过程中各类相关人员借助于文档进行交流和沟通。另外,在开发过程中产生的各类文档使得软件的生产过程由不可见变为可见,便于管理
者对软件生产进度和开发过程进行管理。在用户最终验收时可以通过对提交的文档进行技术审查和管理审查,保证软件的质量。
6.请简单说明结构化分析的主要步骤。
根据用户的需求画出初始的数据流程图,写出数据字典和初始的加工处理说明(lPO图),实体关系图。以初始数据流程图为基础,从数据流程图的输出端开始回溯。在对数据流程图进行回溯的过程中可能会发现丢失的处理和数据,应将数据流程图补充完善。对软件性能指标、接口定义、设计和实现的约束条件等逐一进行分析。系统分析人员与用户起对需求分析的结果进行复查。根据细化的需求修订开发计划。编写需求规格说明书和初始的用户手册,测试人员开始编写功能测试用的测试数据。
7.设计类的属性时必须要定义是哪两项?
设计类的属性时必须要定义的内容:
1)属性的类型:设计属性时必须要根据开发语言确定每个属性的数据类型•如果数据类型不够,设计人员可以利用已有的数据类型定义新的数据类型。
2)属性的可见性。在设计属性时要确定公有属性、私有属性、受保护属性。活动图反映系统中从一个活动到另一个活动的流程,强调对象间的控制流程。活动图特别适合描述工作流和并行处理过程。具体地说活动图可以描述一个操作过程中需要完成的活动;描述一个对象内部的工作;描述如何执行组相关的动作,以及这些动作如何影响它们周围的对象;说明个业务活动中角色、工作流、组织和对象是如何工作的。
顺序图用于描述一组交互对象间的交互方式,它表示完成某项行为的对象和这些对象之间传递消息的时间顺序。
8面向对象的分析通常要建立三个模型,请问三个模型的作用?
a)功能模型:表达系统的详细需求,为软件的进一步分析和设计打下基础。在面向对
象方法中,由用例图和场景描述组成。
b)对象模型:表示静态的、结构化的系统“数据”性质。描述现实世界中实体的对象以及它们之间的关系,表示目标系统的静态数据结构。在面向对象方法中,类图是构件对象模型的核心上具。
c)动态模型:描述系统的动态结构和对象之间的交互,表示瞬时的、行为化的系统的“控制”特性。面向对象方法中,常用状态图、顺序图、合作图、活动图构件系统的动态模型。
9.面向对象的设计活动中,有构架师、用例工程师和构件师参加,他们每个角色的职责是什么?
构架设计的目的是要勾画出系统的总体结构,这项工作由经验丰富的构架设计师主持完成。该活动以用例模型、分析模型为输入,生成物理构架、子系统及其接口、概要的设计类(即设计阶段定义的类)。
根据分析阶段产生的高层类图和交互图,由用例设计师研究已有的类,将它们分配到相应的用例中。检查每个用例的功能,这些功能依靠当前的类能否实现,同时检查每个用例的.特殊需求是否有合适的类来实现。细化每个用例的类图,描述实现用例的类及其类之间的相互关系,其中的通用类和关键类可用粗线框区分,这些类将作为项目经理检查项目时的重点。
经过前面两个活动,构架设计师已经将系统的构架建立起来,用例设计师按照用例的功能将每个类分配给相应的用例。现在要由构件工程师详细设计每个类的属性、方法和关系。10.提高程序可读性有哪些招数?对你来讲比较灵验的是哪些?
a)源程序文件头说明,函数应有函数头说明,内容包括:程序标题;有关该模块功能和目的说明;主要算法说明;接O说明,包括调用形式、参数描述、子程序清单、有关数据的说明。
b)主要变量(结构、联合、类或对象)的定义能够反映其内在含义。c)变量定义最规范化,说明的先后次序固定。
d)处理过程的每个阶段和典型算法前都有相关注释说明。
三、简答题:
2、什么是软件工程?包括哪些内容?
答: 软件工程:用科学知识和技术原理来定义、开发、维护软件的一门学科。软件工程的内容:
1)软件开发技术:软件开发方法、软件开发过程、软件开发工具和环境。2)软件开发管理:软件管理学、软件经济学、软件心理学。
软件工程的目标:是成功的建造一个大型软件系统,所谓成功是要达到以下几个目标:①付出较 低的开发成本;②面到要求的软件功能;③取得较好的软件性能;④开发的软件易于 移植;⑤需要较低的维护费用;⑥能按时完成开发任务,及时交付使用;⑦开发的软 件可靠性高;软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件工 程过程主要包括开发过程、运作过程、维护过程。它们覆盖了需求、设计、实现、确认以及维护等活动。
软件工程的框架可概括为:①目标、②过程和③原则。
软件工程的原则:是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。基本原理:⑴用分阶段的生命周期计划严格管理;⑵坚持进行阶段评审;⑶实行严格的产品控制; ⑷采用现代程序设计技术;⑸结果应能清楚地审查;⑹开发小组的人员应该少而精; ⑺承认不断改进软件工程实践的必要性;(工程化的方法开发软件基本原理)
软件工程方法学:软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工 程学科。
软件工程方法学包括:①传统方法学(结构化范型)和②面向对象方法学。
面向对象的要点: ①把对象作为融合了数据及在数据上的操作行为的统一的软件构件。②把所 有对象都划分成类。③按子类与父类的关系,把类组成一个层次结构。④对象彼此之 间仅能通过传递消息互相联系。
软件工程方法学三要素是:①方法;②工具;③过程。
3、软件生命周期由哪三个时期组成,又划分为哪8个阶段?
答:软件生存周期:一个软件从提出开发要求开始直到该软件报废为止的整个时期。软件生命周期是
由:⑴软件定义时期;⑵软件开发时期;⑶软件维护时期三个时期组成的。又划分为:①问题定义、②可行性研究、③需求分析、④总体设计、⑤详细设计、⑥编码和单元测试、⑦综合测试、⑧维护八个阶段。
1、问题的定义及规划 此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。
2、需求分析 在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。“唯一不变的是变化本身。”,同样需
求也是在整个软件开发过程中不断变化和深入的,因此我们必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。
3、软件设计 此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设计和详细设计。好的软件设计将为软件程序编写打下良好的基础。
4、程序编码 此阶段是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。
5、软件测试 在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试、组装测试以及系统测试三个阶段进行。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。
6、运行维护 软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括纠错性维护和改进性维护两个方面。
4、什么是白盒测试法?什么是黑盒测试法?
答:白盒测试:所谓白盒测试就是在知道产品内部工作过程或程序内部结构和处理过程的前提下,检
验产品内部动作是否按照规格说明书的规定正常进行或按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按照预定要求正确工作的测试方法.因此白盒测试又称为结构测试或逻辑测试。
从覆盖源程序语句的详尽程度分析,大致有以下一些不同的覆盖标准:⑴语句覆盖;⑵判定覆盖;⑶条件覆盖;⑷判定/条件覆盖;⑸条件组合覆盖;⑹点覆盖;⑺边覆盖;⑻路径覆盖。黑盒测试:所谓黑盒测试是指在完全不考虑程序的内部结构和处理过程的前提下,在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接受输入数据产生正确的输出信息,并且保持外部信息的完整性.因此,又称为功能测试。特点:等价类划分、边界值分析、因果图、错误推测。
优点 1.基本上不用人管着,如果程序停止运行了一般就是被测试程序crash了 2.设计完测试例之后,下来的工作就是爽了,当然更苦闷的是确定crash原因 缺点 1.结果取决于测试例的设计,测试例的设计部分来势来源于经验,OUSPG的东西很值得借鉴
2.没有状态转换的概念,目前一些成功的例子基本上都是针对PDU来做的,还做不到针对被测试程序的状态转换来作
3.就没有状态概念的测试来说,寻找和确定造成程序crash的测试例是个麻烦事情,必须把周围可能的测试例单独确认一遍。而就有状态的测试来说,就更麻烦了,尤其不
是一个单独的testcase造成的问题。这些在堆的问题中表现的更为突出。
5、什么是集成测试?非渐增式和渐增式有什么区别?渐增式如何组装模块?
答:将模块组合起来成为一个完整的系统对其进行测试。非渐增式是将模块先进行单元测试然后组装
在一起进行测试。渐增式是逐个将未测试的模块组装到已经测试过的模块上去进行集成测试,每加入一个就测试一次。非渐增式需要桩模块和驱动模块、非渐增式开始可以并行测试、渐增式可以及时的发现接口错误,非渐增式很难发现接口发现错误、渐增式开始不能并行测试、渐增式测试比较彻底。渐增式组装模块有自顶向下和自底向上两种组装方式。
6、什么是确认测试?该阶段有那些工作?
答:调试的目的是发现错误的位置并改正错误。简单调试、演绎调试、递归调试、回溯调试。
7、面向对象方法学与传统方法学有何区别?
答:面向对象方法学注重的是软件的重用性,而传统的方法学则在这一问题解决上不理想。面向对象
方法学和传统的方法学在问题分析上的切入点不同。面向对象里面,系统是长出来的,传统的方法学里面,系统是放进去的。传统方法:⑴结构化开发方法,注重的是系统功能,自顶向下,从大到小的功能分解,从DFD到MSD,往往系统需求变化最大就是功能,一段较长的时间内,商业的流程可能已经发生了很大的变化,这样基于功能和过程的方法显然难以维护的,代码重用率可想而知,而商业过程中的数据可能变化不会很大,⑵信息工程法,注重的是数据,事件流->信息流,(资金流,物流)->数据流,数据的输入和转化输出,数据流程图,状态转化图,事件顺序图,过程依赖图,两者都是由事件驱动.面向的是问题,是为了要解决某一个具体问题,其观察事物的方法不是本体客体本身,而是对本体客体相互作用过程抽象,转化成逻辑模型。面向对象方法学:其切入点是客观世界的主体和客体,通过封装实现了信息交流的安全,抽象和继承使得事物的一完整表述和容易修改新的变化,聚合,关联反映事物间的相互作用和关系,通过关联类管理,这样把事物和事物间的关系分开.减少了复杂度,便于维护,大大提高了代码重用率。
8、软件开发模型有几种?各有什么特点? 软件生存周期模型:是描述软件开发过程中各种活动如何执行的模型。(模型:是为了理解事物而 对事物做出一种抽象,它忽略不必要的细节,它也是事物的一种抽象形式、一个规划、一个程式。)主要模型:①瀑布模型;②增量模型;③螺旋模型;④喷泉模型;⑤变换模型;⑥基于知识的模 型等
瀑布模型:①它提供了一个摸板,这个摸板使分析、设计、编码、测试和支持的方法可以在该摸 板下有一个共同的指导;②虽然有不少缺陷但比在软件开发中随意的状态要好得多。快速原型模型:①开发速度快,质量有保证。②对信息系统特别有效。
增量模型:①人员分配灵活,刚开始不用投入大量人力资源,当核心产品很受欢迎时,可增加人
力实现下一个增量。②当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径,这样就可以先发布部分功能给客户,对客户起到镇静剂的作用。③具有一定的市场。
螺旋模型:①对于大型系统及软件的开发,这种模型是一个很好的方法。开发者和客户能够较好
地对待和理解每一个演化级别上的风险。②对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;减少了过多测试或测试不足所带来的风险。
9、可行性研究:⑴系统流程图;⑵数据流程图;
系统流程图:系统流程图是概括地描绘物理系统的传统工具。基本思想是用图形符号以黑盒子形
式描绘组成系统的每个部件。其表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程。
数据流程图:简称DFD,是描述数据处理过程的工具。数据流图从数据传递和加工的角度,以图形的方式刻画数据流从输入到输出的移动变换过程,是一种功能模型。作用:它以图形的方式描绘数据在系统中流动和处理的过程,反映系统必须完成的逻辑功能。基本符号有四种:→,箭头,表示数据流;○,圆或椭圆,表示加工; =,双杠,表示数据存储;□,方框,表示数据的源点或终点。
可行性研究的任务:(1)经济可行性。确定待开发系统是否值得投资开发。(2)技术可行性。对待
开发的系统进行功能、性能和限制条件的分析,确定在现有资源的条件下技术风险有多大,系统是否能实现。(3)法律可行性。确认待开发系统可能会涉及的任何侵犯、妨碍、责任等问题。(4)抉择。对系统开发的不同方案进行比较评估。
10、什么是字据字典?其作用是什么?它有哪些条目?
字据字典:简称DD,就是用来定义数据流图中的各个成分具体含义的,它以一种准确的、无二义性 的说明方式为系统的分析、设计及维护提供了有关元素的一致的定义和详细的描述。
作 用:⑴为系统的分析设计及维护提供了有关元素的一致的定义和详细的描述.⑵为分析人员查找
数据流图中有关名字的详细定义而服务的.⑶它和数据流图共同构成了系统的逻辑模型,是需求规格说明书的主要组成部分.条 目:数据流、数据项、数据存储、基本加工。
11、需求分析的任务是什么? 答: 需求分析是指:开发人员要准确理解用户的要求,进行细致的调查分析,将用户非形式的需求陈 述转化为完整的需求定义,再由需求定义转换到相应的形式主义功能规约(需求规格说明)的过程。需求分析的主要任务:⑴正确地确定对系统综合要求,充分理解和表达用户的需求。⑵通过结构分
析的方法对系统进行分解,以确定软件系统的主要成分或软件系统的构成。⑶是对以上已进行的两项工作进行描述,以形成需求文档。⑷编写用户手册;⑸编写验收计划;⑹修正可行性研究阶段所制订的软件项目开发计划。
12、结构化分析方法:结构化分析方法就是用抽象模型的概念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止。
主要工具:数据流图、数据词典、结构化英语、判定表和判定树。3种模型:①数据模型、②功能模型和③行为模型。
验证软件需求:⑴一致性;⑵完整性;⑶现实性;⑷有效性;
结构化分析方法步骤: ①了解当前系统的工作流程,获得当前系统的物理模型。②抽象出当前系 统的逻辑模型。③建立上标系统的逻辑模型。④作进一步补充和优化。
结构化程序设计基本要点:⑴采用自顶向下、逐步求精的程序设计方法;⑵使用三种基本程序控 制结构构造程序(①顺序方式;②选择方式;③循环方式;)。⑶主程序员组的组织形式。
13、总体设计过程由两个主要阶段组成:①系统设计阶段,确定系统的具体实现方案;②结构设计阶段,确定软件结构。
模块:软件系统的层次结构正是模块化的具体体现。将整个软件划分成若干单独命名和可编址的部分,称之为模块。模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集 成起来构成一个整体,可以完成指定的功能满足用户的需求。模块是构成程序的基本构件。
模块化的根据:把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。这就是模块化的根据。
14、衡量模块独立性的两个标准是什么?它们各表示什么含义? 两个定性的度量标准:耦合与内聚性。
耦合:是模块之间的相对独立性(互相连接的紧密程度)的度量。模块之间的连接越紧密,联系越多,耦合性就越高,而其模块独立性就越弱。按耦合度从低到高依次有7种耦合方式:①非直接耦
合(独立运行);②数据耦合(用参数表传递简单数据);③标记耦合(传递数据结构或者一部分);④控制耦合(传递的信息包括控制模块的信息);⑤外部耦合(模块与软件之外的环境有关);⑥公共耦合(多个模块引用同一全局的数据区);⑦内容耦合(访问内部数据,代码重叠或者多个入口)。
内聚:是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。一个模块内部各个元素
之间的联系越紧密,则它的内聚性就越高。按内聚度从低到高依次有7种内聚种类: ①偶然内聚(模块完成的多个任务,任务之间的关系松散);②逻辑内聚(模块完成逻辑相关的一组任务);③瞬时内聚(模块的所有任务必须在同一时间间隔内执行);④过程内聚(模块的处理元素相关而且按照特定的次序执行);⑤通信内聚(模块的所有元素集中在一个数据结构区域上);⑥顺序内聚(模块的处理元素相关,必须顺序执行);⑦功能内聚(模块完成单一的功能,各个部分协调工作,而且不可缺少)
耦合和内聚的关系:一般说来,在系统中各模块的内聚越大,则模块间的耦合越小。但这种关系并不
是绝对的。耦合小使得模块间尽可能相对独立,从而各模块可以单独开发和维护。内聚大使得模块的可理解性和维护性大大增强。因此,在模块的分解中应尽量减少模块的耦合,力求增加模块的内聚。
15、Jackson方法的步骤:(1)实体动作分析:从问题的描述中,提取软件系统要产生和运用的实体,以及
现实世界作用于实体上的动作。(2)实体结构分析:把作用于实体的动作或由实体执行的动作,按时间发生的先后次序排序,构成进程,并用一个层状的Jackson结构图表示。(3)定义初始模型:把实体和动作表示成一个进程模型,定
义模型与现实世界的联系。(4)功能描述:说明与已定义的动作相对应的功能,为已定义的动作加入功能函数。(5)决定系统时间特性:对进程加入时间因素,对进程调度特性进行评价和说明。(6)实现:设计组成系统的硬件和软件,实现系统的原型。
16、测试阶段的信息流:这个阶段的输入信息有两类:(1)软件配置,包括需求说明书、设计说明书和源 程序清单等;
(2)测试配置,包括测试计划和测试方案。
自顶向下集成:从主控制模块开始,沿着程序的控制
层次向下移动,逐渐把各个模块结合起来。在把附属于主控制模块的那些模块组装到程序结构中去时,或者使用深度优先的策略,或者使用宽度优先的策略。
深度优先的结合方法先组装在软件结构的一条主控制通路上的所有模块。选择一条主控制通路取决于应用的特点,并且有很大任意
性。而宽度优先的结合方法是沿软件结构水平地移动,把处于同一个控制层次上的所有模块组装起来。
集成测试的策略:当使用渐增方式把模块结合到程序中去时,有自顶向下和自底向上两种集成策略。
17、决定软件可维护性的因素:⑴可理解性;⑵可测试性;⑶可修改性;⑷可移植性;⑸可重用性;
软件维护:是指在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程.软件维护 是软件生命周期的最后一个阶段,也是持续时间最长代价最大的一个阶段。软件的可维护性可以定义为:维护人员理解,改正和改动软件的难易程度。
18、对象:是对现实世界实体的正确抽象,它是由描述内部状态表示静态属性的数据,以及可以对这些数 据施加的操作,封装在一起所构成的统一体。对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间的联系。
对象的特点:①以数据为中心;②对象是主动的;③实现了数据封装;④本质上具有并行性;⑤模块 工程规模:此系统中应包含接受模块和信息处理与输出模块。可能的解决方案及其评价 从三方面研究每种解决方法的可行性:
(1).技术可行性 使用现在的技术完全可以实现该系统
(2).经济可行性 这个系统的开发成本不高,节省的经济资源以及经济消息能够超过该系统的开发成本(3).操作可行性 该教学事务管理系统在校院的各个办公室都可以实现,操作人员为在校师生,所以不存在技术、能力问题。推荐行动方针 通过从技术,经济,可操作三方面的研究,分析的出结论,此系统是可行的。16.构成E-R图的基本要素是实体型、属性和联系,其表示方法为:
· 实体型(Entity):用矩形表示,矩形框内写明实体名;比如学生张三丰、学生李寻欢都是实体。如果是弱实体的话,在矩形外面再套实线矩形。
· 属性(Attribute):用椭圆形表示,并用无向边将其与相应的实体连接起来;比如学生的姓名、学号、性别、都是属性。如果是多值属性的话,再椭圆形外面再套实线椭圆。如果是派生属性则用虚线椭圆表示。
· 联系(Relationship):用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1 : 1,1 : n或m : n)。比如老师给学生授课存在授课关系,学生选课存在选课关系。如果是弱实体的联系则在菱形外面再套菱形。(猜考画图,或25题)第一章 软件工程介绍 软件的特性
1. 软件是设计开发的,而不是传统意义上的生产制造的。2. 软件不会“磨损”。3. 虽然整个工业向着基于构件的构造模式发展,然而大多数软件扔是根据实际的顾客需
求定制的。 计算机软件的七大分类:系统软件、应用软件、工程/科学软件、嵌入式软件、产品线软件、Web应用软件、人工智能软件。
遗留系统发生系统演化的原因:1.软件需要修改其适应性,从而满足新的计算环境或者技术的需求;2.软件必须根据新的业务需求进行升级;3.软件必须扩展以具有与更多现代系统和数据库的协作能力;4.软件架构必须进行改建以适应多样化的网络环境。 软件神话:管理者,用户,从业者 软件的定义:程序、数据和文档。
软件工程的目的就是为开发高质量的软件产品提供一个工程框架。第二章 过程综述
软件工程的三个要素:工具,过程,方法。
通用软件过程框架:沟通,策划,建模,构建,部署。
能力成熟度模型:第0级,不完全级;第1级,已执行级;第2级,已管理级;第三级,已定义级;第4级,已定量管理级;第5级,优化级。
第三章 过程模型
简述惯例框架包含的主要活动:沟通、策划、建模、构建、部署。 简述瀑布模型所包含的主要框架活动:策划、建模、构建、部署。
简述瀑布模型在实际运用中所面临的问题(缺点):“瀑布模型是由文档驱动的”这个事实也是它的一个主要缺点。实际项目很少按照该模型给出的顺序进行;用户常常难以清楚地给出所有需求;用户必须有耐心,等到系统开发完成。
演化过程模型产生的背景:业务和产品需求经常变化、严格的交付时间、了解了核心产品和系统需求后没有定义产品或系统扩展的细节问题
简述基于原型开发模型的软件开发过程:在用户不能给出完整、准确的需求说明,或者开发者不能确定算法的有效性、操作系统的适应性或人机交互的形式等许多情况下,可以根据用户的一组基本需求,快速建造一个原型(可运行的软件),然后进行评估,进一步精化、调整原型,使其满足用户的要求,也使开发者对将要做的事情有更好的理解。沟通-》快速策划-》建模快速设计-》构建模型-》部署交付品及反馈
简述原型开发的缺点:1.为了使原型尽快的工作,没有考虑软件的总体质量和长期的可
维护性。2.为了演示,可能采用不合适的操作系统、编程语言、效率低的算法,这些不理想的选择成了系统的组成部分。3.开发过程不便于管理 统一过程的三个特点:用例驱动,以架构为核心,迭代并增量
简述统一过程(UP)的5个阶段的主要内容:起始,细化,构建,转换和生产 螺旋模型强调了其他模型均忽略了的(风险分析)
横切关注点的定义:一个信用卡处理系统的核心关注点是借贷/存入处理,而系统级的关注点则是日志、事务完整性、授权、安全及性能问题等许多关注点,我们叫它横切关注点 第四章 敏捷视角下的过程
软件工程的敏捷理念强调4个关键问题:1.具有控制力的自我组织团队对所开展工作的重要性;2.团队成员之间、开
发参与者与客户之间的交流与合作;3.对“变更代表机遇”的认识;4.以及强调快速软件交付以让客户满意。
简述极限编程(XP)过程模型所包含的4个主要框架活动:策划,设计,编码,测试 第五章 系统工程
计算机系统的6个系统要素:软件,硬件,人员,数据库,文档,规程
Hatley-Pirbhai建模方法:用户界面,输入,系统功能和控制,输出,维护和自检 系统环境图(System Context Diagram)的表示方法(实例)第六章 需求工程
需求工程的过程:起始,导出,精化,协商,规格说明,确认和管理
在项目(起始)阶段,软件工程师会询问一些似乎与项目无直接关系的问题,目的是对
问题、方案需求方、期望方案的本质、客户和开发人员之间初步的交流和合作的效果建立基本的谅解。
为什么导出需求这么困难:范围问题,理解问题,易变问题。 用例的定义:讲述了能表达主题场景的故事:最终用户如何在一特定环境下和系统交互
在需求工程的导出阶段,三个主要的需求收集活动是:主持人会议、QFD和用户场景开发 第七章 构建分析模型
分析模型在系统描述和设计模型之间建立桥梁。
分析模型必须实现的目标:1。描述客户需要什么;2。为软件设计奠定基础;3。定义在软件完成后可以被确认的一组需求。
分析模型的所有元素都可以直接跟踪到设计模型。
分析模型的4个元素:基于场景的元素,面向信息流的元素,基于类的元素,行为元素 UML泳道图是活动图的一种变形,可以让建模人员表示用例所描述的活动流,同时指示哪个参与者或分析类对活动矩形所描述的活动负责。
UML状态图为每个类表现活动状态和导致这些活动状态变化的事件 UML顺序图说明事件如何引发一个对象到另一个对象的转移
简述CRC建模的内容:CRC提供了一个简单方法,可以识别和组织与系统或产品需求相关的类。 使用UML类图来举例说明组合和聚合之间的区别 使用UML类图举例说明关联和依赖之间的区别
系统分析的经验原则(1)系统开发是面向客户的,应从客户的角度考虑。
(2)诸如系统开发生命周期之类的产品更新换代机构应该在所有的信息系统开发项目中建立起来。
(3)信息系统开发的过程并不是一个顺序的过程,它允许步骤的重叠和倒转等。(4)如果系统的成功可能性受到很大限制时,应取消整个项目。(5)文档材料是系统开发生命周期中重要的可递交成果,应加以重视 第八章 设计工程
简述良好设计的三个特征:1。设计必须实现所有包含在分析模型中的明确需求,而且必须满足客户期望的所有隐含需求;2。对于那些生成代码的人和那些进行测试以及随后维护软件的人而言,设计必须是可读的、可理解的指南;3。设计必须提供软件的全貌,从实现的角度说明数据域、功能域和行为域。 设计模型包含的四种元素是什么:数据/类设计、体系结构设计、接口设计、构建级设计
软件体系结构的定义:软件的整体结构和这种结构为系统提供概念上完整性的方式 模块应该详细说明且精心设计以求在某个模块中包含的信息不被不需要这些信息的其他模块访问
重构的定义:是使用这样一种方式改变软件系统的过程:不改变代码设计的外部行为而是改进其内部结构
举例说明逐步求精
框架和设计模式之间的区别:框架能使应用程序的开发简单,价格低廉,但是开发框架不
是一件容易的事。它是一个需要领域和设计经验的反复过程。设计模式可以简化这个过程,因为它提供了对过去经验的抽象。框架能高度抽象同一领域内的问题,进而降低开发难度和强度。因此,在软件开发过程中把框架和模式配合起来使用,可以极大地提高软件的重用。框架是软件,而设计模式是软件的知识 第九章 进行体系结构设计
简述软件体系结构的作用:1。软件体系结构的表示有助于对计算机系统开发感兴趣的各方(共利益者)开发交流;2。体系结构突出了早期设计决策,这些决策对随后的所有软件工程工作有深远的影响,同时对系统作为一个可运行实体的最后成功有重要作用。3。体系结构“构建了一个相对小的,易于理解的模型,该模型描述了系统如何构成以及其构建如何一起工作”
软件体系结构的典型分类:以数据为中心,数据流体系结构,调用和返回体系结构,面向对象体系结构,层次体系结构(以图例来说明)
体系结构环境图所包含的要素,以图例来说明 第十二章 软件测试策略
简述软件测试策略的螺旋模型:单元测试,集成测试,确认测试,系统测试
简述单元测试中驱动程序和桩程序的作用:驱动程序只是一个“主程序”,它接收测试用例数据,将这些数据传递给(将要测试的)构件并打印相关结果。桩程序的作用是替换那些从属于将要测试的构件或被其调用的构件。 集成测试的两种方式:一步到位和增量集成
试以图例描述自顶向下集成测试方法的过程 简述确认测试的两种主要方法:α测试和β测试 系统测试的主要方法:恢复测试,安全测试,压力测试,性能测试 三种调试方法:蛮力法,回溯法,原因排除法 第十三章 测试战术
好的测试所具有的特性:1。好的测试具有较高的发现错误的可能性;2。好的测试是不冗余的;3。好的测试应该是“最佳品种”4。好的测试应该既不太简单也不太复杂。
黑盒测试的定义:所谓黑盒测试是指在完全不考虑程序的内部结构和处理过程的前提下,在程序接
口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接受输入数据产生正确的输出信息,并且保持外部信息的完整性.因此,又称为功能测试。
白盒测试的定义:所谓白盒测试就是在知道产品内部工作过程或程序内部结构和处理过程的前提下, 检验产品内部动作是否按照规格说明书的规定正常进行或按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按照预定要求正确工作的测试方法.因此白盒测试又称为结构测试或逻辑测试。 基本路径测试的环复杂度计算方法和独立路径集合的识别V(G)=E-N+2;其中E为流图 的边数,N为流图的结点数。 控制结构测试的3个主要方法:条件测试,数据流测试,循环测试 黑盒测试的两个主要方法:等价类划分,边界值分析 类级可应用的测试方法:随机测试,划分测试 面向对象的类级划分测试的主要方法:基于状态划分,基于属性划分,基于类别划分
以图例说明从行为模型导出测试用例 第十四章 产品度量
软件度量为产品内部属性的质量评估提供了一种(定量)方法,从而可以是软件工程师在产品开发出来之前进行质量评估
软件测量的5个主要活动:公式化,收集,分析,解释,反馈
面向目标的软件测量(GQM范型)的内容:1。确定特定过程活动的明确的测量目标或将要评估的产品特性;2。定义一组必须回答的问题以达到目标;3。确定被良好公式化的度量以帮助回答这些问题
有效软件度量的属性1。简单的和可计算的2。在经验上和直觉上有说服力3。一致的和客观的4。单位和量纲的使用是一致的。5。编程语言的独立性6。高质量反馈的有效机制