软件质量:可维护性、可靠性、健壮性、可用性。

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章 软件质量的更多相关文章

  1. 正在学习的Java大学教程

    推荐本书<Java大学教程> 看的人比较少,我也是多年不看书了,基于教程一般选国外的方法,从图书馆选了本书. 看了一半,感觉书的内容比较认真,对于基本的Java知识都算介绍全了,而且全书是 ...

  2. 《Java大学教程》—第24章 Java的背景

    本章主要介绍的是Java的背景知识,通过了解历史知道Java与其他语言的区别,以便更好选择在什么场景下使用Java. 24.2    语言的尺寸Java语言短小.紧凑,以C++为基础,放弃了一些特定的 ...

  3. 《Java大学教程》—第23章 Java网络编程

    本章主要关注的是Java的几个应用网络编程的场景,对于网络编程没有太多深入介绍,而Java本来也没有多少针对网络编程的特性.虽然Java有个Applet的概念,但是真用这个的开发的场景其实不多. 23 ...

  4. 《Java大学教程》—第19章 改进用户界面

    用户与程序交互的媒介称为用户界面(user interface)或人机界面(human-computer interface). 19.2    Border接口8个实现Border接口的标准边框类: ...

  5. 《Java大学教程》—第14章 抽象、继承和接口

    自测题:1.    解释抽象和抽象数据类型的概念.P333抽象的概念是仅仅关注对象可以完成什么工作,而不必担心如何完成工作的细节.类模板通常被称为抽象数据类型.因为这类数据暴露给用户的所有信息仅仅是方 ...

  6. 《Java大学教程》—第12章 案例研究--第2部分

    本章就是上一章的延续,主要是用GUI实现了控制界面. 编程练习:代码附件Hostel.java1.    正确运行2.    Runhostel.java3.    searchButton

  7. 《Java大学教程》—第11章 案例研究--第1部分

    自测题:1.    图11-1的UML设计中各个类之间的关系.Hostel与TenantList是关联关系:TenantList和PaymentList与ObjectList是泛化关系.TenantL ...

  8. 《Java大学教程》—第22章 多线程程序

    22.2 进程(process):P551时间切片(time-slicing):处理器只是完成了一个任务的一部分工作,然后完成下一个任务的一部分工作,因为处理吕每次完成工作的时间都非常短,因此看起来这 ...

  9. 《Java大学教程》—第20章 文件处理

    记录():一个单独的数据实例.域():一个属性. 20.3    输入和输出设备:P484输入过程和输出过程.操作系统负责建立三个流(stream):标准输入流(System.in).标准输出流(Sy ...

随机推荐

  1. Ubuntu使用(一)——常用命令与软件安装配置

    1.安装输入法 2.配置JDK 3.eclipse 3.1 eclipse启动错误 修改eclipse.init的配置,主要加-vm以及下面的jre路径,路径前别留空格 之前因为加了空格,一直找不到原 ...

  2. [译]如何在.NET Core中使用System.Drawing?

    你大概知道System.Drawing,它是一个执行图形相关任务的流行的API,同时它也不属于.NET Core的一部分.最初是把.NET Core作为云端框架设计的,它不包含非云端相关API.另一方 ...

  3. mysql 数据库的备份与还原 at winows

    把cmd的当前目录切换到mysql安装目录; 备份数据库world mysqldump -u root -p  world < c:\all.sql 导入数据库 新建schema world 常 ...

  4. [android] sharedPreference入门

    /********************2016年5月6日 更新**************************************/ 知乎:Android 如何实现判断用户首次使用,比如首 ...

  5. struts2_struts类型转换

    一.在Servlet中,表单提交的非字符串类型需要手动转换 1.在struts中,表单提供的常见数据类型struts框架自动转换,无需手动转换 2.在某些情况下,某些自定义类型struts不能完成自动 ...

  6. 给大家带来一些 horm的一些知识!

    1. form action 提交地址     https://www.baidu.com merhod 提交 方式post get get是在http的url上提交不加密 post加密在http 中 ...

  7. 洛谷P4103 [HEOI2014]大工程(虚树 树形dp)

    题意 链接 Sol 虚树. 首先建出虚树,然后直接树形dp就行了. 最大最小值直接维护子树内到该节点的最大值,然后合并两棵子树的时候更新一下答案. 任意两点的路径和可以考虑每条边两边的贡献,\(d[x ...

  8. @meda媒体查询

    定义和使用 使用 @media 查询,你可以针对不同的媒体类型定义不同的样式. @media 可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设置设计响应式的页面,@media 是非常有用的. ...

  9. Android为TV端助力 关于线程的那些事

    今天发现之前自己一直有个误区,new Runnable(run()方法){}原来它不是一定创建一个线程 如果用主线程的handler去post(Runnable),他就不会创建子线程,而是在主线程上执 ...

  10. android常犯错误记录(一)

    错误:Error:Error: Found item Attr/border_width more than one time 这个容易,属性相同了,按照提示查询一下找出来删了就行了,注意大小写很容易 ...