收藏 分享(赏)

程序编码习题.doc

上传人:精品资料 文档编号:10880971 上传时间:2020-01-17 格式:DOC 页数:12 大小:98.50KB
下载 相关 举报
程序编码习题.doc_第1页
第1页 / 共12页
程序编码习题.doc_第2页
第2页 / 共12页
程序编码习题.doc_第3页
第3页 / 共12页
程序编码习题.doc_第4页
第4页 / 共12页
程序编码习题.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、程序编码习题【4-1】从下列关于模块化程序设计的叙述中选出 5 条正确的叙述。 程序设计比较方便,但比较难以维护。 便于由多个人分工编制大型程序。 软件的功能便于扩充。 程序易于理解,也便于排错。 在主存储器能够容纳得下的前提下,应使模块尽可能大,以便减少模块的个数。 模块之间的接口叫做数据文件。 只要模块之间的接口关系不变,各模块内部实现细节的修改将不会影响别的模块。 模块间的单向调用关系叫做模块的层次结构。 模块越小,模块化的优点越明显。一般来说,模块的大小都在 10 行以下。【4-2】结构化程序设计有时被错误地称为 “无 GOTO 语句”的程序设计。请说明为什么会出现这样的说法,并讨论环

2、绕着这个问题的一些争论。【4-3】从下面关于程序编制的叙述中,选出三条正确的叙述。 在编制程序之前,首先必须仔细阅读给定的程序说明书。然后,必须如实地依照说明书编写程序。说明书中常会有含糊不清或难以理解的地方。程序员在作业时应该对这些地方作出适当的解释。 在着手编制程序时,重要的是采用既能使程序正确地按设计说明书进行处理,又易于出错的编写方法。 在编制程序时,首先应该对程序的结构充分考虑,不要急于开始编码,而要象写软件文档那样,很好地琢磨程序具有什么样的功能,这些功能如何安排等等。 考虑到以后的程序变更,为程序编写完整的说明书是一项很重要的工作。只要有了完整的程序说明书,即使程序的编写形式难以

3、让他人看懂也没有什么关系。 编制程序时不可缺少的条件是,程序的输入和输出数据的格式都应确定。其他各项规定都是附带的,无足轻重。 作为一个好的程序,不仅处理速度要快,而且易读易修改等等也都是重要的条件。为了能得到这样的程序,不仅要熟悉程序设计语言的语法,还要注意采用适当的规程和单纯的表现方法,注意使整个程序的结构简洁。【4-7】下面给出一个求实函数方程 F(x)在自变量区间 a, b 中的全部实根的算法。首先阅读此程序,然后画出消去全部 goto 语句的结构化程序流程图。在算法中,a 与 b 是区间a, b的两端点值;eps1 与 eps2 是用户要求的求解精度。如果区间中点的函数值的绝对值小于

4、 eps1 或新的小区间的长度小于 eps2,就认为这个中点为根。float BinRoot ( float a, float b, float eps1, float eps2 ) float low= a, high = b, mid, fmid;float flow = Func(low), fhigh := Func(high);纷乱如麻的程序流程label L1, L2, L3; /标号说明,给定某些程序地址if ( flow * fhigh 0.0 ) BinRoot = 0; goto L3; /无实根L1: mid = (low + high) / 2; fmid = Func

5、(mid);if ( abs ( fmid ) 0.0 ) low = mid; flow = fmid; goto L1; else high = mid; goto L1 ;L3: 习题解答【4-1】正确的叙述有、 、。如果程序结构的模块化满足评价的标准(高内聚,低耦合) ,这样的结构是容易编码,容易测试,容易理解,容易修改,容易维护的。程序的功能也容易扩充。特别适合于大型程序编制时,多人分工合作,协同完成任务的情形。因为是采用自顶向下,逐层分解来划分模块结构的,所以模块之间的调用关系是分层次的模块结构,就叫做模块的层次结构。模块之间的信息传递叫做模块的接口,模块之间传递信息可以通过参数表

