《软件工程与计算》期末考试真题范例及答案

今天分享一套针对《软件工程与计算》这本书的真题案例,有关《软件工程与计算》23章内容的重点知识整理,已经总结在了博客专栏中,有需要的自行阅读:

《软件工程与计算》啃书总结icon-default.png?t=N7T8https://blog.csdn.net/jsl123x/category_12468792.html?spm=1001.2014.3001.5482

总的来说,干货满满。 


目录

一.名词解释

1.软件工程

2.软件演化生命周期模型

3.螺旋模型

二.代码评注及修改

1.对软件设计模式原则的甄别

2.有关耦合种类的辨析

3.有关需求类型的辨析

4.有关测试用例的设计

5.有关人机交互设计的内容

6.修改代码的设计


一.名词解释

1.软件工程
  • 应用系统的、规范的、可量化的方法来开发、运行和维护软件、即将工程应用到软件
  • 对应用系统的、规范的、可量化的各种方法的研究
2.软件演化生命周期模型
  • 初始阶段:第一个版本的软件产品开发
  • 演化:对演化增量进行处理以保持软件产品的持续增值
  • 服务:用户使用、开发者维护
  • 逐步淘汰:用户仍使用、开发者不维护
  • 停止:用户不使用、开发者不维护
3.螺旋模型

按照风险解决的方式来组织软件开发活动~

二.代码评注及修改

1.对软件设计模式原则的甄别

a.A同学开发了一个手机应用,准备投放到 Apple Appstroe Google Play 市场中去,下面是他应用的部分关于应用描述的代码,请分析其设计是否合理,是否违反某些设计原则,是否能够应用某种设计模式来重构。

class Application {
 prative String applicatioName;
 prative float avarageRate;
 prative ArrayList<NewFeature> newFeatureItems = new ArrayList<NewFeature>();

 String getDescriptionForiOS(){
     StringBuffer result = new StringBuffer();
     result.append("This is "+ applicatioName + " for iOS platform\n");
     for(int i =0; i< newFeatureItems.size(); i++){
     result.append(newFeatureItems.get(i).getDescription());
 }

 result.append("Avarage Rate from App Store\n");
 result.append(String.valueOf(avarageRate));
 return result.toString();

 }
 String getDescriptionForAndroid(){
     StringBuffer result = new StringBuffer();
     result.append("This is "+ applicatioName + " for Android platform\n");
     for(int i =0; i< newFeatureItems.size(); i++){
     result.append(newFeatureItems.get(i).getDescription());
 }
 result.append("Avarage Rate from Google Play\n");
 result.append(String.valueOf(avarageRate));
 return result.toString();
 }
}
1 ) 指出违反的原则,请解释该原则,并给出修改后的代码
首先,插播一下有关 迪米特法则开闭原则的知识:
软件设计模式原则(一)迪米特法则
软件设计模式原则(二)开闭原则
  • 违背开闭原则,当IOS亦或Android中任何一个发生变更时,都会导致另一方也被修改(因为在同一个类中,无论是否变更都算发生修改),所有应该将两个逻辑上并立的代码分开封装,并抽象一个统一的接口~
  • 违反迪米特法则,for循环中出现隐式方法,所以应该使用迭代器访问集合对象,减少与其他类的交互

改进后的代码如下:

2) 解释该设计模式,写出应用该设计模式后的代码
可以采用策略模式重构,改进后的代码如下:
b.B同学开发了一个影片出租店用的程序,其中需要计算客户的积分。如果电影是新发布的电影并且租用的时间超过 1 天,则可以得到 2 点积分,否则是 1 点积分。
1 ) 请画出下列代码设计的顺序图。
2 ) 指出其是否违反某些设计原则,解释这些原则
customer与rental和movie都进行了交互,所以违反了迪米特原则——迪米特原则要求,一个软件实体应该尽可能少地与其他实体发生相互作用~
3 ) 对其代码进行修改,写出修改之后的代码并画出修改之后的顺序图。

c.

数据结构栈有四个功能:压栈、弹栈、得到栈的大小、得到栈是否为空。 C 同学使用继
承如下设计了栈。

D 同学在设计雇员类的时候,如下设计:

1 ) 指出两个关于继承的设计是否合理?是否违反设计原则
第一个关于继承的设计不合理,因为违反了迪米特原则,事实上,这道题并没有重写父类中的方法,之所以违反是因为这种继承只是为了代码复用而不是为了组织类型差异的继承。第二个则设计合理,因为既满足组织类型差异又实现了代码复用,所以符合迪米特法则~
2 ) 对两段代码,如果合理,请解释其合理性。如果违反,请解释该原则,并修改

