一、多选题

  1.
从下面关于程序设计风格和软件测试的叙述中,选出5条正确的叙述
 
A.�假如数据结构中常使用数组、指针等数据类型,则对它们必须采取随机访问,这样势必产生访问上的混乱
  B.�
尽量用公共过程或子程序去代替重复的代码段。
C.�
测试是为了验证该软件已正确地实现了用户的要求。
  D.�
对于连锁型分支结构,若有n个判定语句,则有28条路径。
  E.�
尽量采用复合的条件测试,以避免嵌套的分支结构。
  F.�
GOTO语句概念简单,使用方便,在某些情况下,保留GOTO语句反能使写出的程序更加简洁。
  G.�
发现错误多的程序模块,残留在模块中的错误也多。
  H.�
黑盒测试方法中最有效的是因果图法。
  I.�
在做程序的单元测试时,桩(存根)模块比驱动模块容易编写。
 
J
.程序效率的提高主要应通过选择高效的算法来实现。

 
2.在下面关于软件开发的项目管理的叙述中,选出5条正确的叙述
  A.软件开发过程中人力的配备必须保持恒定,避免中途加人。
 
B.为得到可靠的成本和工作量估算,应把估算推迟到项目的后期进行。在项目完成时可得到100%精确的估算结果。
 
C.在无规则和混乱的管理条件下,先进的工具和技术是发挥不出它应有的作用的。    
D.除了对语言的熟悉程度、工作年限、工资收入之外,良好的办公环境对保证软件人员高质量地完成任务起着很大的作用。
E.在软件开发过程中需要处理好软件产品质量与生产率之间的关系,因此可以在软件质量与价格之间进行权衡,做出折衷。
F.在安排软件开发进度时常采用关键路径法(CPM),若加速关键路径上任一关键任务的完成就能使整个软件开发进度提前。
G.在诸多软件质量度量的方法中用得最多得是事后度量或验收度量。

H.软件能够正常工作的持续时间叫做软件的使用寿命,它与使用者的输入环境无关。
I.建立软件可靠性(Shooman)模型的一个前提条件是:错误检出率与程序中残留的错误数成正比。
J.通过软件测试不可能将软件中隐藏的错误完全检出。




二、填空题
1. 在完成软件概要设计,并编写出相关文档之后,应当组织对概要设计工作的评审。
�评审的内容包括:
�分析该软件的系统结构、子系统结构,确认该软件设计是否覆盖了所有已确定的软件需求,软件每一成份是否可 到某一项需求。
�分析软件各部分之间的联系,确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足 的要求。模块 是否在其 之内。

2.  在面向对象软件设计过程中,应按如下要求进行类的设计
其它类的成员只能使用类的共有界面上的操作,这就是软件设计的 原则。
只有类的实例的用户需要使用的操作才能成为类的公共界面的一个成员,这是软件设计的 原则。
�存取或加工类的数据必须通过该类的操作来实现,这是软件设计的 原则。 两个类之间的交互应当仅通过参数表,这是软件设计的 原则。

每个派生类应该当做基类的特殊化来开发,而基类所具有的公共界面成为派生类的共有界面的一个子集,这是软件设计的 原则。

3. 在典型的软件体系结构中应包括5种构件,它们是纯计算构件存储构件管理构件控制构件链接构件。 其中, 具有简单的输入�M输出关系没有运行状态的变化例如数值计算过滤器转换器等 用于存放共享的永久性的、结构化的数据。例如,数据库、文件、符号表、超文本等。 使得执行的操作与运行状态紧密耦合。例如,抽象数据类型、面向对象系统中的对象、许多服务器等。 管理其它构件运行的时间、时机及次序。例如,调度器、同步器等。 在实体之间传递信息。例如,通信机制、用户界面等。




三、简答题

1. 下面是快速排序算法中的一趟划分算法(描述语言:C++)
int Partition ( dataType A[ ], int low, int high ) {
//在区间[ low, high ]以第一个对象为基准进行一次划分,k返回基准对象回放位置。
�int k = low; dataType pivot = A[low];�//基准对象位置
�for ( i = low+1; i <= high; i++ )���//检测整个序列,进行划分
��if ( A[i].key < pivot.key )�����//小于基准的交换到左侧去
���Swap ( A[++k], A[i] );������ //交换
�Swap ( A[low], A[k] );�������� //交换,将基准对象就位
�return k;���������������//返回基准对象位置k
}
(1) 试画出它的程序流程图,并计算它的环路复杂性度量;
(2) 试利用路径覆盖方法为它设计足够的测试用例(循环次数限定为0次,1次和2次)。



2.下面是两个程序流程图,试分别用N-S图和PAD表示之,并计算它们的McCabe复杂性度量。



3. 请回答下列有关软件配置管理方面的问题。
(1) 什么叫做基线?基线的作用是什么?为什么要做基线控制?
(2) 什么叫做版本管理?简要解释它的4种主要功能。