网站搭建品牌,wordpress font google,企业网站的设计与实现,seo竞价是什么意思今天分享一套针对《软件工程与计算》这本书的真题案例#xff0c;有关《软件工程与计算》23章内容的重点知识整理#xff0c;已经总结在了博客专栏中#xff0c;有需要的自行阅读#xff1a;
《软件工程与计算》啃书总结https://blog.csdn.net/jsl123x/category_12468792.…今天分享一套针对《软件工程与计算》这本书的真题案例有关《软件工程与计算》23章内容的重点知识整理已经总结在了博客专栏中有需要的自行阅读
《软件工程与计算》啃书总结https://blog.csdn.net/jsl123x/category_12468792.html?spm1001.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 ArrayListNewFeature newFeatureItems new ArrayListNewFeature();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.有关耦合种类的辨析
复习指路
软件工程与计算总结十三详细设计中的模块化与信息隐藏https://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.month12;
} 2)C同学对代码做出了如下的修改validate_request 方法和 valid 方法之间是哪种类型的耦合如何修改 很明显valid方法的结果作为validrequest中分支结构用到的参数这属于控制耦合的范畴~ 修改后只需要根据后两个方法的返回值即可而不需要人为地根据方法内部的逻辑设置参数~ 注这是一个难点
3.有关需求类型的辨析
复习指路
软件工程与计算总结五软件需求基础https://jslhyh32.blog.csdn.net/article/details/133579557 有关需求的分类可以参考上文中的模式这里简单给出一个样例 业务、用户、系统级需求是按照层次性来划分的需求~而功能需求和2小问中的需求都属于软件需求~ 假设需要你想出常见 ATM 机的需求 1 例说明 ATM 机的业务需求、用户需求以及系统级需求描述 ATM 机的功能需求 [提 示概括存款、取款、查询和转账功能 ] 2 除了 功能需求之外还有哪些需求需要定义试一一列举。 答案统一给出如下 4.有关测试用例的设计
复习指路
软件工程与计算总结十九软件测试https://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;
这道题解法很多有关代码设计的要点大家可以看如下这篇博文
软件工程与计算总结十八代码设计https://jslhyh32.blog.csdn.net/article/details/133895023
博主给出的解法如下答案不唯一本质上是利用一个循环的辗转相减法这样可以避免分支语句过多
int count(int income)
{int tax0;float ratio[5]{0.1,0.12,0.15,0.18,0.2};for(int i4;i0;i--) //从税率最高的部分开始计算依次递减 {int temp0;tempincome-10000*i;if(temp10000)temp10000; // 忽略已经计算过的部分 couttempendl;taxtemp*ratio[i]; //累计税值 }return tax;
}