1、详细设计 详细设计就是要在总体设计阶段成果的基础上,考虑如何实现定义的软件系统,直到对系统中的每个模块给出足够详细的过程描述。 结构化程序设计技术是进行详细设计的逻辑基础。它采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。 结构化程序设计的三种基本控制结构是顺序、选择、循环。 详细设计的工具有程序流程图、盒图、PAD图、判定表、判定树和PDL语言等。 程序复杂性度量 程序复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少、开发周期的长短和软件内部潜伏错误的多少等。 1) 代码行度量法 度量程序的复杂性,最简单的方法就是统计程序的源代码行数。该
2、方法的基本考虑是统计一个程序模块的源代码行数目,并以源代码行数作为程序复杂性的度量。 Lipow及其他研究者得出一个结论:对于少于100个语句的小程序,源代码行数与出错率是线性相关的。随着程序的增大,出错率以非线性方式增长。 2) McCabe度量法 McCabe度量法是一种基于程序控制流的复杂性度量方法。McCabe定义的程序复杂性度量值又称环路复杂性,它是基于程序图中环路的个数。 如果把程序流程图中每个处理符号都退化成一个结点,原来联结不同处理符号的流线变成连接不同结点的有向弧,这样得到的有向图就叫做程序图。 计算有向图G的环路复杂性的公式: 其中,V(G)是有向图G中
3、的环路个数,m是图G中有向弧个数,n是图G中结点个数。 详细设计说明书 1. 引言 2. 总体设计。软件结构 3. 程序描述。逐个模块描述其功能、性能、输入、输出、算法等 例题 软件详细设计工具可分为3类,即图形工具、设计语言和表格工具。图形工具中,(A)简单而应用广泛。(B)表示法中,每个处理过程用一个盒子表示,盒子可以嵌套。(C)可以纵横延伸,图形的空间效果好。 (D)是一种设计和描述程序的语言,它是一种面向(E)的语言。 供选答案: A-C:①NS图 ②流程图 ③HIPO图 ④PAD图 D:①C ②PDL ③PROLOG ④Pascal E:①人 ②
4、机器 ③数据结构 ④对象 答案:A.② B.① C.④ D.② E.① [2001年统考]下面是两个程序流程图,试分别用N-S图和PAD图表示之,并计算它们的McCabe复杂性度量。 答案: PAD图略 McCabe复杂性度量都为3。(7-6+2) 下图是使用BASIC语言编写的一个打印A、B、C三数中最小者的程序流程图。其中出现了6个GOTO语句,1个向前,5个向后,程序可读性很差。 if (A
5、 140;
120 if (A 6、码使用的语言,特别是写程序的风格和途径也对程序质量有相当大的影响。
程序设计语言的分类、选择
大量实践表明,高级程序设计语言较汇编语言有很多优点。
程序设计风格包括四个方面:
源程序文档化、数据说明、语句结构和输入/输出方法
例题
从下列叙述中选出5条符合程序设计风格指导原则的叙述。
①嵌套的重数应加以限制
②尽量多使用临时变量
③不滥用语言特色
④不用可以省略的括号
⑤使用有意义的变量名
⑥应尽可能把程序编得短些
⑦把常见的局部优化工作留给编译程序去做
⑧注解越少越好
⑨程序的格式应有助于读者理解程序
⑩应尽可能多用GOTO语句
答案:①、③、⑤ 7、⑦、⑨是正确的
从下列关于模块化程序设计的叙述中选出5条正确的叙述。
①程序设计比较方便,但比较难以维护
②便于由多个人分工编制大型程序
③软件的功能便于扩充
④程序易于理解,也便于排错
⑤在主存储器能够容纳得下的前提下,应使模块尽可能大,以便减少模块的个数
⑥模块之间的接口叫做数据文件
⑦只要模块之间的接口关系不变,各模块内部实现细节的修改将不会影响别的模块
⑧模块间的单向调用关系叫做模块的层次结构
⑨模块越小,模块化的优点越明显。一般来说,模块的大小都在10行以下
答案:②、③、④、⑦、⑧是正确的
测试
软件测试的目的就是软件投入生产性运行之前,尽可能多 8、地发现软件中的错误。目前软件测试仍然是保证软件质量的关键步骤。
软件测试在软件生命周期中横跨两个阶段:编码和测试。
Grenford J.Myers就软件测试目的提出以下观点:
1) 测试是程序的执行过程,目的在于发现错误。
2) 一个好的测试用例在于能发现至今未发现的错误
3) 一个成功的测试是发现了至今未发现的错误的测试
软件测试的原则
1) 应当尽早地不断地进行软件测试
2) 测试用例应由测试输入数据和与之相对应的预期输出结果这两部分组成
3) 程序员应避免检查自己的程序
4) 在设计测试用例时,应当包括合理的输入条件和不合理的输入条件
5) 充分注意测试中的群集现 9、象
6) 严格执行测试计划,排除测试的随意性
7) 应当对每个测试结果做全面检查
8) 妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便
常分单元测试/模块测试,集成测试,确认测试和系统测试。关系重大的还可做平行运行。
设计测试方案是测试阶段的关键技术问题,基本目标是选用最少量的高效测试数据,做到尽可能完善的测试,从而尽可能多地发现软件中的问题。
动态测试两个基本方法
黑盒测试/功能测试
等价类划分
边界值分析
错误推测法
因果图法
白盒测试/结构测试
语句覆盖:使得每一可执行语句至少执行一次
判定覆盖:使得程序中每个判断的取真分支 10、和取假分支至少执行一次
条件覆盖:使得程序中每个判断的每个条件的可能取值至少执行一次
判定-条件覆盖:使得判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果至少执行一次
条件组合覆盖:使得每个判断的所有可能的条件取值组合至少执行一次
路径覆盖:覆盖程序中所有可能的路径
设计测试方案的实用策略是,用黑盒法设计基本的测试方案,再用白盒法补充一些必要的测试方案。
应该认识到,软件测试不仅仅指利用计算机进行的测试,还包括人工进行的测试(例如,代码审查)。两种测试途径各有优缺点,互相补充,缺一不可。
因果图方法最终生成的就是判定表。它适合于检查程序输入条 11、件的各种组合情况。
a.
例题
[2000年统考]设要对一个自动饮料售货机软件进行黑盒测试。该软件的规格说明如下:
有一个处理单价为1元5角钱的盒装饮料的自动售货机软件。若投入1元5角硬币,按下“橙汁”、“啤酒”或“红茶”按钮,相应的饮料就送出来。若投入的是2元硬币,在送出饮料的同时退还5角硬币。
1)(5分)试利用因果图法,建立该软件的因果图;
2)(5分)设计测试该软件的全部测试用例。
因果图(加入了两个中间结点11和12。11表示已投币,12表示已按钮)
测试用例
1
2
3
4
5
6
7
8
9
10
11
输入
投入1元5角硬币 12、
(1)
1
1
1
1
0
0
0
0
0
0
0
投入2元硬币
(2)
0
0
0
0
1
1
1
1
0
0
0
按”橙汁”按钮
(3)
1
0
0
0
1
0
0
0
1
0
0
按”啤酒”按钮
(4)
0
1
0
0
0
1
0
0
0
1
0
按”红茶”按钮
(5)
0
0
1
0
0
0
1
0
0
0
1
中间结点
已投币
(11)
1
1
1
1
1
1
1
1
0
0
0
已按钮
(12)
1
1
1
0
13、1
1
1
0
1
1
1
输出
退还5角硬币
(21)
0
0
0
0
1
1
1
0
0
0
0
送出橙汁饮料
(22)
1
0
0
0
1
0
0
0
0
0
0
送出啤酒饮料
(23)
0
1
0
0
0
1
0
0
0
0
0
送出红茶饮料
(24)
0
0
1
0
0
0
1
0
0
0
0
软件测试是软件质量保证的主要手段之一,测试的费用已超过(A)的30%以上。因此,提高测试的有效性十分重要。“高产”的测试是指(B)。根据国家标准GB8566-88《计算机 14、软件开发规范》的规定,软件的开发和维护划分为8个阶段,其中,单元测试是在(C)阶段完成的,集成测试的计划是在(D)阶段制定的,确认测试的计划是在(E)阶段制定的。
供选择的答案:
A:①软件开发费用 ②软件维护费用
③软件开发和维护费用 ④软件研制费用
⑤软件生存期全部
B:①用适量的测试用例运行程序,证明被测程序正确无误
②用适量的测试用例运行程序,证明被测程序符合相应的要求
③用少量的测试用例运行程序,发现被测程序尽可能多的错误
④用少量的测试用例运行程序,纠正被测程序尽可能多的错误
C-E:①可行性研究和计划 ②需求分析
③概要设计 ④详细设 15、计
⑤实现 ⑥集成测试
⑦确认测试 ⑧使用和维护
答案:A.① B.③ C.⑤ D.③ E.②
集成测试也叫做(A)或(B)。通常,在(C)的基础上,将所有模块按照设计要求组装成系统。子系统的集成测试特别称为(D),它所作的工作是要找出子系统和系统需求规格说明之间的(E)。需要考虑的问题是在把各个模块连接起来的时候,穿越模块接口的数据是否会(F);一个模块的功能是否会对另一个模块的功能产生不利的影响;各个(G)组合起来,能否达到预期要求的(H);(I)是否有问题;单个模块的误差累积起来是否会放大。
供选择的答案:
A-D:①单元测试 ②部件测试 16、 ③组装测试
④系统测试 ⑤确认测试 ⑥联合测试
E-I:①子功能 ②丢失 ③父功能
④局部数据结构 ⑤全局数据结构 ⑥不一致
⑦一致
答案:A.③ B.⑥ C.① D.② E.⑥ F.② G.① H.③ I.⑤
软件测试方法可分为黑盒测试和白盒测试两种。
黑盒测试法是通过分析程序的(A)来设计测试用例的方法。除了测试程序外,它还适用于对(B)阶段的软件文档进行测试。
白盒测试法是根据程序的(C)来设计测试用例的方法。除了测试程序外,它也适用于对(D)阶段的软件文档进行测试。
白盒法测试程序时常按照给定的覆盖条件选取测试用例。( 17、E)覆盖比(F)严格,它使得每个判定的每条分支至少经历一次。(G)覆盖既是判定覆盖,又是条件覆盖,但它并不保证使各种条件都能取到所有可能的值。(H)覆盖比其他条件都要严格,但它不能保证覆盖程序中的每一条路径。
单元测试一般以(I)为主,测试的依据是(J)。
供选择的答案:
A、C:①应用范围 ②内部逻辑 ③功能 ④输入数据
B、D:①编码 ②软件详细设计 ③软件总体设计 ④需求分析
E、F、G、H:①语句 ②判定 ③条件 ④判定/条件 ⑤多重条件 ⑥路径
I:①白盒法 ②黑盒法
J:①模块功能规格说明 ②系统模块结构图 ③系统需求规格说明
答案:A.③ B.④ C.② D. 18、② E.② F.① G.④ H.⑤ I.① J.①
从下列关于程序设计风格和软件测试的叙述中,选出5条正确的叙述
①用黑盒法测试时,测试用例是根据程序内部逻辑设计的。
②尽量用公共过程或子程序去代替重复的代码段。
③测试是为了验证该软件已正确地实现了用户的要求。
④对于连锁型分支结构,若有n个判定语句,则有2n条路径。
⑤尽量采用复合的条件测试,以避免嵌套的分支结构。
⑥GOTO语句概念简单,使用方便。在某些情况下,保留GOTO语句反能使写出的程序更加简洁。
⑦发现错误多的程序模块,残留在模块中的错误也多。
⑧黑盒测试方法中最有效的是因果图法。
⑨在做程序的单 19、元测试时,桩(存根)模块比驱动模块容易编写。
⑩程序效率的提高主要应通过选择高效的算法来实现。
答案:④、⑤、⑥、⑦、⑩
调试
软件调试是在进行了成功的测试之后才开始的工作。
调试活动由两部分组成:
1) 确定程序中可疑错误的确切性质和位置
2) 对程序(设计、编码)进行修改,排除这个错误
几种主要的调试方法:
强行排错
回溯法排错
归纳法排错
演绎法排错
测试和调试是软件测试阶段的两个关系极端密切的过程,它们通常交替进行。
测试中的可靠性分析
在软件开发的过程中,利用测试的统计数据,估算软件的可靠性以控制软件的质量是至关重要的。
推测错误的 20、产生频度
估算错误产生频度的一种方法是估算平均失效等待时间MTTF(Mean Time To Failure)。MTTF估算公式(Shooman模型)是:
其中,K是一个经验常数,美国一些统计数字表明,K的典型值是200;ET是测试之前程序中原有的故障总数;IT是程序长度(机器指令条数或简单汇编语句条数);t是测试(包括排错)的时间;EC(t)是在0-t期间内检出并排除的故障总数。
公式的基本假定是:
1)、单位(程序)长度中的故障数ET/IT近似为常数,它不因测试与排错而改变。统计数字表明,通常ET/IT值的变化范围在0.5*10-2—2*10-2之间。
2)、故障检出率正比于 21、程序中残留故障数,而MTTF与程序中残留故障数成正比。
3)、故障不可能完全检出,但一经检出立即得到改正。
可靠性累积曲线公式
例题
对一个长度为100,000条指令的程序进行测试,记录下来的数据如下:
.测试开始,发现错误个数为0;
.经过160小时的测试,累计改正100个错误,此时,MTTF=0.4小时;
.又经过160小时的测试,累计改正300个错误,此时,MTTF=2小时。
1) 估计程序中固有的错误总数。
2) 为使MTTF达到10小时,必须测试和调试这个程序多长时间?
3) 给出MTTF与测试时间t之间的函数关系
由Shooman公式
其中, 22、105,1=0.4,1=160,n1=100,2=2,2=320,n2=300
得
1) 解得程序中固有的错误总数=350,此外,K=1000。
2) 设MTTF=10,有
解得x=340(即为使MTTF达到10小时,需要改正340个错误)。由可靠性累积曲线,得
解得K1=0.01。代入
得t=(ln(35))/0.01=356h
因此求得为使MTTF=10,测试和调试该程序需要时间约为356小时。
3) MTTF与测试时间t之间的函数关系:
因为,则。代入Shooman公式:
维护
所谓软件维护就是在软件已经交付使用之后,为了改正错误或满 23、足新的需要而修改软件的过程。
软件工程学的主要目的就是提高软件的可维护性,降低维护的代价。软件可维护性,是指纠正软件系统出现的错误和缺陷,以及为满足新的要求进行修改、扩充或压缩的容易程度。
软件的可理解性、可测试性和可修改性是决定软件可维护性的基本因素。
软件维护通常包括四类活动:
1) 为了纠正使用过程中暴露出来的错误而进行的改正性维护;
2) 为了适应外部环境的变化而进行的适应性维护;
3) 为了改进原有的软件而进行的完善性维护;
4) 为了改进将来的可维护性和可靠性而进行的预防性维护。
在软件维护中,影响维护工作量的程序特性有以下6种:
a. 系统大小
b. 24、程序设计语言
c. 系统年龄
d. 数据库技术的应用
e. 先进的软件开发技术
f. 其他
维护有三种副作用:文档、代码、数据。
软件维护工作流程
1、 确认维护要求
2、 由维护组织管理员确认维护类型
可理解性:表明人们通过阅读源代码和相关文档,了解程序及其如何运行的容易程度。
可靠性:表明一个程序按照用户的要求和设计目标,在给定的一段时间内正确执行的概率。
可测试性:表明论证程序正确性的容易程度。
可修改性:表明程序容易修改的程度。
可移植性:表明程序转移到一个新的计算环境的可能性的大小,或者它表明程序可以容易地、有效地在各种各样的计算环境中运行的容易程度 25、
效率:表明一个程序能执行预定功能而又不浪费机器资源的程度。
可使用性:从用户观点出发,把可使用性定义为程序方便、实用及易于使用的程度。
各阶段结束标准
计划阶段
问题定义
关于规模和目标的报告书
可行性研究
可行性论证报告(系统的高层逻辑模型)
开发阶段
需求分析
需求规格说明书(系统的逻辑模型)
概要设计
概要设计说明书(系统层次图或结构图)
详细设计
详细设计说明书(各模块内部详细算法)
编码
源程序清单,单元测试方案与结果
测试
综合测试方案和结果
实施阶段
维护
完整准确的维护记录
软件管理
成本估算
代码行技术 26、
功能点技术
效益估计
系统效益包括经济效益和社会效益两部分。
货币的时间价值、纯收入、投资回收期、投资回收率
进度安排
进度安排是软件项目管理中的一项重要内容。管理复杂的工程项目非常困难,最好的办法是把它分解成一系列比较容易管理的子任务。但是分解后又容易只注意对各个子任务的管理,以致忽略了对工程总体情况的了解和管理。因此需要有某种工具既支持把项目分解成较小的子任务,又能帮助管理人员保持对工程总体情况的洞悉和管理。
1、甘特图
Gantt图能很形象地描绘任务分解情况,以及每个子任务(作业)的开始时间和结束时间,因此是进度计划和进度管理的有力工具,它具有直观简明和容易掌握 27、容易绘制的优点,但是Gantt图也有三个主要缺点:
1. 不能显式地描绘各项作业彼此间的依赖关系;
2. 进度计划的关键部分不明确,难于判定哪些部分应当是主攻和主控的对象;
3. 计划中有潜力的部分及潜力的大小不明确,往往造成潜力的浪费
当把一个工程项目分解成许多小任务,并且它们彼此间的依赖关系又比较复杂时,仅仅用Gantt图作为安排进度的工具是不够的,不仅难于作出既节省资源又保证进度的计划,而且还容易发生差错。
2、工程网络
工程网络是制订进度计划时另一种常用的图形工具,它同样能描绘任务分解情况以及每项作业的开始时间和结束时间。此外,它还显式地描绘各个作业彼此间的依赖关系。 28、因此,工程网络是系统分析和系统设计的强有力的工具。
涉及的几个概念:机动时间、关键路径
在制定进度计划时仔细考虑和利用工程网络中的机动时间,往往能够安排出既节省资源又不影响最终竣工时间的进度表。
人员组织
管理软件开发通常采用层次结构。
一般来说,程序设计小组的规模应该较小,视工程规模以2-8人为宜。
主程序员组用经验多、技术好、能力强的程序员作为主程序员。同时,利用人和计算机在事务性工作方面给主程序员提供充分支持,而且所有通信都通过一两个人进行。
软件项目的开发实践表明,软件开发各个阶段所需要的技术人员类型、层次和数量是不同的。软件项目的计划与分析阶段只需要少数人,主要是 29、系统分析员、从事软件系统论证和概要设计的软件高级工程师和项目高级管理人员。概要设计时增加一部分高级程序员,详细设计时,要增加软件工程师和程序员,在编码和测试阶段还要增加程序员、软件测试员。到测试阶段结束时,软件项目开发人员的数量达到顶峰。软件运行初期,参加软件维护的人员比较多,过早解散软件开发人员会给软件维护带来意想不到的困难。软件运行一段时间后,由于软件开发人员参与改正性维护,软件出错率会很快衰减,这时软件开发人员可以逐步撤出。如果系统不做适应性或完善性维护,需要留守的维护人员就不多了。
软件配置管理
Babich曾说过:“协调软件开发使得混乱减到最小的技术叫做配置管理。配置管 30、理是一种标识、组织和控制修改的技术,目的是使错误达到最小并最有效地提高生产率。”
软件配置管理(SCM,Software Configuration Management)应用于整个软件生存期。因为变更在任何时刻都可能发生,因此,软件配置管理活动的目标就是为了标识变更、控制变更、确保变更更正确地实现,并向其他相关的人报告变更。
基线是软件生存期中各开发阶段末尾的特定点,又称里程碑。由正式的技术评审而得到的软件配置协议和软件配置的正式文本组成基线。它的作用是把各阶段工作的划分更加明确化,使连续的工作在这些点上断开,以便检验和肯定阶段成果。
CMM(Capability Maturi 31、ty Model)软件机构能力成熟度模型
五个级别:初始级、可重复级、已定义级、已管理级、已优化级
软件复用
对建立软件目标系统而言,所谓复用(reuse),就是利用某些已开发的、对建立新软件系统有用的软件元素来生成新系统。这里所说的软件元素可以包括需求规格说明、设计过程、设计规格说明、程序代码、测试用例、度量等。对于新的软件开发项目而言,这些元素或者是构成新软件系统的构件,或者能在软件开发过程中发挥某种作用。通常,将这些软件元素称为可复用构件。
面向对象的软件工程
面向对象=对象+类+继承+通信
对象可以定义为系统中用来描述客观事物的一个实体,它是构成系统的 32、一个基本单位,由一组属性和一组对属性进行操作的服务组成。三个主要特点:自治性、封装性、通信性。
属性一般只能通过执行对象的操作来改变。
操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。
而所谓的消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。
把具有相同特征和行为的对象归结在一起就形成了类。类是某些对象的模板,抽象地描述了属于该类的全部对象的属性和操作。
属于某个类的对象叫做该类的实例。
如果某几个类之间具有共性的部分(信息结构和行为),将其抽取出来放在一个一般类中,而将各个类的特有的部分放在特殊类中分别描述 33、则可建立起特殊类对一般类的继承。
继承是软件开发中重用概念的核心,另外便于模块修改,同时继承可使模块简化,导致模块比较小容易理解。
Coad与Yourdon的方法(Object-oriented Analysis and Design,OOAD):分为OOA和OOD。
1. OOA
1) 形式地说明所面对的应用问题,最终成为软件系统基本构成的对象,还有系统所必须遵从的,由应用环境所决定的规则和约束。
2) 明确地规定构成系统的对象如何协同合作,完成指定的功能。
OOA要建立分析模型,有五个层次:类和对象层、属性层、服务层、结构层、主题层。允许两种结构:整体-部分,通用-特 34、殊。
通过OOA建立的系统模型是以概念为中心的,因此称为概念模型。这样的模型由一组相关的类组成。构造和评审OOA概念模型的顺序由5个层次组成,即类和对象层、属性层、服务层、结构层、主题层。这5个层次不是构成软件系统的层次,而是分析过程中的层次也可以说是问题的不同侧面。每个层次的工作都为系统的规格说明增加了一个组成部分。当5个层次的工作全部完成时,OOA的任务也就完成了。
2.OOD
OOD还是采用这样五个层次,但分别用在建立系统的四个组成成分上:问题论域、人机交互、数据管理、任务管理。OOD模型类似于构造蓝图,以最完整的形式全面地定义了如何用特定的实现技术建立起一个目标系统。在OOA模型 35、和OOD模型中使用了共同的表示法,这有助于从分析到设计的转换,并有助于在当前的设计和实现中维护OOA模型。与OOA模型一样,OOD模型也有5层结构,又被划分为四个部分:问题论域、人机交互、数据管理、任务管理。这些组成部分把实现技术隐藏起来,使之与系统的基本问题论域行为分离开。在OOA中,实际上只涉及到问题论域部分,其他3个部分是在OOD中加进来的。即,对于问题论域部分只是做进一步的细化,其它3个部分中将识别和定义新的类和对象。
OMT(Object Modeling Technique对象建模技术)以面向对象思想为基础,通过构造一组相关模型(对象模型、动态模型和功能模型)来获得关于问题的 36、全面认识(即问题的领域模型)。对象模型(object model)代表了系统的静态的、结构方面的特性。动态模型(dynamic model)代表了系统对象之间的时间的、行为的、控制方面的特性。功能模型(functional model)主要描述值与值之间的函数关系。
其中,对象模型是3个模型中最关键的模型,它的作用是描述系统的静态结构,包括构成系统的类和对象,它们的属性和操作,以及它们之间的关系。在OMT中,类与类之间的关系叫做关联。
要想对一个系统了解得比较清楚,首先应考察它的静态结构,即在某一时刻它的对象和这些对象之间相互关系的结构。然后,应考察在任何时刻对对象及其关系的改变。系统的这 37、些涉及时序和改变的状况,用动态模型来描述。动态模型着重于系统的控制逻辑。它包括两个图,一是状态图,一是事件追踪图。状态图是一个状态和事件的网络,侧重于描述每类对象的动态行为。事件追踪图侧重于说明发生于系统执行过程中的一个特定场景,是完成系统某个功能的一个事件序列。概括地讲,状态图叙述一个对象的个体行为,而事件追踪图则给出多个对象所表现出来的集体行为。
功能模型着重于系统内部数据的传送和处理。功能模型定义“做什么”,动态模型定义“何时做”,对象模型定义“对谁做”。功能模型表明,通过计算,从输入数据能得到什么样的输出数据,不考虑参加计算的数据按什么时序执行。功能模型由多个数据流图组成。
这三个 38、模型从不同角度对系统进行描述,分别抓住了系统的一个重要方面,组合起来构成了对系统的完整描述。OMT认为一个典型的软件过程是三个方面的合作:它的DS(对象模型)、它按时间顺序的操作(动态模型)和它所改变的值(功能模型)。每个模型都和其它模型的实体相关。对象模型指出事件要发生在什么方面,动态模型指出什么时候发生,功能模型则指出要发生什么。
对象模型、动态模型和功能模型都包含了同样的概念:数据、序列和操作,但它们描述了系统的不同方面,同时也互相引用。
OTM法已发展成支持整个的软件生命周期,由以下四个阶段组成:分析、系统设计和对象设计和实现。
Booch方法用到六种图形:类图、对象图、模块 39、图、进程图、交互作用图、状态迁移图。
类图和对象图,着重于类和对象的定义。其中,类图描绘类和类之间的关系。对象图表示具体的对象和在对象间传递的消息。
模块图和进程图,针对着软件系统的结构。类和对象被分配给具体的程序构件,模块图就是用来描绘这些程序构件的。由于许多面向对象系统包括可能在一组分布式处理器上执行的多个程序,进程图就使得设计者能在一个大系统中描绘过程如何被分配给特定的处理器。
状态迁移图和交互作用图,这两个文件主要用于动态地模拟事件的发生和它对系统状态的作用。状态迁移图用来说明每一类的状态空间,触发状态迁移的事件(从一个对象到另一个对象的单个消息叫作一个事件),以及在状态迁移时所 40、执行的操作。交互作用图用于追踪系统执行过程中的一个可能的场景,也就是几个对象在共同完成某一系统功能中所表现出来的交互关系。
Booch强调在OO设计中反复的处理和开发人员的创造性是最重要的。Booch认为软件开发是一个螺旋上升的过程。在这个螺旋上升的每个周期中,有以下几个步骤:发现类和对象;确定它们的含义;找出它们之间的相互关系;说明每一个界面及其实现类与对象。
例题
应用Coad和Yourdon方法构造和评审OOA概念模型时,应按如下的五个层次进行:
第一个层次是识别(A)。它们是对应用中的概念的抽象,可以从用户要求书或其它规格说明中找到。
第二个层次是识别(B)。它们是(A 41、所保存的信息,同时要给出各个(A)之间的实例连接。这些实例连接包括有1对1、1对多、多对多、多对1等联系。
第三个层次是识别(C)。它们是(A)可提供的操作,同时要根据需要的功能给出各个操作之间的消息连接。
第四个层次是建立(D)。有两种(D):整体与部分;泛化与特化。前者表明一种聚合关系,后者表明一种继承关系。
第五个层次是识别(E)。它相当于高层的模块或子系统。
供选答案:
A:①实体 ②规格说明 ③类与对象 ④过程抽象 ⑤功能抽象
B:①属性 ②数据项 ③服务 ④操作 ⑤事务
C:①属性 ②数据项 ③服务 ④数据抽象 ⑤实体联系
D:①框架 ②属性 ③结构 ④通信 ⑤连接
E:①层次 ②事件 ③状态 ④继承 ⑤主题
答案:A.③ B.① C.③ D.③ E.⑤
15