6、、全局变量或全局数据结构、数据文件、专门的通信模块,不是专指数据文件。划分模块时,模块大小要适中。模块太大,控制路径数目多、涉及的范围广、变量的数目多、总体复杂性高,可理解性、可修改性、可靠性就会变差。模块太小,模块个数增大,调用的系统开销就会增大。所以要有一个权衡。【4-2】早在 1963 年,针对当时流行的 ALGOL 语言,Peter Naur 指出,在程序中大量地,没有节制地使用 GOTO 语句,会使程序结构变得非常混乱。但是很多人还不太注意这一问题。以致许多人写出来的程序仍然是纷乱如麻的。1965 年,E.W.Dijkstra 在一次会议上提出,应当把 GOTO 语句从高级语言中取消

7、。并指出,程序的质量与程序中包含的 GOTO 语句的数量成反比。在这种思想的影响下,当时新开发的几种高级程序设计语言,例如 LISP、ISWIM 、BLISS 等,都把 GOTO 语句取消了。1966 年,Bohm 与 Jacopini 证明了任何单入口单出口的没有“死循环”的程序都能由三种最基本的控制结构构造出来。这三种基本控制结构就是“顺序结构” 、 “选择IFTHEN ELSE 结构” 、 “重复 DOWHILE 或 DOUNTIL 结构” 。1968 年,Dijkstra 在写给(美国计算机协会通讯)杂志编辑部的信中再次建议从一切高级语言中取消 GOTO 语句,只使用三种基本控制结构编

8、写程序。他的建议引起了激烈的争论。争论集中在如何看待 GOTO 语句的问题上。赞成取消 GOTO 语句的一方认为,GOTO 语句对程序清晰性有很大破坏作用,凡是使用 GOTO 语句多的程序,其控制流时而 GOTO 向前,时而 GOTO 向后,常使程序变得很难理解,从而增加查错和维护的困难,降低程序的可维护性。但以 D.E.Knuth 为代表的另一方认为,GOTO 语句虽然存在着破坏程序清晰性的问题,但不应完全禁止。因为 GOTO 语句概念简单,使用方便,在某些情况下,保留 GOTO 语句反能使写出的程序更加简洁,并且 GOTO 语句可直接得到硬件指令的支持。经过争论,人们认识到,不是简单地去掉

9、 GOTO 语句的问题,而是要创立一种新的程序设计思想、方法和风格,以显著提高软件生产率和软件质量,降低软件维护的成本。70 年代初 N.Wirth 在设计 Pascal 语言时对 GOTO 语句的处理可被当做对 GOTO 语句争论的结论。在 Pascal 语言中设置了支持上述三种基本控制结构的语句;另一方面,GOTO 语句仍然保留在该语言中。不过,N.Wirth 解释说,通常使用所提供的几种基本控制结构已经足够,习惯于这样做的人不会感到 GOTO 语句的必要。也就是说,在一般情况下,可以完全不使用 GOTO 语句。如果在特殊情况下,由于特定的要求,偶然使用 GOTO语句能解决问题,那也未尝不

10、可,只是不应大量使用罢了。事实上,大量采用 GOTO 语句实现控制路径,会使程序路径变得复杂而且混乱,从而使程序变得不易阅读,给程序的测试和维护造成困难,还会增加出错的机会,降低程序的可靠性。因此要控制 GOTO 语句的使用。但有时完全不用 GOTO 语句进行程序编码,比用 GOTO 语句编出的程序可读性差。例如,在查找结束时,文件访问结束时,出现错误情况要从循环中转出时,使用布尔变量和条件结构来实现就不如用 GOTO 语句来得简洁易懂。【4-3】、。编制程序的过程实际上是根据设计的结果,用某种机器能够识别的程序设计语言,将设计翻译成机器代码的过程。因此,必须如实地按照设计说明书编写程序。至于

