可测试性战术:
软件可测试性是指通过测试(通常是基于运行的测试)揭示软件缺陷的容易程度。软件的开发和测试是并行的,这就需要测试人员尽快找出软件的关键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 ):组件可以维持状态、性能负载、容量、安全性或其他可通过接口访问的信息。当监视状态被激活时可以记录事件。
白盒测试是把测试对象看作是一个透明的盒子,而程序员利用内部的逻辑结构哈信息,对程序的逻辑路径进行测试,而内部监视器则可以返回基本路径节点的信息和记录,更方便了对系统进行百合测试,增强了项目的可测试性。
浏览器中的 检查 功能就是一个内部监视器,他可以明了的把网页的各个节点的信息反馈给开发者: