一、多选题
1.在下面关于程序设计风格和软件测试的叙述中,选出4条正确的叙述。
A.功能性注释嵌在源程序体中,用以解释下面的程序语句怎么做。
B.对于批处理的输入和输出,不应按逻辑顺序,应按物理顺序要求组织输入数据。
C.对辅助存储的输入/输出,应当成块传送。
D.在使用等价类划分生成测试用例时,应选用输出等价类中的边界值作为代表值作为测试数据。
E.程序测试应对程序模块的所有独立的执行路径至少测试一次。
F.在程序调试时,找出错误的位置和性质比改正该错误更难。
G.对于嵌套型分支结构,若有n个判定语句,则有n+1条路径。
H.对于包含有多个数组元素的表达式,可引入临时变量以提高运算效率。
I.对于递归的问题应使用递归的过程,这样做可提高编程效率。
J.当验收测试通过,软件开发就完成了。

2.在下面关于标准和文档的叙述中,选出5条正确的叙述。
A.国家标准是由政府或国家级机构制定或批准,适用于全国的标准。这些标准都是强制性的,相关产品必须严格执行标准。
B.ISO9001是设计/开发、生产、安装和服务中的质量保证模式,ISO9000-3是使ISO9001适合于软件的质量保证指南。
C.软件工程标准化可提高软件的生产率。
D.软件质量保证体系是贯穿于整个软件生存期集成化过程体系,而不仅仅体现在最后产品的检验上。
E.ISO9000-3与具体的开发模式有关。它将软件全过程工序从管理角度、合同角度和工程角度划分为三大类。
F.软件测试计划始于需求分析阶段,完成于软件设计阶段。
G.任何一个文档都应是完整的、独立的,它应自成体系。
H.在新文档取代旧文档后,管理人员不应注销旧文档。
I.软件开发机构应保存一份完整的主文档,并允许开发人员可以保存主文档中的部分主文档,有自己的活动空间。
J.软件需求分析报告是给开发人员使用的,不是给其它人员,如维护人员,用户等使用的。



二、填空题

1.应用Coad和yourdon方法构造和评审OOA概念模型时,应按如下的五个层次进行:
�第一个层次是识别 。它们是对应用中的概念的抽象,可以从用户要求书或其它规格说明中找到。
�第二个层次是识别 。它们是 所保存的信息,同时要给出各个 之间的实例连接。这些实例连接包括有1对1、1对多、多对多、多对1等联系。
�第三个层次是识别 。它们是 可提供的操作,同时要根据需要的功能给出各个操作之间的消息连接。
�第四个层次是建立 。有两种 :整体与部分;泛化与特化。前者表明一种聚合关系,后者表明一种继承关系。
�第五个层次是识别 。它相当于高层的模块或子系统。

2.已经有许多软件质量度量的方法,使用得最广泛的是事后度量或验收度量。它包括正确性、可维护性、完整性和可使用性。Gilb给出了它们的定义和度量。
要求软件正确地执行所要求的功能,最一般的度量是每千代码行的差错数;
用于衡量软件在使用期间改错,移植或更新的容易程度。目前还没有直接度量它的方法,一般采用间接度量。
用于度量软件抗击对它的安全性攻击的能力。为了度量 ,需要定义两个子属性危险性和安全性。 是一个特定类型的攻击在一给定时间内发生的概率, 是排除特定类型攻击的概率。
是对“用户友好性”进行的量化的度量。

3.当前系统的 模型描述现行系统的实际业务处理过程,反映了现行系统具体 的现实。当前系统的 模型描述现行系统的功能结构、数据组织以及动态行为,反映了现行系统 的本质。
�目标系统是指待开发的新系统。根据计算机系统的特点,分析、比较目标系统和当前系统逻辑上的差别,确定目标系统的软件工作范围,采用自顶向下逐步分解的分析策略,确定目标系统的功能结构、数据组织以及动态行为,从而建立起目标系统的 模型。



三、简答题
1.下面给出一个求实函数方程Func(x)在自变量区间[a, b]中的全部实根的算法。首先阅读此由类C语言编写的程序,然后
�(1) 画出消去全部goto语句的在判定中没有复合逻辑条件的结构化程序的N-S图。
�(2) 计算该程序的McCabe复杂性度量。    
�在算法中,ab是区间[a, b]的两端点值;eps1与eps2是用户要求的求解精度。如果区间中点的函数值的绝对值小于eps1或新的小区间的长度小于eps2,就认为这个中点为根。

float BinRoot ( float a, float b, float eps1, float eps2 ) { 
   float low = a,  high = b;
   float flow = Func(low),  fhigh = Func(high);
   float mid,  fmid;
    label L1, L2, L3;               //标号说明,给定某些程序地址

   if ( flow * fhigh > 0.0 ) { BinRoot = 0;  goto L3; }       //无实根
L1:    mid = (low + high) / 2;  fmid = Func(mid);
    if ( abs ( fmid ) <= eps1 ) {
L2:    BinRoot = mid;  goto L3;
    }
    else if ( high - mid <= eps2 ) goto L2;
    else if ( flow * fmid > 0.0 ) { low = mid;  flow := fmid;  goto L1; }
     else { high := mid;  goto L1 };
L3:   
     }


2.“有一个处理单价为1元5角钱的盒装饮料的自动售货机软件。若投入1元5角硬币,按下“橙汁”、“啤酒”或“红茶”按钮,相应的饮料就送出来。若投入的是2元硬币,在送出饮料的同时退还5角硬币。”
�(1) 试利用因果图法,建立该软件的因果图;
�(2) 设计测试该软件的全部测试用例。


3.请回答下列有关软件维护方面的问题。
�(1) 什么是程序修改的副作用?
�(2) 程序修改的副作用有哪几种?试举例说明?