11、设计说明书中含糊不清的地方,应当在编程时与分析人员或设计人员协商,对这些地方做出适当的解释。另外,考虑到将来的程序修改,必须为程序编写完整的说明书,同时程序必须编写得容易让别人看得懂,这样程序才容易修改,修改时不容易出错,而且容易验证修改后得结果。还有,编写程序的人不须重新考虑程序要完成什么功能,这些已经在软件分析与设计过程中充分考虑过了。【4-7】结构化的程序流程图:low=a; high=b; flow=Func(low); fhigh=Func(high);flow*fhigh 0.0 ?Fmid=(low+high)/2; fmid=Func(mid); end=1;Tend = 1?

12、T| fmid | eps1 ?high-mid eps2 ?flow*fmid 0.0 ?FFFFTTT end = 0; retval =mid;retval = 0;返回 retval; 结束软件测试复习要求1. 了解软件测试的目的和原则。2. 了解软件错误的分类。3. 了解软件测试的过程和策略。4. 了解软件测试用例设计的方法,掌握逻辑覆盖、基本路径测试、因果图等测试用例设计方法。5. 了解程序静态测试的方法。习题【5-1】从供选择的答案中选出应填入下列 ( )中的字句。软件测试的目的是( A ) 。为了提高测试的效率,应该( B ) 。使用白盒测试方法时,确定测试数据应根据( C )

13、和指定的覆盖标准。与设计测试数据无关的文档是( D ) 。软件的集成测试工作最好由( E )承担,以提高集成测试的效果。供选择的答案:A. 评价软件的质量 发现软件的错误 找出软件中的所有错误 证明软件是正确的B. 随机地选取测试数据 取一切可能的输入数据作为测试数据 在完成编码以后制定软件的测试计划 选择发现错误的可能性大的数据作为测试数据C. 程序的内部逻辑 程序的复杂程度 使用说明书 程序的功能D. 该软件的设计人员 程序的复杂程度 源程序 项目开发计划E. 该软件的设计人员 该软件开发组的负责人 该软件的编程人员 不属于该软件开发组的软件设计人员【5-2】请从供选择的答案中选出应填入下

14、列( )中的字句。程序的三种基本控制结构是( A ) 。它们的共同点是( B ) 。结构化程序设计的一种基本方法是( C ) 。软件测试的目的是( D ) 。软件调试的目的是( E ) 。供选择的答案:A. 过程,子程序,分程序 顺序,条件,循环high=mid; low=mid; flow=fmid; 递归,堆栈,队列 调用,返回,转移B. 不能嵌套使用 只能用来写简单的程序 已经用硬件实现 只有一个入口和一个出口C. 筛选法 递归法 归纳法 逐步求精法D. 证明程序中没有错误 发现程序中的错误 测量程序的动态特性 检查程序中的语法错误E. 找出错误所在并改正之 排除存在错误的可能性 对错误

15、性质进行分类 统计出错的次数 【5-3】从下列关于软件测试的叙述中,选出 5 条正确的叙述。(1) 用黑盒法测试时,测试用例是根据程序内部逻辑设计的。(2) 尽量用公共过程或子程序去代替重复的代码段。(3) 测试是为了验证该软件已正确地实现了用户的要求。(4) 对于连锁型分支结构,若有 n 个判定语句,则有 2n 条路径。(5) 尽量采用复合的条件测试,以避免嵌套的分支结构。(6) GOTO 语句概念简单,使用方便,在某些情况下,保留 GOTO 语句反能使写出的程序更加简洁。(7) 发现错误多的程序模块,残留在模块中的错误也多。(8) 黑盒测试方法中最有效的是因果图法。(9) 在做程序的单元测

