乐于分享
好东西不私藏

软件设计师考题解析(1)

软件设计师考题解析(1)

软件设计师证书对年轻人来说,是一块低成本、高回报的“敲门砖”,既能以考促学打下专业基础,又能为求职、落户和职称评定提前铺路。5月下旬即将开考,下面我将陆续整理一些有代表性的试题及解析和大家分享。

1.某项目组拟开发一个大规模系统,且具备了相关领域及类似规模系统的开发经验。下列过程模型中,()最适合开发此项目。

A.原型模型

B.瀑布模型

C.V模型

D.螺旋模型

答案:B

解析:本题主要考查我们对各开发模型的理解。

瀑布模型具有可强迫开发人员采用规范的方法;严格规定了各阶段必须提交的文档;要求每个阶段结束后,都要进行严格的评审等优点。但瀑布模型过于理想化,而且缺乏灵活性,无法在开发过程中逐渐明确用户难以确切表达或一时难以想到的需求。

原型模型一般是基于需求不容易明确这一事实:并非所有的需求在系统开发之前都能准确地说明和定义。因此,它不追求也不可能要求对需求的严格定义,而是采用了动态定义需求的方法。快速原型法适用于需求不够明确的项目。

V模型一种典型的测试模型,该模型强调开发过程中测试贯穿始终。V模型是一种软件开发模型,它强调开发与测试阶段的对应关系。其核心逻辑是:左侧是开发过程,右侧是对应的测试过程,整体呈V字形。

V代表:

· Verification(验证):V的左侧。指通过评审、静态检查等,确认产品“是否正确地构建了产品”(即是否按规格实现)。

· Validation(确认):V的右侧。指通过执行测试,确认产品“是否构建了正确的产品”(即是否满足用户真实需求)。

V模型的关键对应关系(从上到下):

· 需求分析 → 验收测试(确认是否满足用户需求)

· 系统设计 → 系统测试(测试整体功能和非功能特性)

· 概要设计 → 集成测试(测试模块间接口)

· 详细设计 → 单元测试(测试单个模块内部逻辑)

· 编码:位于V的底部,是以上所有关系的实现基础。

V模型的优缺点:

· 优点:每个开发阶段都有对应的测试阶段,可及早设计测试用例;过程严谨,适合需求明确、变更少的项目。

· 缺点:缺乏灵活迭代;缺陷发现较晚(测试集中在后期);不适用于需求频繁变化的项目(如敏捷开发)。

螺旋模型综合了瀑布模型和演化模型的优点,并在此基础上还增加了风险分析。采用螺旋模型时,软件开发沿着螺旋线自内向外旋转,每转一圈都要对风险进行识别和分析,并采取相应的对策。

2.在软件维护阶段,为软件的运行增加监控设施属于()维护。

A.改正性
B.适应性
C.完善性
D.预防性

答案:C

解析:根据引起软件维护的原因不同,软件维护通常可分为以下四种类型:

改正性维护。是指在使用过程中发现了隐蔽的错误后,为了诊断和改正这些隐蔽错误而修改软件的活动。该类维护一般占总维护工作量的25%。

适应性维护。是指为了适应变化了的环境而修改软件的活动。该类维护一般占总维护工作量的20%。

完善性维护。是指为了扩充或完善原有软件的功能或性能而修改软件的活动。该类维护一般占总维护工作量的50%。

预防性维护。是指为了提高软件的可维护性和可靠性、为未来的进一步改进打下基础而修改软件的活动。该类维护一般占总维护工作量的5%。而本题所描述的为软件的运行增加监控设施属于完善性维护。

3.某模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一处理元素的输出就是下一处理元素的输入,则该模块的内聚类型为()内聚。

A.过程
B.时间
C.顺序
D.逻辑

答案:C

解析:本题考查软件设计内聚性相关知识。

A选项过程内聚。如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚。

B选项时间内聚。如果一个模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起,则称为时间内聚。

C选项顺序内聚。如果一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。本题描述的是C选项。

D选项逻辑内聚。几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。如一个模块读取各种不同类型外设的输入。尽管逻辑内聚比偶然内聚合理一些,但逻辑内聚的模块各成分在功能上并无关系,即使局部功能的修改有时也会影响全局,因此这类模块的修改也比较困难。

4.在关系数据库中,第三范式的主要目的是消除( )类型的问题。

A.多值依赖

B.传递依赖

C.外键冗余

D.主键冗余

参考答案:B

在关系数据库中,第一范式(1NF)要求数据库表的每一列都是不可分割的基本数据项;第二范式(2NF)在满足1NF的基础上,消除了非主属性对主键的部分依赖;第三范式(3NF)是在满足2NF的基础上,消除非主属性对主键的传递依赖。多值依赖是第四范式(4NF)要处理的问题;外键冗余和主键冗余并非第三范式主要解决的问题。  

详细解析知识要点:
· 第一范式 (1NF):
    每一列都必须是不可再分的基本数据项。简单说,就是一列里不能放多个值(比如“爱好”列不能同时写“篮球,足球”),也不能有“表中有表”的情况。
· 第二范式 (2NF):
    先满足 1NF,然后消除非主属性对主键的部分依赖。
    部分依赖:主键由多列组成(比如 (学号, 课程号) 作为联合主键),某一列(如“学生姓名”)只依赖于“学号”一部分主键,不依赖“课程号”。
    解决方法是拆表,把只依赖部分主键的属性移到新表。
· 第三范式 (3NF):
    先满足 2NF,然后消除非主属性对主键的传递依赖。
    这是本题的直接目的。

什么是传递依赖(用一个例子说明)
假设有一个表:
学生表(学号, 姓名, 学院编号, 学院地址)

· 主键是:学号
· 依赖关系:
  1. 学号 → 学院编号
  2. 学院编号 → 学院地址
· 那么:
    学号 → 学院编号 → 学院地址
    这里“学院地址” 间接依赖于 主键“学号”,称为传递依赖。

问题:

· 如果一个学院地址改了,你要更新所有该学院的学生记录,容易造成数据冗余和更新异常。

解决(3NF):

拆成两表:

· 学生表(学号, 姓名, 学院编号)
· 学院表(学院编号, 学院地址)

这样就消除了传递依赖。

各选项详解

A. 多值依赖

· 定义:一个主键对应多个独立的多值属性(比如一个老师教多门课,同时编写多本书,课程和书之间没有直接关系)。
· 在 第四范式 (4NF) 中解决,不是 3NF 的主要任务。

B. 传递依赖(✅ 正确答案)

· 如上所述,这是 3NF 专门要消除的问题。

C. 外键冗余

· 外键在数据库设计中是正常且必要的,用来表示表间关系。
· “外键冗余”通常不是范式理论直接解决的核心问题,过度冗余可能是设计不佳,但不是 3NF 的目标。

D. 主键冗余

· 主键必须唯一标识一行,不应冗余。
· 主键冗余可能指重复的主键列或多余的主键,这种情况一般连 1NF、2NF 都通不过,更不是 3NF 专门针对的问题。

一句话记忆口诀
1NF 无重复列,2NF 消部分依赖,3NF 消传递依赖,4NF 消多值依赖。