• HelloWorld:通过demo,构建黑盒模型


    在《源码阅读四步走,这才是阅读源码的正确姿势》一文中,给出了源码阅读的完整步骤。
    本篇是《如何高效阅读源码》专题的第四篇,正式开始讲解阅读源码的具体方法!

    程序界有个老传统,学习新技术时都是从「Hello World」开始的!无论是学习新语言时打印「Hello World」;还是学习新框架时编写个demo!
    对于了解语言或项目来说,编写个demo可能就够了。但是如果要阅读项目源码,仅仅是编写个demo是远远不够,你需要通过demo构建「黑盒模型」!

    本节内容如下:

    • 什么是黑盒模型,以及为什么要构建黑盒模型

    • 如何构建黑盒模型?

    • 通过demo演示构建黑盒模型的具体流程

    什么是黑盒模型?

    在测试里有「黑盒测试」一说!黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,程序被看作一个不能打开的黑盒子,只对程序接口进行测试,它只检查程序是否能适当地接收输入数据而产生正确的输出信息。

    而所谓「黑盒模型」,即先把我们要阅读的项目看做一个黑盒子,基于这个黑盒子构建一个可以运行的模型。基于这个模型,我们可以大致的了解项目的功能流程。对项目流程有个整体的印象。

    如何构建黑盒模型?

    在有些讲解面向对象设计的书里,讲了如何通过需求构建简单对象模型的方法:

    • 找出需求中的名词,构建为对象

    • 找出需求内的动词,构建为方法

    • 将对象和方法归类组合,构成业务流程

    构建黑盒模型的流程和上面的流程很类似,甚至更简单,不需要你去设计,只需要梳理即可,大致流程如下:

    • 编写一个具有基本功能的demo

    • 把项目本身当做黑盒子,找出demo中使用到的对象,同时补充可能会用到的对象

    • 基于这些对象来绘制结构图

    • 基于demo梳理流程,将结构中的模块串联起来

    下面以JUnit4为例,来演示此流程。

    编写demo

    假设,我们有一个包含say方法的Person类,这个方法接收一个String类型的参数,返回”Hello,”+arg,如下图所示:

    我们通过JUnit对此类进行测试,测试代码如下图所示:

    现在的IDE都集成了测试的运行环境,可以直接执行测试,这在执行测试时很方便,但是却会隐藏了一些我们需要了解的内容。

    为了能更清晰的梳理测试的执行流程,我们通过命令行来执行测试(建议在运行其它项目的demo时也通过命令行执行):

    java org.junit.runner.JUnitCore org.ivan.PersonTest
    复制代码

    执行结果如下:

    JUnit version 4.12

    tearDown invoke

    Time: 0.014OK (1 tests)
    复制代码

    绘制结构图

    基于上面的demo,我们来绘制对应的结构图!
    上面的demo中我们可以很明显的看到四个类:

    • Person

    • PersonTest

    • Assert

    • JUnitCore(如果使用IDE来执行,那你就看不到这个类了)

    实际上,应该还有一个类,用于展示结果的对象,我们这里暂且叫它Result。可能在JUnit中,它并不叫Result,但是没关系,我们现在只要知道有这么一个类即可。

    找到类后,我们对这些类进行归类:

    • 很明显,Person和PersonTest是我们自己编写的代码,所以属于自身项目

    • 而JunitCore,Result和Assert是由JUnit提供的,所以属于JUnit

    最终结构图看起来像这样。

    梳理流程

    基于上面的结构图并结合demo流程,我们来绘制执行流程:

    • 首先,很明显JUnitCore是入口类,因为它是被Java直接调用的

    • 此类调用PersonTest来执行测试

    • PersonTest调用Person执行对应方法

    • 并通过Assert类的方法判定结果是否和预期的相同

    • 测试结果通过Result返回,输出到命令行

    这个流程是我们通过demo梳理出来的一个粗略的流程。它正确吗?不一定,不过它给了我们一个项目流程概览,我们可以基于这张图来不断的完善,从黑盒到灰盒最终到白盒,得到详细的项目执行流程。

    总结

    本文梳理了阅读源码的第一步「通过demo,构建黑盒模型」:

    • 编写一个具有基本功能的demo

    • 将开源项目本身当做黑盒子,绘制结构图

    • 基于demo梳理流程,将结构中的模块串联起来

    后面的文章将基于上图来不断的完善,最终得到一个相对完整的JUnit执行流程图。

  • 相关阅读:
    [Java] 计算两个日期之间的差(年 月 日)
    Javassist library is missing in classpath! Please add missed dependenc
    $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 区别
    内存管理一
    内存管理四
    内存管理二
    内存分配函数分类
    内存映像文件
    内存管理三
    到底有多少内存
  • 原文地址:https://www.cnblogs.com/ivaneye/p/15996268.html
Copyright © 2020-2023  润新知