16、试时,桩(存根)模块比驱动模块容易编写。(10) 程序效率的提高主要应通过选择高效的算法来实现。【5-4】从供选择的答案中选出同下列关于软件测试的各条叙述关系最密切的字句。(1) 对可靠性要求很高的软件,例如操作系统,由第三者对源代码进行逐行检查。(2) 已有的软件被改版时,由于受到变更的影响,改版前正常的功能可能发生异常,性能也可能下降。因此,对变更的软件进行测试是必要的。(3) 在意识到被测试模块的内部结构或算法的情况下进行测试。(4) 为了确认用户的需求,先做出系统的主要部分,提交给用户试用。(5) 在测试具有层次结构的大型软件时,有一种方法是从上层模块开始,由上到下进行测试。此时,有必

17、要用一些模块替代尚未测试过的下层模块。供选择的答案:A E: 仿真器 代码审查 模拟器 桩 驱动器 域测试 黑盒测试 原型 白盒测试 退化测试【5-5】对小的程序进行穷举测试是可能的,用穷举测试能否保证程序是百分之百正确呢?【5-6】在任何情况下单元测试都是可能的吗?都是需要的吗?【5-7】从供选择的答案中选出应填入下面有关软件测试的叙述的( )内的正确答案。软件测试方法可分为黑盒测试法和白盒测试法两种。黑盒测试法是通过分析程序的( A )来设计测试用例的方法。除了测试程序外,它还适用于对( B )阶段的软件文档进行测试。白盒测试法是根据程序的( C )来设计测试用例的方法。除了测试程序外,它

18、也适用于对( D )阶段的软件文档进行测试。白盒法测试程序时常按照给定的覆盖条件选取测试用例。 ( E )覆盖比( F )覆盖严格,它使得每一个判定的每一条分支至少经历一次。 ( G )覆盖既是判定覆盖,又是条件覆盖,但它并不保证使各种条件都能取到所有可能的值。 ( H )覆盖比其他条件都要严格,但它不能保证覆盖程序中的每一条路径。单元测试一般以( I )为主,测试的依据是( J ) 。供选择的答案:A, C: 应用范围 内部逻辑 功能 输入数据B, D: 编码 软件详细设计 软件总体设计 需求分析E, F, G, H: 语句 判定 条件 判定/条件 多重条件 路径I: 白盒法 黑盒法J: 模

19、块功能规格说明 系统模块结构图 系统需求规格说明【5-8】从供选择的答案中选出应该填入下列关于软件测试的叙述的( )内的正确答案。软件测试中常用的静态分析方法是( A )和( B ) 。 ( B )用于检查模块或子程序间的调用是否正确。分析方法(白盒方法)中常用的方法是( C )方法。非分析方法(黑盒方法)中常用的方法是( D )方法和( E )方法。 ( E )方法根据输出对输入的依赖关系设计测试用例。供选择的答案:A B: 引用分析 算法分析 可靠性分析 效率分析 接口分析 操作分析C E: 路径测试 等价类 因果图 归纳测试 综合测试 追踪 深度优先 调试 相对图习题解答【5-1】A.

20、B. C. D. E. 软件测试的目的是软件中的错误。因为不可能把所有可能的输入数据都拿来测试(时间花费不起) ,为了提高测试的效率,应该选择发现错误的可能性大的数据作为测试数据。使用白盒测试方法时,确定测试数据应根据程序的内部逻辑和指定的覆盖标准,可以不考虑程序的功能。与设计测试数据无关的文档是项目开发计划。软件的集成测试工作最好由不属于该软件开发组的软件设计人员承担,以提高集成测试的效果。【5-2】A. B. C. D. E. 1966 年,Bohm 与 Jacopini 提出任何单入口单出口的没有“死循环”的程序都能由三种最基本的控制结构构造出来。这三种基本控制结构就是“顺序结构” 、

21、“选择IFTHEN ELSE 结构” 、 “重复 DOWHILE 或 DOUNTIL 结构” 。 它们的共同点是只有一个入口和一个出口。E.W.Dijkstra 提出了程序要实现结构化的主张,并将这一类程序设计称为结构化程序设计。这种方法的一个重要原则就是采用自顶向下、逐步求精的方法编写程序。N.Wirth 曾做过如下说明:“我们对付一个复杂问题的最重要的方法就是抽象。 因此,对于一个复杂的问题,不要急于马上用计算机指令、数字和逻辑符号来表示它,而应当先用较自然的抽象的语句来表示,从而得到抽象的程序。抽象程序对抽象的数据类型进行某些特定的运算,并用一些合适的记号(可以是自然语言)来表示。下一步

