部分内容为参考本站博主文章,感谢支持!
1、P24第4题:软件如何分类,举例说明一种分类
按照功能划分
-
系统软件
-
支撑软件
-
应用软件
2、P24第8题:对比瀑布模型、敏捷开发的特点,说明各自适合的软件类型
2.1、瀑布模型的特点及适合的软件类型 CSDN
2.1.1、特点
-
阶段间具有顺序性和依赖性
-
推迟实现的特点
-
质量保证的观点
2.1.2、适合的软件类型
-
需求清晰且不变动
-
软件执行严格地顺序开发
2.2、敏捷开发地特点及适合的软件类型
2.2.1、特点
-
个体和交互胜过过程和工具
-
可以工作的软件胜过面面俱到的文档
-
客户合作胜过合同谈判
-
响应变化胜过遵循计划
2.2.2、适合的软件类型
-
项目团队的人数不能太多
-
项目经常发生变更
-
高风险的项目实施
-
开发人员可以参与决策
3、P24第10题:解释IEEE定义的软件构造以及主要内容
3.1、定义
按照指南,术语“软件构造”指的是通过编码、验证、单元测试、集成测试和调试的组合,详细地可创建可工作的,有意义的软件。
3.2、主要内容
-
软件构造基础
最小化复杂性,预计变化,为验证构造,复用,构造中的标准。
-
管理构造
生存周期模型中的构造,构造计划,构造度量
-
实际考虑
构造设计,构造语言,编码,构造测试,为复用构造,用复用构造,构造质量,集成。
-
构造技术
API设计和使用,面向对象/实时问题,问题化和通用化,断言,按契约设计,防御性编程,可执行模型,状态和表驱动的构造技术,
实施配置与国际化,基于文法的输入处理,并发原语,中间件,分布式软件的构造方法,构造异构系统,性能分析与调优,平台标准,测试先行编程。
-
软件构造工具
开发环境,GUI,单元测试工具,性能优化、分析和切片工具。
4、P59第5题:模块化的基本原则?如何评价程序模块化?
4.1、模块化的基本原则 CSDN
-
单一职责原则 即类的职能要单一: 遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修改T2时,也不会使职责P1发生故障风险
-
里氏替换原则: 子类对象可以替换父类对象。子类不要增加父类没有的约束。这样会导致父类有些方法不能用。从而不能真正的实现 : 子类对象可以替换父类对象,如果子类重写了父类已实现的方法,那么子类调用的父类的方法就完全没用了,从而不是真正意义上的继承。
-
依赖倒置原则: 高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
-
接口隔离原则: 在设计接口的时候,给每一个接口设计不多不少的方法,因为,如果设计的方法多了,当某个类通过接口来依赖某个类的时候,被依赖的那个类要实现的方法太多了,会造成那个类中大量的代码冗余,不可过少的原因是,接口太多,会让设计变复杂,且不便于管理。
-
迪米特原则: 低耦合,高内聚,即类A与类B,如果没必要依赖吗,则代码尽量不要耦合,如果这两个类要产生通信,则创建一个中间的通信类C去与这两个类进行交互。但是这样的通信类要适量。
-
开闭原则: 对实现封闭,对扩展开放。即当一个一个方法需要增加其他的功能,或者代码需要重构的时候,要扩展软件的行为,尽量不要去修改已有的代码。用抽象构建框架,方法的实现来扩展细节。
4.2、如何评价程序模块化
-
优点:
-
可维护性高
-
架构清晰,灵活开发
-
降低程序耦合性
-
方便模块功能调试、升级以及模块间的组合分解
-
-
缺点:
-
损耗性能
-
系统分层,调用链长
-
模块间通信发送消息很消耗性能
-
5、P59第6题:解释模块内聚性的含义,对不同内聚进行说明
5.1、模块内聚化的含义(简单理解)
内聚化是指模块内部各成分之间的关联程度
5.2、内聚的分类 CSDN
-
偶然内聚:指一个模块内的几个处理元素之间没有任何关系。
-
逻辑内聚:指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
-
时间内聚:把需要同时执行的动作组合在一起形成的模块。
-
通信内聚:把模块内所有处理元素都在同一个数据结构上操作,或者指各处理使用相同的输入数据或者产生相同的输出数据。
-
顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一个功能元素的输出就是下一个功能元素的输入。
-
功能内聚:是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。
-
信息内聚:信息内聚模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。
6、P59第7题:解释模块耦合性的含义,对不同耦合进行说明
6.1、模块耦合性的含义
模块的耦合性是指系统内部与其他模块或者外部世界的关联程度
6.2、耦合的分类 CSDN
按照耦合性从高到低
-
内容耦合:一个模块直接使用另一个模块的内部数据,或通过非正常入口转入另一个模块内部时,这种耦合关系就是内容耦合。
-
公共耦合:指一组模块访问一个公共数据环境,如全局数据结构。
-
外部耦合:指一组模块访问一个公共变量,这里指基本数据类型而不是数据结构(或者说对象)。
-
控制耦合:指一个模块调用另一个模块时,传递的是控制变量,被调用模块通过该控制变量的值选择执行模块内某一功能。那么也就是说,被调用的模块应具有多个功能。
-
标记耦合:耦合模块之间以数据结构传递(比如在java程序中,传递的就是一个对象)。
-
数据耦合:耦合模块之间有调用关系,传递的是简单数据类型的值(比如在java程序中,传递的就是一个基本数据类型的值)。
-
无直接耦合:指两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何信息。
7、P132第3题:什么是防御性编程?有哪些基本技术
7.1、什么是防御性编程 CSDN
防御性编程是一种细致、谨慎的编程方法。
7.2、基本技术
-
处理错误
-
使用异常
8、P169第3题:交互设计的8条黄金规则 CSDN
-
力求一致性 例如网站首页需要和每一个下级页面保持一致的风格,导航都要放在屏幕的左上角,具有高度一致性的界面能给人清晰整洁的感觉。
-
允许频繁使用快捷键 快捷键表示产品使用的灵活性和有效性,想想每次我们使用搜索引擎的时候是鼠标点击的搜索还是按的回车?
-
提供明确的反馈 出现错误时要明确说出错误的含义,而且需要考虑用户能否理解,比如我们基本上都遇到过HTTP404错误,但绝大多数人能看懂么?
-
设计对话,告诉用户任务已完成 要在用户完成某项任务或操作后进行提示。如果他们在做了很多操作后却得不到反馈,他们就无法知道自己是否达成目标。
-
提供错误预防和简单的纠错功能 例如把某些当前不能点击的按钮设置为灰色,在系统执行时让用户在确认一下
-
应该方便用户取消某个操作 大多数的应用软件都有撤销和恢复的功能,如果用户总是惧怕一失足成千古恨,那样的用户体验可想而知
-
用户应掌握控制权 一般而言用户希望自己去控制系统交互,在执行任务中,用户应该可以随时中止或退出,而不是无奈的看着系统继续
-
减轻用户记忆负担 我们应该尽可能帮助用户避免要求他们记住各种信息,例如各个菜单项之间的逻辑关联,更好的分类就会帮助用户找出哪个功能按钮在什么地方
9、P200第1题:什么是代码重构?代码重构有哪几个时机?
9.1、什么是代码重构(P171)
代码重构就是在不改变软件外部行为的前提下改善它的内部结构
9.2、代码重构的时机(P182)
-
给程序增量地添加功能时
-
定位错误时
-
评审代码时
10、P200第2题:解释代码重构的三个最佳实践
-
不要为了重构而重构
-
为理解而做简略重构
-
不要顾虑复查或者测试对代码的改动