可测试性战术

可测试性战术:

  软件可测试性是指通过测试(通常是基于运行的测试)揭示软件缺陷的容易程度。软件的开发和测试是并行的,这就需要测试人员尽快找出软件的关键bug并且快速的修复他,这就需要程序员提高软件的可测试性,让软件在测试阶段更加方便明了的被测试,而不是结构混乱,难以测试,难以维护。

  可测试性战术的目标是允许在完成软件开发的一个增量后,轻松地对软件进行测试。

 

可测试性战术可以分为两类:

  一个是提供输入并捕获输出结果进行测试,一个是对软件内部进行监视,第一个就对应软件测试里的黑盒测试,不看软件内部的构造,只看输入什么,输出什么,而后一个则是白盒测试,要监视软件内部的结果、数据和事件。

输入输出:

1、记录/回放(Record/playback :记录/回放是指将捕获跨接口的信息,并将其作为测试专用软件的输入。

   其实最简单的记录回放就是

 System.out.println(  ); 

  控制台输出,这也是平时写代码的时候常用的测试方法。

  还有就是例如数据库的异常响应,try catch语句捕获异常信息:

public static Connection getConn () {
        Connection conn = null;
        
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(db_url, db_user, db_pass);
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return conn;
    }

 这里就调用了连接数据库的方法,并且通过try-catch语句抛出跨接口调用的异常信息。

 还有java中的撤销,返回功能 ctrl z  ctrl y  他就是利用一个首尾相连的链表,实现这个功能的:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.undo.*;

class UndoDemo extends JFrame {

    static JTextArea text = new JTextArea();
    static JPanel pnl = new JPanel();
    static JButton unbtn = new JButton("撤销");
    static JButton rebtn = new JButton("恢复");
    static UndoManager undomg = new UndoManager();

    UndoDemo() {

        super("撤销、恢复功能实例");
        setVisible(true);
        setSize(400,300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout(5,5));

        pnl.setLayout(new FlowLayout(5));
        pnl.add(unbtn);
        pnl.add(rebtn);
        add(pnl,BorderLayout.NORTH);
        add(text,BorderLayout.CENTER);

        text.getDocument().addUndoableEditListener(undomg);

        unbtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                if(undomg.canUndo()) {
                    undomg.undo();
                } else {
                    JOptionPane.showMessageDialog(null,"无法撤销","警告",JOptionPane.WARNING_MESSAGE);
                }
            }
        });

        rebtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                if(undomg.canRedo()) {
                    undomg.redo();
                } else {
                    JOptionPane.showMessageDialog(null,"无法恢复","警告",JOptionPane.WARNING_MESSAGE);
                }
            }
        });
    }

    public static void main(String[] args) {
        new UndoDemo();
    }
}

引用自:https://blog.csdn.net/ProComFan/article/details/5124501

2、将接口与实现分离(Separate interface from implementation :将接口与实现分离允许实现的代替。占位实现允许在缺少被占位组件时,对系统的剩余部分进行测试

 学过设计模式后就知道,写程序要高内聚低耦合,编码的原则要实现单一职责原则。将接口与实现隔离,就好像一个家用电器,有各个功能模块,再用线路将各个器件连接在一起,如果一个器件出现故障,其他器件不受影响。这样就保证了,在缺少一个器件时,不影响对其他部件的测试。

例:利用servlet实现接口隔离

//通过ID得到账单信息(删除项)
    private void getitById2(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        
        req.setCharacterEncoding("utf-8");
        int id = Integer.parseInt(req.getParameter("id"));
        if(dao.delete(id)) {
            req.setAttribute("message", "删除成功!");
            req.getRequestDispatcher("Mainpage.jsp").forward(req, resp);
        }else{
            req.setAttribute("message", "删除失败!");
            req.getRequestDispatcher("Mainpage.jsp").forward(req, resp);
        }
    }

 如果一个方法除了问题,那么只需要检查这一个方法就可以,而不用把整个项目都查一遍

3特化访问路线/接口:具有特化的测试接口允许通过测试工具并独立于其正常操作,来捕获或指定组件变量的值

  组件可以根据内部状态实现战术,以支持测试过程。

内部监视:

内部监视器(Built-in monitors :组件可以维持状态、性能负载、容量、安全性或其他可通过接口访问的信息。当监视状态被激活时可以记录事件。

  白盒测试是把测试对象看作是一个透明的盒子,而程序员利用内部的逻辑结构哈信息,对程序的逻辑路径进行测试,而内部监视器则可以返回基本路径节点的信息和记录,更方便了对系统进行百合测试,增强了项目的可测试性。

  浏览器中的 检查 功能就是一个内部监视器,他可以明了的把网页的各个节点的信息反馈给开发者:

 

原文地址:https://www.cnblogs.com/jmdd/p/12418204.html