精华内容
下载资源
问答
  • 自动化程序员
    千次阅读
    2011-04-15 00:41:00

    马云语录:

      世界是由懒人来支撑的!

      懒不是傻懒,如果你想少干,

      就要想出懒的方法。    

      要懒出风格,懒出境界。

    McConnell在他的<<Code Complete>>提到三种"懒":"实在的懒","开明的懒"以及"一劳永逸的懒"。并说明第三种"懒"才是最具产值的"懒",因为它需要运用工具或者代码来为自己完成任务:这就是工作中的自动化。<<The Pragmatic Programmer>>的作者也有专门章节提到"一切都要自动化"。这些都有异曲同工之妙。到底我们的开发工作中有哪些是可以自动化的呢?


    凡是需要重复的工作(Routine)都可以想办法做到自动化。第一步,可以将编译及软件发布的工作自动化。这类的流程比较固定,还可以在编译后执行一些检查工作。如果你愿意都可以将写Release Note的动作自动化。第二步,可以将手工容易出错,但判断条件单一的工作自动化。比如多国语言的制作以及当前Bug状况检查的动作自动化。 第三步,将测试自动化。对于一些固定的测试用例,或者为新产生的Bug而建的测试用例放置到一个自动化测试脚本中,这样基本可以做到有效的回归测试,对于软件质量将有相当大的帮助。程序员大多对于测试并不热衷,如果有这样一个偷懒的方法,未尝不是件好事。第四步,将编码自动化。至少有些程序是可以这样的。


    偷懒的背后是需要自我突破的勇气的,也是一种永不止步的进取精神。如果发现自己不断重复一件事情,或许每次有些小的变化,我们都可以努力建立一个模型或者流程,使它可以自动化。在财务管理中有一个概念叫ABC (Activity based costing),它是强调将工作细化到每个独立的步骤。在软件开发工作中绝大份工作都是遵循一定的流程或模型,只要找到这个不变的内在,就可以想办法加以自动化(或者半自动化)。


    而可以用来帮我们做到自动化的工具很多,大部份都在SourceForge中,有空去转转。它们或者有以下一些分类:

      代码检查工具:xLint  (splint), cyclo

      UI自动化工具:AutoIt之类的

      强大的脚本工具: Perl, Python

      还有一个常在你身边的工具:Microsoft Office.  我经常使用Excel来作公式的验证,我的一个同事也利用Word中的VBA还完成一批文件格式转换的工作。


    如果我们可以将工具或自己开发的程序视为自己团队的一员,那我们就不是一个人在工作。让它们忙去吧,我们还有更重要的事做!


    参考:

      开发工作中使用的软件列表

      懒人可以用Automator提高工作效率

      使用脚本简化工作

      程序员要学会偷懒---正确运用自动化技术

      如何使用搜索技巧来成为一名高效的程序员

       [《人件》摘录]: 生产力:赢得战役和输掉战争


    更多相关内容
  • 某马程序员-web自动化讲义
  • 83程序员练级攻略(2018):容器化和自动化运维1
  • 程序员是如何把自动化做到极致的!1
  • 一种融合程序员和神经网络的自动化程序生成方法.pdf
  • 一种融合程序员和神经网络的自动化程序生成方法.docx
  • 一种融合程序员和神经网络的自动化程序生成方法.rar
  • windows自动化操作——程序员必备

    千次阅读 2021-04-02 00:33:27
    windows下自动化脚本,提高生产力必备。 不定期更新 目录 1.bat脚本 1.1.映射网络驱动器 1.2.开机自启动​​​​​​​ 1.3.自动添加环境变量脚本 1.bat脚本 1.1.映射网络驱动器 参考:...

    windows下自动化脚本,提高生产力必备。

    不定期更新

    目录

    1 bat脚本

    1.1 映射网络驱动器

    1.2 开机自启动

    1.3 自动添加环境变量脚本

    2 自动化软件

    2.1 mobaxterm的宏操作

    2.2 按键精灵

    3 python

    3.1 模拟鼠标键盘输入


    1 bat脚本

    1.1 映射网络驱动器

    参考:https://blog.csdn.net/I_am_Benson/article/details/96828872

    假设192.168.1.1为服务器ip地址,username指代用户,如果是公司服务器话一般是你的名字。

    net use “Z: \\192.168.1.1\username” “password” /user:”username”

    “Z: \\192.168.10.106\username”这里一定要加引号,否则报错。这样每次可以省去二三十秒操作。

    1.2 开机自启动

    参考:https://blog.csdn.net/qq_42297093/article/details/114671373

    自动开机软件,用于开比较多的软件(没有开机自启动)

    choice 延时精度是秒

    @echo off
    echo start wechat
    start "" "D:\Program Files\WeChat\WeChat.exe"
    choice /t 0.5 /d y /n >nul ::延时1s
    
    echo start TIM
    start "" "D:\Program Files\TIM\Bin\QQScLauncher.exe"
    choice /t 0.5 /d y /n >nul
    
    pause

    1.3 自动添加环境变量脚本

    参考:https://www.jianshu.com/p/7884d64e62f0

    这里是以java环境变量举例

    setx JAVA_HOME "D:\Program Files\Java\jdk1.8.0_40\bin" -m
    setx last %Path:~-1% -m
    if "%last%"==";" (setx Path "%Path%%JAVA_HOME%" -m) else (setx Path "%Path%;%JAVA_HOME%" -m)
    
    pause

    不用一步步电脑->属性->高级设置去配环境变量了。

    %Path:~-1% 这个意思是取环境变量最后一个字符。

    bat中设置变量为字符串后,需要%%括起来才能正确使用

    2 自动化软件

    2.1 mobaxterm的宏操作

    mobaxterm,一款终端神器,远程开发必备,一般公司选择mobaxterm会很多,因为是开源软件,不需要付费,其他的终端软件像xshell也是用的比较多的。

    只做个简单示范。就两个命令 cd test 和 cd .. ,实际可以根据自己的开发需求改。先要点击录制按钮才能开始录制一个宏。

    当然录制好的宏可以进行编辑,如上图

    一般第一行是命令,第二行是RETURN(键盘按下Enter键),第三行是休眠时间(其实就是等待时间,看实际选择,一次命令执行时间,一般填500,这里默认ms)。

    三行命令反复循环,就可以完成多条命令了。就可以当然宏操作也可用于自动化测试。

    实际操作中一般是完成一些高频次很重复的操作,比如ssh远程登录,然后切到项目目录这样的。

    2.2 按键精灵

    按键精灵是一款模拟鼠标键盘动作的软件,算是比较早比较经典的一款脚本软件了。PC版本只有2014版的,不过也足够处理些简单的操作。安卓版版本就新很多了,后续看看有没机会出个安卓篇的。

    下载地址:http://download.myanjian.com/

    安装完成后,新建一个脚本如下所示。下面的例子意思是模拟键盘按下1000次空格键。

    界面左边是各种不同的类型命令,直接点插入就可以生成一条语句。源文件我们自己也可以修改或者自己写脚本,其他和编程没什么两样,不过简单得多。界面右边是脚本属性,根据需求自己改。

    For 1000
    KeyPress "space", 1
    Delay 100
    Next

    代码含义一目了然,delay这里默认单位是ms。

    点击调试后如下所示

    点击发布可以做成exe可执行文件。

    3 python

    python,著名的脚本语言,自然也能实现各种自动化操作。不过python适合完成比较复杂的一些操作(特别是web结合),如果比较简单的话还不如使用按键精灵一类的软件,时间上划不来。

    3.1 模拟鼠标键盘输入

    需要用的库pynput,官网:https://pypi.org/project/pynput/

    待续

    展开全文
  • 然而,重点是教学 - 无可止知的原则,例如具有循环和功能封装的自动化,参见科学计算的最佳实践和科学计算中的足够实践,以了解更多信息。本课程中使用的示例分析了一组12从试验中收集了模拟炎症的文件,用于对关节...
  • 随着敏捷方法学在企业软件项目中的广泛应用,其核心实践之一——自动化功能测试已经证明了它的价值,同时却也对项目提出了挑战。传统的“录制-回播”类型的测试工具也许能帮助测试人员很快地创建一系列的测试脚本,...
  • 该程序自动创建所有实例代码,程序员不必担心链接器问题和实例问题。 C++ 模板和问题以及我们为什么需要这个: C++ 模板是泛化特定操作和避免大量代码重复的好方法。 它还加快了软件开发,并使软件设计和用例...
  • 主要用于学习关于自动化如何做~

    1.应用场景

    主要用于学习关于自动化如何做~

    2.学习/操作

    1.文档阅读

    划重点 | “自动化”主题的重点内容回顾汇总-极客时间

    2.整理输出

    原文

    你好,我是郑晔。

    “自动化”模块终于全部更新完毕。至此,四个工作原则我已经给你全部介绍了一遍,相对而言,这个模块的内容比较“硬”,我也竭尽全力帮你串起更多知识的脉络,所以,信息量也是非常大的。希望你能够找到自己接下来努力的方向,不断提升自己的“硬实力”。

    重点复习

    在这个模块中,我们学习到了一些最佳实践。

    • 持续交付

      • 将生产部署纳入了开发的考量。
      • 持续交付的基础设施通常包含持续集成环境、测试环境、预生产环境和生产环境。
      • 构建流水线保证到了下游的交付物一定是通过上游验证的。
      • 随着 Docker 的诞生,交付由发布包变成了 Docker 镜像。
    • DevOps

      • 将开发和运维结合到一起。
      • 环境配置工具上的进步,让基础设施即代码成了行业共识。
    • 验收测试

      • 验收测试要站在业务的角度编写。
      • BDD 是一种编写验收测试的方式。
      • Given...When...Then... 的描述给了一个描述业务的统一方式。
      • 写好验收测试,需要构建测试模型。
    • SOLID 原则

      • 设计模式背后的道理。
      • 单一职责原则(Single responsibility principle,SRP)。
      • 开放封闭原则(Open–closed principle,OCP)。
      • Liskov 替换原则(Liskov substitution principle,LSP)。
      • 接口隔离原则(Interface segregation principle,ISP)。
      • 依赖倒置原则(Dependency inversion principle,DIP)。
      • 用好单一职责原则,前提条件是看待问题颗粒度要小。
    • DDD

      • 它将思考的起点拉到了业务上。
      • DDD 分为战略设计和战术设计。
    • 微服务

      • 做好微服务的前提是划分好限界上下文。
      • 微服务的第一步,不要划分微服务。

    在这个模块中,我们还了解了一些重要的思路,让我们把工作做得更好。

    • 程序员的三大美德:懒惰、急躁和傲慢(Laziness, Impatience and hubris)。
    • 小心 NIH 综合症(Not Invented Here Syndrome)。
    • 写好构建脚本,做好项目自动化。
    • 参照 Java 知识体系,学习运维知识。
    • 软件设计最基础的原则是“高内聚、低耦合”。
    • 分层架构是一种设计上的分解。
    • 不同业务量的系统本质上不是一个系统。
    • 采用简单技术解决问题,直到问题变复杂。

    实战指南

    额外收获

    在这个模块的最后,针对大家在学习过程中的一些问题,我也进行了回答,帮你梳理出一个思路,更好地理解学到的内容:

    • 持续集成的延伸。
      • 持续集成完成系统集成。
      • 持续交付完成可部署上线。
      • “持续验证”完成产品想法验证。
    • AB 测试,用一个软件的多个版本验证想法。
    • Selenium 用以完成浏览器的自动化。
    • 熟练使用快捷键。

    ——《答疑解惑 | 持续集成、持续交付,然后呢?

    留言精选

    在讲到 “懒惰”应该是所有程序员的骄傲时,jxin 同学提到:

    有价值的事并不局限于事情本身。做自动化很重要,写代码很重要。但根据现有情况判断是否需要自动化,是否需要写代码也很重要。有的放矢,任务分解。权衡跟设计是件很艺术的事情,令人着迷。

    另外,关于持续交付,Jxin 同学也提出了自己的理解:

    分而治之是解决复杂问题的一大利器。持续交互就像重构中小步快走(每次微调后运行测试代码验证),都能保证大工程的稳步前进。同时由于单元小了,所以也灵活了,持续交互可以结合最小产品的理念,以小成本做test,收集数据后,即时调整产品发展方向。

    关于软件设计, 毅 同学分享了自己的感悟:

    我们常说任务到手不要着急去做,要从设计入手,把时间多花在前面。工作中发现大家都是思考了才动手的,那为什么越往后偏差越大呢?

    共性原因有二:一是全局观不够,用咱们课里的话说就是上下文局限和反馈延迟(看到问题不提,直到代码写到那绕不过去了再沟通);

    二是没有领域的概念和有意识地去实践(纸上谈兵),尤其是做流程型任务,都喜欢先把表结构定义出来,再去生成实体,所以从领域层面来看这些实体就很不合适了。结果必然是用面向对象的工具写出了面向过程的代码,既然是面向过程那OO设计原则就鲜有用武之地了。这两点也是我个人理解要做好软件设计的两个必要条件。

    讲到分层架构时, desmond 同学提到:

    学了REST和DDD,感觉两者有相通的地方:两者都以数据(一个是资源,另外一个是领域对象)为中心,并制定一套标准的数据操作(一个是HTTP Verb,另外一个项目主要用JPA这一套);而核心是业务建模。

    对于微服务的理解,风翱 同学提到:

    公司说我们的开发方式是敏捷开发,实际上只是使用了一些敏捷开发的方法,只有遵循敏捷开发的价值观和原则,才能算是敏捷开发。微服务也是一样,不是说拆分成多个服务去部署,就叫做微服务。也不是采用市面上常用的微服务框架,就是微服务了。

    对于一个好的项目自动化应该是什么样子这个问题,西西弗与卡夫卡 同学提到:

    设想过这样的情景(还没实现,打算实践一把):我们新招一名比较熟练的程序员,从TA入职拿到机器,到开发示意代码,再提交SCM,然后CI/CD,再发布到线上交付给用户,整个过程可以在入职当天的午饭之前完成。

    这不光要求构建和集成自动化,甚至要求从入职开始的各个环节都能提前准备好,包括机器、开发环境、线上环境等,甚至连示范的需求都要能及时传递给TA。理想情况下,程序员只需要开发好程序,保证质量,提交到SCM即可,其他事情都应该交给机器。

    要知道程序员都很贵,越早给用户交付价值越好。

    对于自动化验收测试, shniu 同学分享了他的学习感悟:

    自动化验收测试确实是很好的东西,比如在回归测试,省去了很多的重复工作。但我理解BDD的初衷是驱动产品、业务、开发、测试等去深入讨论沟通需求,在还没有真的写代码的时候去实例化story,并一起定义验收用例,让每个人对需求的理解都很透彻,当然特别注意的是要从统一的业务角度去描述,可见,真的做好BDD是需要不断的尝试和总结的。

    对于“5万块做淘宝”这个话题,enjoylearning 同学提到:

    做一个淘宝那样的,客户指的是业务类似,但用户量多少,需要多少并发数,搜索性能等如何都是需要跟客户沟通后才能决定技术选型的。现实中我们的有些系统已经满足了业务需求,就没有必要为了追求技术复杂度而去拆分了,只有面向问题技术选型才会有成效。

    关于运维知识,hua168 同学对文章内容进行了补充:

    现在运维流行DevOps,高级一点就是AI,其中一篇文章《DevOps 详解》不错,链接如下:
    DevOps详解_语言 & 开发_Jerome Kehrli_InfoQ精选文章

    《DevOps知识体系与标准化的构建》也不错,下载地址:
    文件下载-阿里云开发者社区

    运维知识体系:
    运维知识体系v3.1【赵班长】

    Web缓存知识体系:
    缓存知识体系v3.0【赵班长】

    感谢同学们的精彩留言。在下一个模块中,我将结合具体的应用场景,将之前讲过的“思考框架”和“四个原则”进行综合应用的分析。

    感谢阅读,如果你觉得这篇文章对你有帮助的话,也欢迎把它分享给你的朋友。

    后续补充

    ...

    3.问题/补充

    TBD

    4.参考

    划重点 | “自动化”主题的重点内容回顾汇总-极客时间

    后续补充

    ...

    展开全文
  • PHP程序员玩转Linux系列文章: 1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux...date命令,打印当前系统时间,加个参数+%F,打印格式的全日期, date +%F
  • 优秀的程序员与普通的程序员之间的区别在于:优秀的程序员会尽可能用测试检测自己的代码,越早测试程序中的问题,发现它的机会越大,花费去寻找和修正的时间就会越少。这就说明在软件发布之前如果缺少有效的测试,...
  • FANUC机器人程序员A培训教程(一)
  • FANUC机器人程序员培训课程V8-(1)
  • FANUC机器人程序员A培训教程(三)
  • 程序员为了讨好大舅子,竟自学自动化编程

    千次阅读 多人点赞 2021-11-15 20:00:35
    可以帮我写个自动化脚本吗? 我发现外行人都觉得程序员是万能的啊,但是其实我们都只是会ctrl c + ctrl v而已 不过,大舅子提需求了,能认怂吗? 当然不能啊,必须做啊 虽然我连自动化脚本怎么做、用什么语言都不...

    hello,大家好,我是帅气的超级饭饭团,最近刚和大舅子约了个晚饭,饭桌上大舅子第一句话便是:

    听说你是程序员?可以帮我写个自动化脚本吗?

    image-20211113211323638

    我发现外行人都觉得程序员是万能的啊,但是其实我们都只是会ctrl c + ctrl v而已

    不过,大舅子提需求了,能认怂吗?

    当然不能啊,必须做啊

    image-20211113211945345

    虽然我连自动化脚本怎么做、用什么语言都不知道,但是,为了妹子,不能怂啊

    我喝了一两白酒,壮了壮胆子,和大舅子讨论了下需求

    酒过三巡菜过五味,最后终于将需求定了下来了

    大概是这样的:

    • 自动登录某app
    • 自动搜索指定宝贝
    • 自动评论留言
    • 自定义搜索关键词、自定义留言个数

    总结下来就是根据关键词自动评论,然后还要提供一个UI操作

    确定了需求了,加上白红啤怼了几杯后,我反问大舅子那你妹就是我的了吧

    大舅子说:需求搞出来,她就是你的了

    为了妹子,必须拼啊,当晚开始奋斗
    image.png

    先是搜索相关技术,然后开始查漏补缺,最后便是开始实现

    给大家看看需要的技术:

    • autojs,自动化脚本引擎
    • 一点js编程意识,实现语言用的就是js
    • 一点安卓意识,毕竟自动化脚本针对的对象就是安卓手机了

    最后给大家看看我奋笔疾书一整晚的效果
    4.gif

    大概分为几步:

    第一步,UI界面的设计

    ui.layout(
        <vertical>
            <text textSize="18sp" textColor="#000000" margin="20" textStyle="bold">
                闲鱼自动评论
            </text>
            <ScrollView>
                <vertical>
                    <text textSize="16sp" margin="8">1.宝贝标签</text>
                    <input w="*" text="卫衣" id="target" margin="0 16" />
                    <text textSize="16sp" margin="8">2. 评论内容</text>
                    <input w="*" text="你好" id="comment" margin="0 16" />
                    <text textSize="16sp" margin="8">3. 总处理条数</text>
                    <input text="2" id="total" inputType="number" margin="0 16" />
                    <linear gravity="center">
                        <button margin="16" id="ok">开始执行</button>
                    </linear>
                </vertical>
            </ScrollView>
        </vertical>
    )
    

    最终呈现出来的界面是这样的

    image-20211114140618779

    虽然丑,但是能用就可以啦

    第二步便是点击后的处理

    ui.ok.click(() => {
        var target = ui.target.text();
        var comment = ui.comment.text();
        var total = ui.total.text();
        let main = new Main();
    
        threads.start(function () {
            main.process(target, comment, total);
        });
    });
    

    也就是监听了按钮的点击处理

    image-20211114140737520

    第三步就是真正做自动化的地方了

    let utils = new AppUtils();
            utils.consoleShow();
            console.log("处理的参数:" + target + "," + message + "," + limit);
            let mainTarget;
            auto.waitFor();
            utils.openApp("闲鱼");
    
            let search = id("search_bar_layout").untilFind();
            utils.clickView(search[0]);
    
            let sousuoInputs = className("android.widget.EditText").indexInParent(1).depth(6).untilFind()
            sousuoInputs[0].setText(target)
            utils.paste(sousuoInputs[0], target);
    
            utils.sleep(1000);
            let results = className("android.view.View").descContains(target).untilFind();
            utils.clickView(results[0]);
            mainTarget = results[0].desc();
    
            console.log("设置标签:" + mainTarget);
            
            var targetViewMap = new java.util.HashMap();
            while (targetViewMap.size() < limit) {
                let viewIndex = 0;
                while (true) {
                    let targetViews = className("android.view.View").descContains(target).untilFind().filter(function (w) {
                        return w.desc().length >= 10;
                    });
                    if (targetViews.length <= viewIndex) {
                        break;
                    }
                    let targetView = targetViews[viewIndex++];
                    let text = targetView.desc();
                    text = text.substring(0, Math.min(10, text.length));
                    if (!targetViewMap.containsKey(text)) {
                        utils.sleep(1000);
                        utils.clickView(targetView);
                        utils.sleep(1000);
                        if (textContains("客服").findOnce() != null) {
                            utils.tryback(mainTarget);
                            continue;
                        }
    
                        let btns = className("android.view.View").untilFind()
                        var leaveMessage;
                        for (key in btns) {
                            let btn = btns[key]
                            try {
                                if (btn.desc() == null) {
                                    continue;
                                }
    
                                if (btn.desc() == "留言") {
                                    leaveMessage = btn;
                                    break;
                                }
    
                                if (!isNaN(btn.desc())) {
                                    leaveMessage = btn;
                                    break;
                                }
                            } catch (error) {
    
                            }
                        }
                        
                        utils.clickView(leaveMessage);
                        utils.sleep(1000);
                        try{
                            leaveMessage.setText(message)
                        } catch(error) {
                        }
                        try {
                            let leaveMessage2 = descContains("看对眼就留言").findOnce();
                            utils.clickView(leaveMessage2);
                            utils.sleep(1000);
                            leaveMessage2.setText(message)
                        } catch (error) {
                        }
                        try {
                            let leaveMessage3 = textContains("看对眼就留言").findOnce();
                            utils.clickView(leaveMessage3);
                            utils.sleep(1000);
                            leaveMessage3.setText(message)
                        } catch (error) {
                        }
                     
                        utils.sleep(1000);
                        let sendBtn = textContains("发送").findOnce();
                        if (sendBtn == null) {
                            console.warn("找不到发送按钮:" + text)
                            continue;
                        }
                        utils.clickView(sendBtn);
                        console.log("评论成功,避免被监控,停止1秒")
                        utils.tryback(mainTarget);
                        utils.sleep(3000);
    
                        targetViewMap.put(text, targetView);
                        console.log("当前成功评论个数:" + targetViewMap.size())
    
                        if (targetViewMap.size() >= limit) {
                            break;
                        }
                    }
                }
                while (true) {
                    if (scrollDown(0)) {
                        break;
                    }
                }
            }
    
            console.log("执行完毕");
    

    可以看到第3步挺多sleep的地方,都是为了等待界面渲染的时间,因为手机比较卡,所以等待的时间也相对长了些。

    最后将脚本打包后发给了大舅子,大舅子喜出望外…

    image-20211114141020001

    当然啦,大舅子开心,我也开心,毕竟抱得妹子归啊哈哈哈哈

    另外,我将自动化学习教程和实战例子都放到github和码云上了,有兴趣学习的可以拿去看

    image-20211113135002203

    image-20211113134947735

    github地址:脚本仓库

    码云地址:脚本仓库

    b站视频:教学视频

    展开全文
  • FANUC机器人程序员A培训教程(二)
  • 软件测试工程师全栈学习路线(程序员阿沐整理)
  • 自动化必经之路:前端开发基础知识以及互联网网络必备知识四、互联网程序原理 程序员威子 互联网程序原理 Web前端开发基础 HTML、CSS基本内容学习。为什么测试课程有开发?对不起,如果不会,自动化可能不欢迎,很多...
  • 无代码自动化测试的优秀实践与工具
  • 一文带你用python做自动化测试

    千次阅读 2022-02-22 21:57:27
    python 是目前测试推广最多的语言,翻翻各大招聘公司,...今天给大家带来的Python自动化测试,从零基础开始手把手有详细的步骤教你怎么写自动化测试。测试人员大多是希望利用编程语言来帮助他实现自动化的测试,而且
  • 为了提高工作效率,你也用了各种成熟的框架以及自动化测试的工具;总之,通过学习,你成为了一个牛B的程序员。 甚至,你也积累了管理的经验,主动学习了项目管理的理论知识、各种研发组织模式,也许会进阶到管理岗位...
  • 版本控制之道-Subversion.pdf 单元测试之道-JUnit.pdf 项目自动化之道-如何建构、部署、监控Java应用.pdf
  • FANUC机器人程序员培训课程V8-(3)
  • 前端Jest自动化测试

    千次阅读 2021-12-22 22:02:38
    前端自动化测试(前提条件) 高质量的代码设计 高质量的代码实现 Jest的优点 比较新:喜新厌旧是人的天性,新技术出来后你总想动手尝试一下,这个就和家花没有野花香是一个道理。作为一个程序员,你更要有拥抱...
  • 运维自动化-私人定制

    2015-05-14 15:11:16
    可视的监控指标 好用的日志分析 直观的业务量化指标 争取冗余的资源 用程序员的思维去思考运维
  • 压缩包包含的内容: 1)版本控制之道-使用Subversion 第2版.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 500,940
精华内容 200,376
关键字:

自动化程序员

友情链接: Counting radix.zip