22、对抽象程序再做分解,进入下一个抽象的层次。这样的细化过程一直进行下去,直到程序能被计算机接受为止。此时的程序已经是用某种高级语言或机器指令书写的了。 ”软件调试则是在进行了成功的测试之后才开始的工作。它与软件测试不同,软件测试的目的是尽可能多地发现软件中的错误,但进一步诊断和改正程序中潜在的错误,则是调试的任务。调试活动由两部分组成: 确定程序中可疑错误的确切性质和位置。 对程序(设计,编码)进行修改,排除这个错误。【5-3】正确的叙述有(4) 、(5)、(6)、(7)、 (10) 。黑盒测试主要是根据程序的有关功能规格说明和覆盖准则来设计测试用例,进行测试的,不是根据程序的内部逻辑来设计测试

23、用例,这是白盒测试做的事情。在所有黑盒测试方法中,最有效的不是因果图法,而是边界值分析方法。测试的目的是尽可能多地发现软件中的错误,其附带的收获才是验证该软件已正确地实现了用户的要求。测试的一条重要原则是:发现错误多的程序模块,残留在模块中的错误也多。软件可靠性模型(Shooman)就是依据这个原则建立它的公式的。对于连锁型分支结构,若有 n 个判定语句,则有 2n 条路径。因此,随着 n 的增大,路径数增长非常快。单元测试时,因为桩模块要模拟子模块的功能,这不是一件容易的事情,而驱动模块只是控制被测模块的执行,所以桩模块的编写比驱动模块的编写要难得多。在程序设计风格方面,如果重复的代码段没有

24、明显的功能,不可以抽取出来形成独立的公共过程或子程序,只有在这些代码段表现出独立的功能时,才可把它们抽取出来形成独立的公共过程或子程序。另外,程序效率的提高主要应通过选择高效的算法或使用高效的语言编译器来实现。GOTO 语句概念简单,使用方便,在某些情况下,保留 GOTO 语句反能使写出的程序更加简洁,这句话是正确的。【5-4】(1) (2) (3) (4) (5) (1) 对可靠性要求很高的软件,由第三者对源代码进行逐行检查,这是代码审查。(2) 软件变更时可能发生退化现象:原来正常的功能可能发生异常,性能也可能下降。因此,对变更的软件要进行退化测试。(3) 基于被测试模块的内部结构或算法设

25、计测试用例进行测试,这是白盒测试。(4) 为了确认用户的需求,先做出系统的原型,提交给用户试用。(5) 自顶向下对具有层次结构的大型软件进行集成测试时,需要设计一些虚拟模块来替代尚未测试过的下层模块,这些模块叫做桩模块。【5-5】对小程序进行穷举测试,不见得能保证程序百分之百正确。所谓穷举测试是拿所有可能的输入数据来作为测试用例(黑盒测试) ,或覆盖程序中所有可能的路径(白盒测试) 。对于小程序来说,实际上并不能真正作到穷举测试。例如前面讲过,一个小程序 P 只有两个输入 X 和 Y 及输出 Z,在字长为 32 位的计算机上运行。如果 X、Y 只取整数,考虑把所有的 X、Y 值都做为测试数据,

26、按黑盒方法进行穷举测试,这样做可能采用的测试数据组(Xi,Yi) ,基数(radix)i 的最大可能数目为:2 322322 64。如果程序 P 测试一组X、Y 数据需要 1 毫秒,而且假定一天工作 24 小时,一年工作 365 天,要完成 264 组测试,需要 5 亿年。【5-6】单元测试又称模块测试,是针对软件设计的最小单位程序模块,进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。单元测试是在编码阶段完成的,每编写出一个程序模块,就开始做这个模块的单元测试,所以只要采用模块化方法开发软件

