信息领域热词分析加质量属性
发表日期:2020.3.4
通过重构上学期的大型数据库大作业《信息领域热词分析》来分析六中质量属性战术。
1、可用性战术,应用最典型就是错误检测—异常方法,异常处理程序通常将错误在语义上转换为可以被处理的形式,异常通常与引入异常的程序在同一个进程中。参考代码如下:
public class Dao {
public static List<Hotword> WordList() {
List<Hotword> beans = new ArrayList<Hotword>();
Connection conn = DBUtil.getConn();
Hotword adminBean=null;
try {
String sql="select * from hword";
Statement state = conn.createStatement();
ResultSet rs = state.executeQuery(sql);
while(rs.next()) {
adminBean = new Hotword();
adminBean.setId(rs.getInt("id"));
adminBean.setWord(rs.getString("word"));
adminBean.setExplanation(rs.getString("explanation"));
adminBean.setUrl(rs.getString("url"));
beans.add(adminBean);
}
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
return beans;
下面来分析该代码的可用性战术应用,首先用try,catch语句的设计可以定向的捕捉到代码的异常,解决了读取数据库相关数据时如果未读取到,无法得知错误断点的问题,实现的过程就是构建try,catch语句代码,通过catch语句中对异常的捕捉以及报错提示来实现,是很基本的代码语法,在实现上难度不大。
2、接下来是可修改战术,应用最典型的就是局部化修改中的“通用抽象服务”,通过专门的模块提供通用服务通常被视做支持重用,比如设计数学函数sin(x)为通用函数。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class HServlet
*/
@WebServlet("/HServlet")
public class HServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
String method = request.getParameter("method");
if(method.equals("select01"))
{
select01(request,response);
}
if(method.equals("select1"))
{
select1(request,response);
}
if(method.equals("select2"))
{
select2(request,response);
}
if(method.equals("select3"))
{
select3(request,response);
}
if(method.equals("select4"))
{
select4(request,response);
}
if(method.equals("select02"))
{
select02(request,response);
}
}
说到模块重用,最先想到的就是DAO层的HttpServlet重用,自从接触web网页那天起,这个模块重用就一直不可获缺。这种设计其实是涉及到了软件设计的概念,这种重用就是软件设计模式中一个很重要的思想,我觉得主要是为了简化代码使用,我们可以看到HttpServlet里面的可重用的方法其实很多,只不过我们平时的数据读取写入只需要一两个方法,但是如果做一些复杂的数据交互,那么就必须重用很多方法,那如果又恰好有n个文件需要这种交互,设想一下没有重用,每个代码自己编写n个必要的函数,有n个文件需要编写,而你又没有这种模块,那你就需要编写N*N个函数。继承重用也是比较基本的语法,实现过程就是父类和子类的一种继承关系,没有太大的实现难度。
3、性能战术
在性能战术这一块,信息领域热词分析并没有太多的涉及,该系统还是停留在功能模块的层次,对诸多的性能模块,比方多线程、算法优化等等并没有使用到,稍微涉及到有关性能的地方,可能就是对热词的查询读取这一块,如果涉及到大量的数据,就必须考虑到查询的速度。
4、安全性战术
安全性战术是很显而易见的,每个系统都逃不开的登录验证模块就是安全性战术最好的体现。
public static boolean check(String username, char[] password) {
username = StringEscapeUtils.escapeSql(username);// 将用户输入的用户名转义
QueryRunner runner = new QueryRunner();// 创建QueryRunner对象
String sql = "select password from tb_user where username = '" + username + "';";// 定义查询语句
Connection conn = getConnection();// 获得连接
ResultSetHandler<Object> rsh = new ScalarHandler();// 创建结果集处理类
try {
String result = (String) runner.query(conn, sql, rsh);// 获得查询结果
char[] queryPassword = result.toCharArray();// 将查询到得密码转换成字符数组
if (Arrays.equals(password, queryPassword)) {// 如果密码相同则返回true
Arrays.fill(password, '0');// 清空传入的密码
Arrays.fill(queryPassword, '0');// 清空查询的密码
return true;
} else {// 如果密码不同则返回false
Arrays.fill(password, '0');// 清空传入的密码
Arrays.fill(queryPassword, '0');// 清空查询的密码
return false;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn);// 关闭连接
}
return false;// 如果发生异常返回false
}
这样设计就是为了判断密码是否正确,保障用户信息的安全,解决账户安全问题,实现的过程就是通过判断读入的密码和数据库中密码是否相同来完成验证,实现也是没有什么难度,就是很简单的根据用户的主键来读取数据库中的密码,通过equals方法来判断。
5、可测试性战术
可测试性战术考虑到增量的轻松测试,那么软件设计模式又是必须谈到的东西,通过设计模式的接口与实现分离可以很好的实现高内聚低耦合的目的,进而实现可测试性战术的应用。
public interface Implementor
{
public void operationImpl();
}
--------------------------------------------
public abstract class Abstraction
{
protected Implementor impl;
public void setImpl(Implementor impl)
{
this.impl=impl;
}
public abstract void operation();
}
这是一个很简单的例子,项目中的例子代码太多,反而不好解释,其实只要是设计框架的应用,里面的代码都是因项目而异的。实现的方式主要就是使用接口、抽象类,区别就在于一个是继承,一个是实现,但是原理都是一样的,把代码的实现延迟到子类,通过复用来实现可以简便增量测试的目的。
6、易用性战术
易用性战术说到底就是保证用户的满意度,只有用户觉得易用,那你的系统才是真的易用。对于信息领域热词分析系统来说,易用性战术就是通过可视化的方式让用户直观的看到那些是热词,热词到底是什么含义,因此系统采用了web界面+功能选项+生成词云图的形式来实现易用性战术,主要就是涉及到html、echart的应用,稍微有一定的实现难度。
最后总结一下,涉及功能层面的5个战术在信息领域热词分析系统中基本都有应用,涉及到性能的性能战术,在系统中未明显涉及,性能战术也是我觉得6个质量属性战术中最难实现的一个,涉及到代码深层次的东西往往是最顶尖的知识。