《Java大学教程》—第9章 软件质量
软件质量:可维护性、可靠性、健壮性、可用性。
9.3 可维护性
系统维护(maintaining)是指根据需求的变化更新现有系统的过程
9.3.1 封装的重要性
连锁反应:对系统某一部分的改变可能会对系统的其余部分产生影响,导致系统错误。
面向对象的封装原则保证了面向蝗程序易于维护,因为封装原则减弱了连锁反应的影响:
每个对象都应该在对象内部包含工作的全部细节;所有的数据都应该隐藏在对象内部;保证对象的任何改变都不会影响到系统的其余部分。
9.3.2 文档
在开发面向对象程序的时候,设计文档应该包含以下内容:
* 完整的类图
* 清晰的方法定义(参数和返回类型,必要时包含伪代码)
代码内文档应当包含以下信息:
* 用以描述代码含义的注释信息
* 有意义的数据名称
* 用常量替换固定的数字
* 一致清晰的缩排格式
9.3.3 JavaDoc
常用标签:@author, @version, @param, @return
9.4 可靠性
编译时错误(compile-time error):没有按照语法规则编写合法的程序。
运行时错误(run-time error):程序没有完成指定的工作。可能是需求不符,可能是逻辑错误,或者两者兼而有之。
测试错误:从单元测试开始,然后进行集成测试。
9.4.1 单元测试(unit testing,测试独立的类)
不要在原始类中添加main方法进行测试,而是单独构造一个包含main方法的类称为原始类的驱动器(driver),
这个驱动器类只是完成对特定类的操作,不会干扰的类。
如果要进行单元测试的类依赖于其他的类,而被依赖的类当前无法获得,那么可以开发一个哑元类(dummy class)用于替换无法获得的类。
哑元类是为了完成测试而开发的模拟真实类的类。
9.4.2 集成测试(integrating testing,测试组成应用的所有的类)
在完成程序中每个类的独立测试后,需要将它们组合,进行综合测试,目的是保证类之间的接口可以正常地工作。
为了进行接口测试需要对所有类进行重编译。防止类间的接口不一致。
9.4.3 黑盒测试(black box testing)
把测试组件看作不透明的盒子,即忽略组件的代码细节,构造测试的输入数据时可以分成多个等价组。
9.4.4 白盒测试(white box testing)
把测试组件看作透明的盒子,构造测试集,尽可能覆盖组件所有可能的执行路径。
9.4.5 测试日志
测试日志是记录系统开发过程中进行测试的文档。
9.5 健壮性
一个程序意外地终止运行被称为崩溃(crash)。
将组件推向极限的测试方法称为压力测试(stress testing)。
当违反规则时程序会报告异常(exception),报告异常的过程称为抛出异常(throwing exception)。
9.6 可用性(usability)
程序的可用性是指应用程序的使用者与程序交互过程的容易度。
9.6.1 文本格式化
转义符:\n, \t, \", \', \\
9.6.2 图形用户界面
是 友好的,易于用户操作的。
自测题:
1。解释什么是继承?
继承是指在类之间共享属性和方法。继承关系是一种层次关系,也被称为a-kind-of关系。
2。在UML类图中如何描述继承关系?
用空心的三角形表示继承关系,三角形的尖指的是基类。
3。在Java中,使用哪个关键字声明一个类是另一个类的子类?
class 子类 extends 基类,用extends关键字代表继承关系。
4。区分方法重写和方法重载的不同。
多态性的实现:方法重载和方法重写。
方法重载指同一类中可以存在具有相同名称的不同方法,通过它们的参数列表加以区分。
方法重写指超类中的方法,可以在子类中重写。
不同的方法的相互区分:在方法重载中通过不同的参数列表相互区分,在方法重写中通过隶属的对象的不同相互区分。
5。解释什么是类型转换,并描述Java中类型转换是如何实现的。
强制类型转换(typecast):强制一个数据从一种数据类型转换为另一种数据类型。
通过在待转换的数据前加一对含有新类型名称的括号实现。
6。解释abstract和final修饰符分别应用于类和方法时的作用。
abstract class表示这个类为抽象类,不能创建对象,只能作为其他类的基类。
abstract method表示这个方法是抽象方法,没有实现,子类如果要实例化,必须重写这个方法。
final class表示这个类为最终类,不能被继承。
final method表示这个方法是最终的方法,子类不能重写。
编程练习:代码附件
1. QualityQ2.java
2. Reactor.java
3. EscapeSequence.java
4. FindCost3.java
b) 说实话,这么简单的输出,真不知道还需要怎样改善信息的布局。
《Java大学教程》—第9章 软件质量的更多相关文章
- 正在学习的Java大学教程
推荐本书<Java大学教程> 看的人比较少,我也是多年不看书了,基于教程一般选国外的方法,从图书馆选了本书. 看了一半,感觉书的内容比较认真,对于基本的Java知识都算介绍全了,而且全书是 ...
- 《Java大学教程》—第24章 Java的背景
本章主要介绍的是Java的背景知识,通过了解历史知道Java与其他语言的区别,以便更好选择在什么场景下使用Java. 24.2 语言的尺寸Java语言短小.紧凑,以C++为基础,放弃了一些特定的 ...
- 《Java大学教程》—第23章 Java网络编程
本章主要关注的是Java的几个应用网络编程的场景,对于网络编程没有太多深入介绍,而Java本来也没有多少针对网络编程的特性.虽然Java有个Applet的概念,但是真用这个的开发的场景其实不多. 23 ...
- 《Java大学教程》—第19章 改进用户界面
用户与程序交互的媒介称为用户界面(user interface)或人机界面(human-computer interface). 19.2 Border接口8个实现Border接口的标准边框类: ...
- 《Java大学教程》—第14章 抽象、继承和接口
自测题:1. 解释抽象和抽象数据类型的概念.P333抽象的概念是仅仅关注对象可以完成什么工作,而不必担心如何完成工作的细节.类模板通常被称为抽象数据类型.因为这类数据暴露给用户的所有信息仅仅是方 ...
- 《Java大学教程》—第12章 案例研究--第2部分
本章就是上一章的延续,主要是用GUI实现了控制界面. 编程练习:代码附件Hostel.java1. 正确运行2. Runhostel.java3. searchButton
- 《Java大学教程》—第11章 案例研究--第1部分
自测题:1. 图11-1的UML设计中各个类之间的关系.Hostel与TenantList是关联关系:TenantList和PaymentList与ObjectList是泛化关系.TenantL ...
- 《Java大学教程》—第22章 多线程程序
22.2 进程(process):P551时间切片(time-slicing):处理器只是完成了一个任务的一部分工作,然后完成下一个任务的一部分工作,因为处理吕每次完成工作的时间都非常短,因此看起来这 ...
- 《Java大学教程》—第20章 文件处理
记录():一个单独的数据实例.域():一个属性. 20.3 输入和输出设备:P484输入过程和输出过程.操作系统负责建立三个流(stream):标准输入流(System.in).标准输出流(Sy ...
随机推荐
- .NET CORE实践(1)--Ubuntu下的Hello World
准备工作 使用Hyper-V安装Ubuntu16.04桌面版 因为是作为类似日记的记录,所以写的时候事无巨细,稍显啰嗦. 打开微软.NET官网 apt-get install 打开dotnetcore ...
- 【手记】解决VS2017 git 拉取按钮灰色的问题
如图: 若干仓库都是能推不能拉,下面显示当前分支不跟踪远程分支,后来在这里找到给分支建立跟踪的方法,又在这里找到在VS2017中敲git命令的方法,在此感谢上述博文的作者.总结一下: 在VS2017进 ...
- .NET Framework 平台构造基础
CLR 公共语言运行库 执行给定编译代码单元所需的外部服务集合,它提供了一个定义明确的运行库层,可以被支持.NET的所有语言和平台所共享. 库 mscoree.dll:公共对象运行库执行引擎 当用户程 ...
- (4)Microsoft office Word 2013版本操作入门_插入图片及图片的排版
1.word中插入图片和文绕图 1.1插入图片 :点击[插入]-->[图片] 或者 [联机图片]从网上选择. 1.2文字环绕: [格式] --->点击[位置] .[自动换行] 进行图 ...
- python基础学习(十三)函数进阶
目录 1. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 2. 函数的返回值进阶 例子:显示当前的湿度和温度 例子:交 ...
- js高级:event,事件冒泡,事件捕获
1.事件 浏览器客户端上客户触发的行为都称为事件 所有的事件都是天生自带的,不需要我们去绑定,只需要我们去触发. 通过 obj.事件名=function(){} 事件名:onmouseover 鼠标悬 ...
- 老王带你走过 Kafka 入门教程
Apache Kafka是分布式发布-订阅消息系统,在 kafka官网上对 kafka 的定义:一个分布式发布-订阅消息传递系统. 它最初由LinkedIn公司开发. Linkedin于2010年贡献 ...
- Module的加载实现
烂笔头开始记录小知识点啦- 浏览器要加载 ES6模块,: <script type="module" src="./foo.js"></scr ...
- CSS3 - @keyframes
语法 @keyframes animationname { keyframes-selector {css-styles;} } 值 描述 animationname 必需.定义动画的名称. keyf ...
- 解决easyui combobox赋值boolean类型的值时,经常出现的内容显示的value而不是text的bug
版本:EasyUI 1.7.0 在用easyui写项目时,碰到一个combobox的奇葩bug.代码如下: <div> <select class="easyui-comb ...