27、,单元测试都是必需的。它可由编写程序的人来完成。因为它需要根据程序的内部结构设计测试用例,对于那些不了解程序内部细节的人,这种测试无法进行。【5-7】A. B. C. D. E. F. G. H. I. J. 软件测试方法可分为黑盒测试法和白盒测试法两种。黑盒测试法是基于程序的功能来设计测试用例的方法。除了测试程序外,它还适用于对需求分析阶段的软件文档进行测试。白盒测试法是根据程序的内部逻辑来设计测试用例的方法。除了测试程序外,它也适用于对软件详细设计阶段的软件文档进行测试。白盒法测试程序时常按照给定的覆盖条件选取测试用例。判定覆盖比语句覆盖严格,它使得每一个判定的每一条分支至少经历一次。判定

28、/条件覆盖既是判定覆盖,又是条件覆盖,但它并不保证使各种条件都能取到所有可能的值。多重条件覆盖,也叫组合条件覆盖,比其他条件都要严格,但它不能保证覆盖程序中的每一条路径。单元测试一般以白盒法为主,测试的依据是系统的模块功能规格说明。【5-8】A. B. C. D. E. 软件测试中常用的静态分析方法是引用分析和接口分析。接口分析用于检查模块或子程序间的调用是否正确。分析方法(白盒方法)中常用的方法是路径测试方法。非分析方法(黑盒方法)中常用的方法是等价类(划分)方法和因果图方法。因果图方法根据输出对输入的依赖关系设计测试用例。面向对象技术复习要求1. 了解面向对象的概念2. 了解用面向对象方法

29、构造软件的开发过程3. 了解面向对象分析方法4. 了解面向对象设计方法习题【6-1】 什么叫面向对象?面向对象方法的特点是什么?为什么要用面向对象方法开发软件?【6-2】什么是“对象”?识别对象时将潜在对象分成 7 类,试给出这 7 类对象的名称,并举例说明。【6-3】什么是“类”? “类 ”与传统的数据类型有什么关系?有什么区别?【6-6】面向对象开发方法与面向数据流的结构化开发方法有什么不同?使用面向对象开发方法的优点在什么地方?【6-12】在类的设计中需要遵循的方针是什么?三个主要的设计准则:抽象、信息隐蔽和模块化如何才能作到?习题解答【6-1】关于“面向对象”,有许多不同的看法。 Co

30、ad 和 Yourdon 给出了一个定义:“面向对象 = 对象 + 类 + 继承 + 消息通信”。如果一个软件系统是使用这样 4 个概念设计和实现的,则认为这个软件系统是面向对象的。面向对象方法的特点是: 方法的唯一性,即方法是对软件开发过程所有阶段进行综合考虑而得到的。 从生存期的一个阶段到下一个阶段的高度连续性,即生存期后一阶段的成果只是在前一阶段成果的补充和修改。 把面向对象分析(OOA)、面向对象设计(OOD)和面向对象程序设计(OOP)集成到生存期的相应阶段。使用面向对象方法开发软件的好处是: 开发方法的唯一性,开发阶段的高度连续性,表示方式的一致性; 问题空间实体的自然表示,减轻了

31、设计者的负担,在设计系统之初不必考虑一个很完整的解决方案。 建立稳定的系统结构,可促进复用性,易于维护,易于修改,可合理利用共同性,减少复杂性。【6-2】对象的定义: 对象是面向对象开发模式的基本成分,是现实世界中个体或事物的抽象表示。 每个对象可由一组属性和它可以执行的一组操作来定义。可能的潜在对象有 7 类: 外部实体:它们产生或接受为目标系统所使用的信息。如各种物理设备、使用人员、其它相关的子系统。 事物:问题的信息域所涉及的概念实体。如各种报告、显示、文字、信号、规格说明等。 事件:系统运行时发生的并需要系统记忆的事件。如状态转换、物理运动等。 角色:与系统有交互的各种人员所扮演的角色

