一、题目类(老师重点提到过的题目)
1、高可靠性是否意味着高可用性?试举例证明自己的观点?
答:高可靠性不意味着高可用性
可靠性说明系统已经准备好,马上可以使用;可用性是系统可以无故障的持续运行,是一个持续的状态。与可用性相反,可靠性是根据时间段而不是任何时刻来定义的。
例如:A机器一年坏一次,一次坏一个月;B机器一年坏十次,一次坏10秒。在可靠性上,A机器可靠性更高。在可用性上,A机器一年中可用11个月;B机器一年中可用12个月,B机器可用性更高。
2、为什么要进行边界值分析
(1) 等价类划分忽略掉了某些特定类型的高效测试用例,而边界值分析可以弥补其中的一些不足;
(2)编程的很多错误是发生在定义域或值域的边界上。因此针对边界情况设计测试用例,可以更好的检查错误,具有更高的测试回报率;
(3) 边界值数据本质上是属于某个等价类的范围,测试时确实有些重复,但是为了更好的测试质量(边界值特别容易出bug),适当的重复是可以接受的。
3、什么是桩,试着举个例子
使用一些自己定义的测试函数来替换当前需要测试的函数。桩函数是白盒测试中的概念,是这样能够加速开发,或更好的找错误源。被替换的函数可能是目前还没写完的,
例子:想要对数据进行处理,但是处理部分还没有完成,采用桩函数,代码如下
def test(a,b) # 被测模块
c = a+b
stub(c)
def stub(c) # 桩函数
print(c)
if __name == "__main__":
test(1,2) # 驱动程序
4、如识别耦合并修改代码解耦(附例题)
印记耦合:当被调用的模块可以使用的数据多于真实所需数据时,导致数据访问可能失控,给计算机犯罪提供机会.
解耦:只提供所需要的数据
void print(double height,double weight){
System.out.println("身高"+height);
System.out.printIn("体重"+weight);
}
5、根据顺序图绘制类图或给出代码实现(有顺序图例题,类图需要自己练习)
6、为什么要“设计易读的代码”
设计易读的代码是为了让团队成员(包括自己)更容易理解代码的含义,从而更方便地对代码进行修改、维护和扩展。易读的代码有如下一些优点
(1)提高开发效率和可维护性:代码好理解,也就提高了项目的开发效率,也增强了项目的可维护性
(2)便于发现、减少错误:开发人员更容易发现代码中的错误,减少代码中的潜在缺陷和bug。
(3)便于团队合作:易读的代码让团队成员更容易互相理解和协作,从而提高团队的协作效率。
(4)便于代码重用:开发人员可以很快的找到需要的代码,重用起来也方便
综上来说,易读的代码对于提高代码质量、减少错误、提高开发效率和促进团队合作都具有重要的作用,所以我们要设计易读的代码。
7、持续的构建-修复模型是否可对需求快速响应?是否可以用于替代极限编程?试简要给出理由
(1) 在程序规模比较小,对质量要求不高时,构建-修复模型可对需求快速响应,因为此时软件结构简单,开发人员可控,可以迅速地将新功能或修改推向市场,收集用户反馈并及时进行修复和调整。
但在程序规模较大时,构建-修复模型可能无法对需求快速响应。因为该模型没有分析、没有文档,也没有质量考虑,软件结构在不断的修改中变得越来越糟糕,甚至无法修改,导致无法再对需求进行快速相应
(2) 构建-修复模型不可用于替代极限编程。两者都强调快速响应变化和持续改进,但它们的具体实现方式有所不同。
构建-修复模型可以帮助开发人员更快地修复缺陷和改进产品,但它并没有像极限编程那样强调代码质量、自动化测试、持续集成等。极限编程可以更好地促进软件开发的质量和可维护性。
因此,持续构建-修复模型不能完全替代极限编程。应该根据具体的项目需求和团队情况,选择合适的开发方法。
8、为什么说软件工程的核心是分解和抽象
因为软件系统通常是复杂的,是由许多不同的模块和组件组成的,这些模块和组件之间可能存在复杂的相互作用。为了能够更好的管理这种复杂性,我们采用分解的方法,将系统分解为更小的模块和组件,并从中抽象出关键概念和模式。
分解和抽象,让复杂的系统变为了更小的、更易于管理的一个个部分,让开发者更好的开发与维护复杂的系统,这也是软件工程的目的所在,所以我们说软件工程的核心是分解和抽象更好的管理和维护系统,提高系统的质量和可靠性。
9、说明“软件=程序+文档+数据”中的文档和建模存在什么样的关系
文档和建模是密切相关的。
文档和建模是相互支持的。例如,文档可以指导建模的方向,建模可以帮助开发人员更好地理解文档。
文档和建模是相互补充的。例如,开发人员使用UML图对软件系统进行建模,而文档中的文字描述可以对UML图进行解释和补充,更好地表达软件系统的设计。
二、知识点类(题目中需要掌握的知识点)
Part1 软件工程基本概念
1、软件复杂程度的提高给软件开发带来的影响
(1)开发周期和维护成本增加:需要更多的时间和资源来设计、实现、测试该软件
(2)质量控制变得更加困难:复杂度的提高可能会增加软件中的缺陷和bug数量
(3)团队协作的挑战加大:复杂度的提高需要更好的沟通和协作能力,以确保整个团队能够协调合作
(4)比如说带来的软件危机,这是由于使用硬件的思想来解决了软件的问题,1个人干10个月和10个人干1个月在软件思想上未必可行,这同时也引出了软件工程的重要性
2、软件工程的定义和思想
(1) 定义:应用系统的、规范的、可量化的方法来开发、运行和维护软件,即将工程应用到软件。并对这些方法展开研究。
同时来说,软件工程是一个包含复杂内容的学科,并不能用几个有限的定义将其概括
(2) 思想:把软件当作一种工业产品,采用工程化的方法对软件的进行计划、开发和维护
1、耦合都有哪些类型,解耦的方式是什么(根据找到的材料,现在能做的是判断是什么类型,解耦只会解标记耦合和控制耦合)
(1) 非直接耦合:无直接联系,完全通过主模块的调用实现
(2) 数据耦合(最低耦合):通过数据参数交换信息,且为简单数据
(3) 标记耦合:传的数据多于真实需要的
解耦方法:只提供所需要的数据,多一个数据不给
(4) 控制耦合:调用模块传递的信息,控制了被调用模块的内部逻辑
解耦方法:将被调用模块拆解,并将判定上移
(5) 重复耦合:两个模块有一部分逻辑代码是一样的,看似无耦合,但一改逻辑需要两处都改
(6) 公共耦合:两模块访问同一公共数据(如全局变量)
(7) 内容耦合:一模块可以直接访问另一模块数据
2、148-151页的体系结构(必出一大题)
3、都有哪几种内聚,如何区分
(1) 偶然内聚:一个模块完成一组任务,任务间彼此存在松散关系,或完全不相关
(2) 逻辑内聚:几个相关功能放在同一个模块,根据调用传来的参数决定执行哪个
(3) 时间内聚:模块完成的功能必须在同一时间段内执行,功能只因时间因素关联在一起(是时间而不是时间段)
(4) 过程内聚:模块内各处理程序相关,且必须以特定次序执行
(5) 通信内聚:模块内各部分使用相同的输入数据,或产生相同的输出结果
(6) 顺序内聚:特定顺序执行,前者的输出是后者的输入
(7) 功能内聚:模块仅完成一项工作
(8) 信息内聚:模块仅对单一数据完成工作(如查询账户余额、更新账户余额,都是对账号余额这一个来做的)
4、给顺序图画类图
5、给一张图,补充图中两者之间的关系
6、类图顺序图会考的多一些(类图中更多的关注的是类与类之间的关系,而不是之前参与者与类之间的关系)
7、配件、连接件、配置