2.有关耦合种类的辨析

复习指路:

软件工程与计算总结(十三)详细设计中的模块化与信息隐藏icon-default.png?t=N7T8https://jslhyh32.blog.csdn.net/article/details/133841782

B同学写出如下代码:

1) validate_request 方法和 valid_month 方法之间是哪种类型的耦合,如何修改? 

属于印记耦合,因为共享了数据结构【date】,修改这种类型,只需要将重合部分的字段设置为公有即可~

void validate_request(input_form i){
	if(!valid_string(i.name)){
		error_message(“Invalid name”);
	}
	if(!valid_month(i.date.month)){
		error_message(“Invalid month”);
	}
}
int valid_month(int month){
	return d.month >=1 && d.month<=12;
}

2)C同学对代码做出了如下的修改,validate_request 方法和 valid 方法之间是哪种类型的耦合,如何修改?

很明显,valid方法的结果作为validrequest中分支结构用到的参数,这属于控制耦合的范畴~

 

修改后,只需要根据后两个方法的返回值即可,而不需要人为地根据方法内部的逻辑设置参数~

(注:这是一个难点!)

3.有关需求类型的辨析

复习指路:

软件工程与计算总结(五)软件需求基础icon-default.png?t=N7T8https://jslhyh32.blog.csdn.net/article/details/133579557

有关需求的分类,可以参考上文中的模式,这里简单给出一个样例:

  • 业务、用户、系统级需求是按照层次性来划分的需求~
  • 而功能需求和(2)小问中的需求都属于软件需求~

假设需要你想出常见 ATM 机的需求:

(1 )例说明 ATM 机的业务需求、用户需求以及系统级需求,描述 ATM 机的功能需求 [提 示:概括存款、取款、查询和转账功能 ]
2 )除了 功能需求之外,还有哪些需求需要定义?试一一列举。
答案统一给出如下:
4.有关测试用例的设计

复习指路:

软件工程与计算总结(十九)软件测试icon-default.png?t=N7T8https://jslhyh32.blog.csdn.net/article/details/133915874

D 同学希望测试A 同学设计的类:

1 ) 完成功能测试的测试用例的设计,说明思路
插播一个科普:Object类型

1.Object 类:位于 java.lang 包中的类(java.lang包中的内容自动导入);

2.Object 是每个类的父类,直接父类或者是间接的父类;

3.Object 类型的引用可以存储任意类型的对象;

4.Ovject 类中的方法是每个类都默认的功能方法。

上述代码的功能,可以大致理解为:方法一在下标为0的地方插入element元素,方法二弹出下标为0处的元素~
首先,这里是在进行功能测试,所以肯定要选择黑盒测试,至于是等价类划分还是边界值分析都无妨~
这里使用等价类划分编写测试用例:
不难看出,上面的方法只有输入,而下面的方法只有输出~因此可以采用一次输入一次输出的方式来设计
2 ) 给出相应的测试代码

5.有关人机交互设计的内容
E同学下载了 Eclipse 软件。请列举至少 3 条该软件在人机交互方面的有些优点,分析它们体现了哪些人机交互的原则?

详细内容参考:软件工程与计算总结(十一)人机交互设计 

 答案:

优点:界面简洁、良好的导航栏、及时的用户操作反馈

原则(最后两个好像不在总结(十一)里面,关注一下):

  • 简洁设计:不要使用太大的菜单,不要在一个窗口中表现过多的信息类别,不要在一个表单中使用太多的颜色和字体作为线索
  • 一致性设计:遵循了用户已有的精神模型
  • 低出错率设计:避免用户操作可能引起的错误,并提供简洁的指导帮助用户消除错误
  • 易记性设计:减少用户记忆负担
  • 导航:停用一个很好的完成任务的入口
  • 反馈:提示用户交互行为的结果,但不打断用户工作的意识流
  • 不暴露软件系统内部构造机制
  • 协作式设计:调整计算机因素以更好地适应并帮助用户的设计方式
6.修改代码的设计
F同学 开发一个个人所得税系统,代码如下。其中缴税的规则是
  • l For the first $10,000 of income, the tax is 10%
  • l For the next $10,000 of income above $10,000, the tax is 12 percent
  • l For the next $10,000 of income above $20,000, the tax is 15 percent
  • l For the next $10,000 of income above $30,000, the tax is 18 percent
  • l For any income above $40,000, the tax is 20 percent