32、。如经理、工程师、销售人员等。 场所或位置:建立系统整体环境或问题上下文的场所、位置。如基于计算机的系统的安装场所等。 组织机构:与应用有关的组织机构。如组织, 部门等。 结构:定义由一组成分对象组成的聚合对象,或在极端情况下,定义对象的相关类。如传感器、四轮驱动车、计算机等。【6-3】把具有相同特征和行为的对象归在一起就形成了类。类成为某些对象的模板,抽象地描述了属于该类的全部对象的属性和操作。属于某个类的对象叫做该类的实例。对象的状态则包含在它的实例变量,即实例的属性中。类定义了各个实例所共有的结构,类的每一个实例都可以使用类中定义的操作。实例的当前状态是由实例所执行的操作定义的。 类,就

33、它是一个数据值的聚合的意义上来看,与 Pascal 中的记录或 C 中的结构类似,但又有差别。类扩展了通常的记录语义,可提供各种级别的可访问性。也就是说,记录的某些成份可能是不可访问的,而这些成份对于本记录型来说具有可访问性。类不同于记录,因为它们包括了操作的定义,这些操作与类中声明的数据值有相同的地位。【6-6】结构化开发方法是使用最广泛、历史最长的过程化开发方法。结构化开发方法产生过程的抽象,这些抽象把软件视为处理流,定义构成一系列步骤的算法,每一步骤都是带有预定义输入和特定输出的一个过程,把这些步骤串联在一起可产生合理的稳定的贯通于整个程序的控制流。这将最终导致一个很简单的具有静态结构的

34、体系结构。在结构化开发方法中,数据结构是应算法步骤的要求而开发的。数据结构贯穿于过程,提供过程需要传送给它的操作的信息。系统的状态是一组全局变量,这组全局变量保持了状态的值,把它们从一个过程传送到另一个过程。结构化开发方法是一种成熟的应用开发过程。对这种方法已经存在许多支持。然而,在大型系统的开发上和在面向用户系统的构造上存在一些问题。改进大型系统开发的技术主要集中在开发数据抽象。日益增多的考虑是使用抽象数据类型,把过程化系统开发过程包括到数据驱动的方法中。随着大型系统的开发,接踵而来的问题就是要把过程抽象与数据抽象方法组合起来,这种需要导致了面向对象开发方法的诞生。面向对象开发方法是我们分解

35、问题所使用方法演化的结果。在结构化开发方法中过程抽象是优先的,而面向对象开发方法中优先的是实体,即问题论域的对象。在面向对象开发方法中,把标识和模型化问题论域中的主要实体做为系统开发的起点,主要考虑对象的行为而不是必须执行的一系列动作。面向对象系统中的对象是数据抽象与过程抽象的一个混合体。表示这些实体的数据抽象是面向对象设计过程的主要产品,系统的状态保存在各个数据抽象的核心所定义的数据存储中。控制流被分成块,并被包括在各个在数据抽象上的各个操作里面。不像在结构化开发方法里那样,把数据从一个过程传送到另一个过程,而是控制流从一个数据抽象被传送到另一个数据抽象。完成的系统体系结构更复杂但也更灵活。

36、在块中分离的控制流允许把复杂的动作视为局部的相互影响。【6-12】在设计类时需要遵循的方针是: 信息隐蔽:通过信息隐蔽可保护类的存储表示不被其它类的实例直接存取。 消息限制:该类实例的用户应当只能使用界面提供的操作。 狭窄界面:只有对其它类的实例是必要的操作才放到界面上。 强内聚:模块内部各个部分之间应有较强的关系,它们不能分别标识。 弱耦合:一个单独模块应尽量不依赖于其它模块。 显式信息传递:两个类之间的交互应当仅涉及显式信息传递。 派生类当做派生类型:每个派生类应该当做基类的特殊化来开发,而基类所具有的公共界面成为派生类的共有界面的一个子集。 抽象类:某些语言提供了一个类,用它做为继承结构

