五、简答题1.层次图和层次方框图之间区别何在? P92①层次图描绘软件的层次结构,层次方框图描绘数据结构②层次图中方框代表一个功能模块,层次方框图方框代表数据的子集或数据元素③层次图中连线表示模块间调用关系,层次方框图连线表示组成关系。
2.2、软件设计过程中为什么要采用模块化设计方法?P85参考答案:(1)、采用模块化原理可以使软件结构清晰,不仅容易设计,也容易阅读和理解;(2)、模块化使软件容易测试和调试,因而有助于提高软件的可靠性;(3)、模块化可以提高软件的可修改性;(4)、模块化有助于开发过程的组织和管理;3.用某种软件复杂性度量算法来度量不同类型的程序时。
得出的度量值是否真正反映了它们的复杂性?如果对同类型的程序进行度量,其结果是否就比较有价值?参考答案:开发规模相同,但复杂性不同的软件,花费的成本和时间会有很大的差异。
因此到目前为止,还没有一个软件复杂性度量的方法能够全面、系统地度量任一软件的复杂性,某一种度量方法只偏重于某一方面。
所以,用某种软件复杂性来度量不同类型的程序,所得到的度量值不一定真正反映它们的复杂性。
但对同一类里的程序,按某种视点来度量它们的复杂性,其结果还是比较有价值的。
4.数据流图的作用是什么?它有哪些基本成分?参考答案:数据流图可以用来抽象地表示系统或软件。
它从信息传递和加工的角度.以图形的方式刻画数据流从输入到输出的移动变换过程,同时可以按自顶向下、逐步分解的方法表示内容不断增加的数据流和功能细节。
因此,数据流图既提供了功能建模的机制.也提供了信息流建模的机制,从而可以建立起系统或软件的功能模型。
基本成分有:数据原点/终点数据处理数据流数据存储5.常用的估算软件规模的方法有哪些?试比较这些方法的优缺点。
代码行技术的优点,容易计算,缺点是太片面,因为源程序只是软件配置的很少一部分,不同语言实现同一个软件所需的代码行数不同;功能点数的特点:与编程语言无关,但是判断信息域复杂性级别和技术因素的影响程度时,存在着相当大的主观因素。
6.CMM的全称是什么?其基本思想是什么?为什么要对CMM进行分级?P321其基本思想是:软件开发和维护过程中的问题是由于管理软件过程的方法不当引起的,即使是应用新的软件技术,也不会自动提高软件的生产率和质量。
能力成熟度模型有助于软件开发机构建立一个有规律的、成熟的软件过程。
改进后的软件过程将有利于开发出高质量的软件,使更多的软件项目免受时间和费用超支之苦。
·······························3分对于任何软件开发机构的软件过程的改进都是在完成一个又一个小的改进的基础之上不断进行的渐进过程,而不是一蹴而就的彻底革命。
CMM将软件过程从无序到有序的进化过程分为5个等级,用于测量软件机构的软件过程成熟度和评价其软件过程能力什么是软件配置管理?答:软件配置管理,简称SCM(Software Configuration Management),是在软件的整个生命周期内管理变化的一组活动。
具体地讲,这组活动包括:①标志变化,②控制辩化,③确保适当地实现变化,④向需要指导这类信息的人报告变化。
软件配置管理技术可以使软件变更所产生的错误达到最小并最有效地提高生产率。
7.什么是基线?你是如何理解基线的?P319基线:已经通过正式复审的规格说明或中间产品,它可以作为进一步开发的基础,并且只有通过正式的变化控制过程才能改变它。
基线是通过了正式复审的软件配置项。
一旦软件配置变成基线,那么,对于软件配置的改变,必须使用特定的、正式的过程来评估、实现和验证每个变化。
基线除了包含软件配置之外,还有可能包含软件工具。
8.什么是面向对象的方法学?它有哪些优点?P193面向对象的方法就是模拟人类认识世界解决问题的思维习惯开发软件的方法,这种方法认为:OO=对象+类+继承+对象之间的通讯。
························1分OO方法有如下四个方面的要点:①客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以有比较简单的对象以某种方式组合而成。
②把所有对象都划分成各种对象类,每个类定义一组数据(静态属性,状态信息,类实例专有数据)和一组方法(施加于对象上的操作,类实例所共有的)。
③按照子类与父类的关系,把若干个类组成一个层次结构的系统。
子类继承父类的方法和属性,同时可以重载某些方法。
④对象之间仅能通过传递消息相互联系··················2分优点:①与人类习惯的思维方法一致,②稳定性好,③可重用性好,④较易开发大型软件产品,⑤可维护性好。
································2分六、分析题1.试说明下面的两个程序段的功能是什么?可否用另一些等效的程序段来代替它,以提高其可读性。
(1)A=A+BB=A-BA=A-B(2)for(i=0;j<n;i++)for(j=0;j<n;j++)V[i][j]=(i/j)*(j*i)假设几种可能的条件是:T1: A>3 F1:A<=3 T2: B=1 F2: B≠1 T3: A=1 F3:A≠1 T4:M>1 F4:M<=13.下面是一段用Seidel迭代法求解线性方程组的程序。
其中A[n,n]是方程组的系数矩阵。
B[n]是方程组的右端项,X[n]是方程组的解向量。
eps是控制迭代精度的较小实数。
imax是控制迭代的最大次数。
flag是标志,值为0时表示迭代不收敛,值为l时表示迭代收敛。
for(k=0;k<n;k++)X[k]=0.0;X[n-1]=1.0;for(i=1;i<imax;i++){flag=1;for(j=0;j<n;j++){s=B[j];for(k=0;k<n;k++){if(j==k)s += X[k];s=s-A[j,k]*X[k];}if(abs(X[j]-s) > (abs(s) + 1.0)*epsflag=0;X[j]=s;}if(flag==1)break;}画出该C伪码的程序流程图,N-S图,程序流图,并计算程序的McCabe环形复杂度。
4.阅读下列关于软件可靠性方面的叙述,回答问题1和问题2。
软件的可靠度可定义为:在假定输入和硬件不发生错误的前提下,对于给定的环境和给定的输入,在指定的时间内能完成规定任务的概率。
某软件中心的评测部为了评估已开发实现的应用软件ASP的可靠性,决定采用软件可靠性的错误播种模型来进行测试和评估。
评测部在评估时,作了下列3个假设:(l)在测试前,单位长度的故障个数E T/I T为一常数,此常数基本上落在一个固定的范围内。
其中I T为被测程序的长度(即机器指令条数),E T为被测程序中故障总数。
(2)失效率正比于软件中剩余的(潜伏的)故障数,平均无敌障时间MTTF(Mean Time To Failure)与单位长度的剩余故障个数成反比,即MTTF=1/(K·εr)。
其中εr为单位长度剩余故障个数,K的典型值现取为200。
(3)测试中发现的错误都得到了及时改正,在测试过程中没有引入新的错误。
评测部对ASP 软件人为地植入了10个错误,即N s =10,在开始测试的一小段时间内,发现了160个固有故障,即n=160,又发现了植入的故障2个,即n s =2,被测程序ASP 的长度(即机器指令条数)为100000。
问题1:用故障播种(植入)的数学模型,估算出被测程序ASP 的固有故障的个数N 的值。
如果通过测试一段时间后,发现的固有错误个数为E C =795时,请估算此程序的平均无故障时间MTTF 的值。
问题2:若要求把此MTTF 提高4倍,应至少再排除多少个固有错误?请简要地列出有关计算式。
800102160=⨯==s s N n n N()()100100000/795800*2001)/)((1*1=-=-*==T C T r I E E K K MTTF ε 由()()500100000/800*2001=-x 得: 799=x所以应该在排除:799-795=4个错误。
5. 对于包含10000条机器指令的程序进行一个月集成测试后,总共改正了15个错误,此时MTTF=10h ;经过两个月的测试后,总共改正了25个错误(第二个月改正了10个错误),MTTF=15h 。
请问:(1)在开始测试之前,软件中潜藏着多少个错误?(2)为了达到MTTF=100h ,还应该改正多少个错误?程序中还残留多少个错误?6. 在测试一个长度为24000条指令的程序时,第一个月内由甲、乙两人各自独立地测试这个程序。
经过一个月后,甲发现并改正了20个错误,使MTTF 达到10h 。
与此同时,乙发现了24个错误,其中6个错误甲也发现了。
以后甲一个人继续独立测试这个程序。
请问:(1)刚开始测试这个程序时,程序中总共潜藏有多少个错误?(2)为了使MTTF 达到60h ,需要再改正多少个错误?此时程序中还残留有多少个错误?7. 根据下列程序流程图画出相应得N-S 图和P A BQ Start While P A Until Q B End七、名词解释 1、系统流程图系统流程图是描绘物理系统的传统工具,用图形符号来表示系统中的各个元素,表达了系统中各个元素之间的信息流动的情况。
2.数据字典答:数据字典(Data Dictionary ,简称DD)就是对数据流图中包含的所有元素的定义的集合。