原代码:

tax = 0.
if (taxable_income == 0) goto EXIT;
if (taxable_income > 10000) tax = tax + 1000;
else{ tax = tax + .10*taxable_income;
goto EXIT;
}
if (taxable_income > 20000) tax = tax + 1200;
else{ tax = tax + .12*(taxable_income-10000):
goto EXIT;
}
if (taxable_income > 30000) tax = tax + 1500;
else{ tax = tax + .15*(taxable_income-20000);
goto EXIT;
}
if (taxable_income < 40000){
tax = tax + .18*(taxable_income-30000);
goto EXIT;
}
else
tax = tax + 1800. + .20*(taxable_income-40000);
EXIT;

这道题解法很多,有关代码设计的要点,大家可以看如下这篇博文:

软件工程与计算总结(十八)代码设计icon-default.png?t=N7T8https://jslhyh32.blog.csdn.net/article/details/133895023

博主给出的解法如下,答案不唯一,本质上是利用一个循环的辗转相减法,这样可以避免分支语句过多:

int count(int income)
{
	int tax=0;
	float ratio[5]={0.1,0.12,0.15,0.18,0.2};
	for(int i=4;i>=0;i--)   //从税率最高的部分开始计算,依次递减 
	{
		int temp=0;
		temp=income-10000*i;
		if(temp>=10000)
			temp=10000; // 忽略已经计算过的部分 
		cout<<temp<<endl;
		tax+=temp*ratio[i];		//累计税值 
	}
	return tax;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/135591.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Dubbo快速入门

1.什么是Dubbo&#xff1f; Dubbo是一款高性能分布式服务框架&#xff0c;由阿里巴巴开发并开源发布。它支持多种协议&#xff0c;如dubbo、HTTP、Hessian、Thrift等&#xff0c;可以很好地解决分布式服务中的服务治理问题&#xff0c;提供了服务注册、发现、负载均衡、容错等功…

第26章_事务概述与隔离级别

文章目录 事务事务的特征事务的控制语句事务的生命周期事务的执行过程 ACID特性原子性一致性隔离性持久性 隔离级别不同隔离级别并发异常脏读不可重复读幻读区别 总结 事务 &#xff08;1&#xff09;事务的前提&#xff1a;并发连接访问。MySQL的事务就是将多条SQL语句作为整…

伦敦金股票代码是什么?

伦敦金是跟踪实时的现货黄金价格走势的差价合约交易&#xff0c;它的代码一般是LLG、GOLD&#xff0c;但也有一些货币交易平台会显示为XAU。伦敦金不是股票交易&#xff0c;因此没有四位数或六位数的股票代码&#xff0c;但伦敦金交易品种单一&#xff0c;投资者不用在数千支股…

路径规划-车辆分配及导航

1.根据城市之间的连通状态&#xff0c;构建以城市为结点、两个城市间的距离&#xff08;根据两个城市经纬度计算的欧式距离&#xff09;作为边权重的无向图。 2.根据起始点&#xff0c;对除了起始点之外的其他点进行聚类&#xff0c;将点划分成几个部分。 3.在每个部分中找出…

SpringBoot Web开发

SpringBoot3-Web开发 SpringBoot的Web开发能力&#xff0c;由SpringMVC提供。 Web开发的三种方式 方式处理过程注意事项实现效果全自动直接编写控制逻辑全部使用自动给配置默认效果手自一体Configuration、 配置WebMvcConfigurer、 配置WebMvcRegistrations不要标注 EnableWeb…

matlab模糊控制文件m代码实现和基础理论

1、内容简介 略 15-可以交流、咨询、答疑 通过m代码来实现生成模糊文件fis文件 2、内容说明 模糊文件m代码实现和基础理论 matlab模糊控制文件m代码实现和基础理论 模糊文件、m代码和模糊基础理论 3、仿真分析 略 4、参考论文 略 链接&#xff1a;https://pan.baidu.co…

【C++】非类型模板参数 | array容器 | 模板特化 | 模板为什么不能分离编译

目录 一、非类型模板参数 二、array容器 三、模板特化 为什么要对模板进行特化 函数模板特化 补充一个问题 类模板特化 全特化与偏特化 全特化 偏特化 四、模板为什么不能分离编译 为什么 怎么办 五、总结模板的优缺点 一、非类型模板参数 模板参数分两类&#x…

【MongoDB】索引 – 文本索引(用权重控制搜索结果)

一、准备工作 这里准备一些数据 db.books.drop();db.books.insert({_id: 1, name: "Java", alias: "java 入门", description: "入门图书" }); db.books.insert({_id: 2, name: "C", alias: "c", description: "C 入…

[护网杯 2018]easy_tornado 1(两种解法!)

题目环境&#xff1a;发现有三个txt文本文件 /flag.txt/welcome.txt/hints.txt 依此点开 flag在/fllllllllllllag文件中 在hints.txt文件中发现md5计算 md5(cookie_secretmd5(filename)) 并且三个文件中都存在filehash&#xff08;文件名被哈希算法加密32位小写&#xff09; 猜…

轻量封装WebGPU渲染系统示例<23>- 可渲染对象添加到多个渲染器Pass节点(源码)

渲染和计算混合系统&#xff0c; 可以看做基于算力驱动设计理念的一种实现。 此系统中&#xff0c;可渲染(rendering)/计算(computing)实体可以任意添加到一个渲染器pass节点。若干个这样的节点相关联&#xff0c;就能构成对应的pass node graph&#xff0c;也就实现了整个3D渲…

CS224W6.2——深度学习基础

在本文中&#xff0c;我们回顾了深度学习的概念和技术&#xff0c;这些概念和技术对理解图神经网络至关重要。从将机器学习表述为优化问题开始&#xff0c;介绍了目标函数、梯度下降、非线性和反向传播的概念。 文章目录 1. 大纲2. 优化问题2.1 举例损失函数 3. 如何优化目标函…

【FISCO BCOS】十九、区块链浏览器部署

目录 一、环境依赖 检查环境 1.检查java 二、拉取安装脚本 获取部署安装包 ​编辑 解压安装包 进入目录 三、修改配置 四、部署服务 五、状态检查 检查前后端进程 1.检查后端server进程 2.检查前端的nginx进程 检查进程端口 六、使用区块链浏览器 1.配置群组…

(二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB

一、七种算法&#xff08;DBO、LO、SWO、COA、LSO、KOA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁…

HarmonyOS 高级特性

引言 本章将探讨 HarmonyOS 的高级特性&#xff0c;包括分布式能力、安全机制和性能优化。这些特性可以帮助你构建更强大、更安全、更高效的应用。 目录 HarmonyOS 的分布式能力HarmonyOS 的安全机制HarmonyOS 的性能优化总结 1. HarmonyOS 的分布式能力 HarmonyOS 的分布…

Zabbix监控SSL证书有效期

一、介绍 由于业务需要&#xff0c;最近通过 Let’s Encrypt 申请了一些 SSL 证书&#xff0c;而证书有效期为 3 个月&#xff0c;需要在证书到期之前 renew。由于域名较多经常忘记 renew&#xff0c;导致证书过期&#xff0c;因此想通过 Zabbix 的方式监控证书的到期时间&…

linux 下非sudo安装cmake

1.查看位数 getconf LONG_BIT2.下载对应压缩包 Download CMake Source Distribution 未编译源代码 Binary Distribution已经编译好的 3.解压至文件夹 tar -zxvf cmake-3.28.0-rc4-linux-x86_64.tar.gz 4.添加环境变量 vi ~/.bashrc 最后一行添加 写到bin目录 export P…

2023亚太杯数学建模B题思路

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料5 最后 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 2023年第十三…

Python BeautifulSoup 库使用教程

文章目录 简介安装 BeautifulSoup 库BeautifulSoup 库的导入BeautifulSoup 库依赖的解析库创建 BeautifulSoup 对象CSS选择器1、通过标签名查找2、通过 CSS 的类名查找3、通过 Tag(标签) 的 id 查找4、通过 是否存在某个属性来查找5、通过 某个标签是否存在某个属性来查找 获取…

怎么制作安装电子版说明书?方法献上~

在现代科技发展的背景下&#xff0c;制作一份优质的电子版说明书对于帮助用户正确、高效地使用产品至关重要。无论是软件、设备还是家电产品&#xff0c;一份清晰明了的电子版说明书可以为用户提供指导和支持&#xff0c;提升用户体验和满意度。那么&#xff0c;如何制作一份出…

springcloud电影购票选座网站系统源码

开发技术&#xff1a; jdk1.8&#xff0c;mysql5.7&#xff0c;idea springcloud springboot mybatis vue elementui 功能介绍&#xff1a; 用户端&#xff1a; 登录注册 首页显示搜索电影&#xff0c;轮播图&#xff0c;电影分类&#xff0c;最近上架电影&#xff08;可…