37、的开始点,所有用户定义的类都直接或间接以这个类为基类。为了在类的设计中做到抽象、信息隐蔽和模块化: 以类作为系统的基本模块单元,通过一般化特殊化关系和整体部分关系,搭建整个系统的类层次结构,实现数据抽象和过程抽象; 将数据和相关的操作封装在类内部,建立共有、私有和子类型等存取级别,将数据表示定义成为类的私有成员,实现信息隐蔽。 通过建立类属性(类模板),将某些有可复用要求的类设计成在数据类型上通用的可复用的软件构件,这样有助于实现模块化。软件维护在软件交付使用后修改软件的过程称为软件维护。软件维护一般不包括重大的体系结构的改变,变更的实现方法一般是修改已有的系统构件以及在必要的地方添加新构件到

38、系统中。软件维护的分类 改正性维护:修改软件缺陷。 适应性维护:适应变更的操作环境(硬件、操作系统平台、其他支持软件) 。 增强性维护:系统需求改变(机构因素、业务改变)软件再工程是试图增加当前系统(或称遗留系统)的总体质量、提高可维护性的工程。软件再工程过程中的活动主要包括以下几个方面: 文档重构(redocument) 结构重组( restructuring) 逆向工程 (reverse engineering) 再工程(reengineering)【7-6】改错性维护与“排错 ”是否是一回事?为什么?【7-7】从下列叙述中选出 5 条与提高软件的可移植性有关的叙述。 把程序中与计算机硬件

39、特性有关的部分集成在一起。 选择时间效率和空间效率高的算法。 使用结构化的程序设计方法。 尽量用高级语言编写程序中对效率要求不高的部分。 尽可能减少注释。 采用表格控制方式。 文档资料详尽、正确。 在有虚拟存储器的计算机系统上开发软件。 减少程序中对文件的读写次数。 充分利用宿主计算机的硬件特性。【7-6】改错性维护与“排错 (调试)”不是一个概念。调试是作为测试的后继工作而出现的,是当测试发现软件中的错误后,进一步诊断和改正程序中潜在的错误的活动。而改正性维护是指在软件交付使用后,由于开发时测试的不彻底、不完全,必然会有一部分隐藏的错误被带到运行阶段来,这些隐藏下来的错误在某些特定的使用环境

40、下就会暴露出来。为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用所进行的诊断和改正错误的过程。调试在程序编码阶段、测试阶段、运行和维护阶段都可以发挥作用,它实际上是一种工具或手段。在软件交付运行之后,用户实际充当了测试员的角色,一旦发现软件运行中的错误或缺陷,就会将问题报告通报软件销售商,申请软件维护。其后软件维护人员可以利用调试手段来诊断和改正软件中存在的错误。这时可能涉及的范围不只包括程序,还有文档和数据,不仅可能修改程序代码,而且可能需要修改设计。甚至需求。所以改正性维护是在更大范围中做工作。【7-7】正确的叙述有 、 、。为了提高软件的可移植性,应当尽可能用高级语言编写

41、源程序代码。对于与硬件或操作系统有关的部分,或对效率要求很高的部分,应当为它们建立专门的模块,将用汇编语言写的程序封装在这些模块中,与程序中其它部分以事先约定的标准方式接口。这样,一旦硬件环境或操作系统环境发生变化,只需修改个别模块即可。采用表格控制方式,将所有的外部设备接口或与其它系统的接口,包括信息传递、驱动程序入口等都用表格控制,即使将来硬件、相关软件发生的变化,只需修改表格中的登记项,原来的程序一律可以不改。为了将来修改方便,不致于引入新的错误,相关文档一定要齐全、正确,程序中必须有必要的注释,并使用如结构化程序设计方法这样的良好的程序设计方法来编写程序。至于算法选择,与效率有关,与可移植性无关。其它叙述,如、,都不利于可移植性。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报