二次开发,大多数情况下,我们的技术水平,精力时间,都不允许我们对源码进行深度解读。
想弄明白每一行代码的含义,每一个变量参数的含义,每一次调用和原作者每一次的意图,都非常困难。
所以我们需要用更加经济,实用,性价比高的方法去实现我们的二次开发需求,在这个理论下去用最高效率的方式实现需求,如果第一次不顺利,则一点点增加成本,扩大范围,到正好足够为止,此方法论会节省大量时间和精力。
第一步,找出源码中的运行流。
(在庞大复杂的源码中,每个py脚本内大多有多个函数或类,那么我们应该找到我们使用这个源码库 的入口,也就是调用的方法是哪个,然后根据此方法,我们步步为营,多加一些打印语句print,这样既不会影响源码而引起bug,也会让我们测试出整个运行流,防止其他没有用到的函数干扰我们的视线。)
第二步,权限。
(如果涉及到一些官方源码库,比如python的一些依赖包,那么我们第一步的添加print,一定会引起权限系统的警告,此时我们要利用shell命令:sudo chmod 777 文件名 来将其权限释放。然后最好重启一遍你的ide,防止ide再次警告或修改不生效或保存报错。)
第三步,找关键字。
(虽然我们成功的找到了运行流,但是我们要确定我们此行的关键字,以便在茫茫如海的字段和变量中找到关键点,关键字比如是变量名,也可以是函数名等等,比如我要去修改unittest的teardown函数,想给它增加个入参,那么我进入unittest的庞大源码中,就去搜索关键字teardown。当然通过关键字搜索后,我们大概会搜索到十几处甚至更多,我们给它们按照嫌疑性大小进行排序。 )
第四步,找到可疑方法。
(在我们第一步,第三步的双重筛选下,结果范围其实已经小了很多,第四步就是在这个结果范围内,再根据函数名字的可疑程度来确定优先测试级。比如关键字出现且被运行的 几处中,有一处所在的方法函数叫做:run,那么这个地方就是最优先考虑测试的。诸如run,还有什么main, test, successs等等特殊方法名,都是可以优先测试的。)
第五步,开始按优先级进行测试。
(根据我们的需求,是增删改查,还是干什么,总是要实际的修改源码,那么到此,就可以按照之前的顺序逐个实验性测试了。这样可以最快的找到关键和正确的位置,实现需求。但是要注意,如果某处实验修改不成功,一定要迅速修改回原状,才能进行下一处实验。这个很重要,不然容易造成隐患。这里关于实验不成功,还有一点要强调,就是对于前面可疑性高的某处,若改动后失败了,不要着急放弃立马开始下一处的实验,而是最好尝试解决下,报错就修复下,不成功就研究下这里的代码逻辑,很多二次开发的结果并不是只修改一处代码就能办得到的,可能要多步,如果你半途而废,那么就永远不能成功了。而可疑性高的地方是值得我们多花费点心思的。)