从业人员 作为 你觉得有什么工具大大提高了你的工作效率 IT (从业人员作为评审因素)

admin 2025-02-02 85 0

本文目录导航:

作为 IT 从业人员,你觉得有什么工具大大提高了你的工作效率?

我也谈谈自己的一些提高开发体验经验,就说软件工具部分。

这里的经验基本上都是冲着一个原则去的:“凡是需要重复做的,必须使用自动化工具完成。

从业人员 作为 你觉得有什么工具大大提高了你的工作效率 IT (从业人员作为评审因素)

1. 版本控制一般自己的项目使用git,公司开发规定用svn。

反正不管怎么样,版本控制少不了。

有个说法,没有版本控制的项目,就等于没有。

版本控制的好处太多了,用过的人都知道。

等于历史版本 + 代码备份了。

这个提到的很多,就不多说了。

2.单元测试工具写程序需要验证,如果快速知道新的代码和过去的写的代码不冲突,这个时候单元测试就能起到作用了。

当然单元测试的功能不仅仅是这个:

这个是现代开发流程的基本模块之一,没有单元测试的项目,不是一个合格完整的项目。

有了单元测试,就再也不用担心在大项目中,自己做的小修改有会有什么大影响了。

开发压力大大减少PHP的我用的是PHPunit,JavaScript用过的就多了,Jasmine,Qunit,Mocha等工具(不管哪一个,至少要用到一个)C#一般用nUnit。

还有各种mock,faker辅助。

3.功能测试工具就是交互界面测试,也可以是界面样式测试。

代码写的方式大致过程和单元测试差不多,不过单元测试每个单元都是独立的,理论上不应该有任何依赖关系(只要有依赖关系就叫做集成测试);而功能测试,就是最后成品的测试,必须把所有依赖打开,并且在界面上进行测试。

界面功能测试的优点:

缺点:

功能测试,也是自动测试的一种,至少解放了大量重复性劳动,大大提升界面功能开发的速度。

功能测试工具主要有phantomjs和Selenium。

我两个都用,根据不同情况使用不同策略。

4. 依赖管理/程序包管理器

有了依赖管理,从此不用再手动去每个库的官方网站下载和更新库了。

配置一下,运行一下命令行,然后就下载好了,定时在运行一下命令行,所有库又更新到最新版本了。

开发体验大大提高。

列举一下主要好处:

依赖管理下载速度快,免除开发人员手动的重复劳动。大大提高开发效率

PHP的依赖管理是composer,js的依赖管理是npm和bower,C#的是nuget,

5. 流程管理/构建工具

这个叫法很多还有叫做任务自动管理工具的,不管是什么名字,都是一个意思:自动化流程管理。

简单的说从源代码到产品之间,中间还有一个复杂的过程,一般大致如下:

一般对开发人员来说,凡是重复的,必须使用工具自动完成。

开发人员是不愿意重复做这些流程,所以需要流程管理,把这些步骤全部用代码编排好,然后执行一个命令行,让电脑反复执行去。

没有流程管理的项目不是一个好项目

JavaScript有grunt和gulp,PHP有Phing,Java有ANT。

我用grunt比较多。

6. Live Reload

Live Reload一般是和流程管理一起使用的,(也有独立使用的版本)。

独立出来说也是为了体现程序员一个终极特质:懒。

凡是重复的,必须使用工具完成。

Live Reload就是这个体现:按F5是个重复的低效率行为,必须交给工具完成

Live Reload的功能说起来很简单:

给开发人员带来的直接好处就是查看页面变动,只要按ctrl+s保持代码就行了,连f5都不用按了。

就这好处,足以把Live Reload这个工具当作神器了。

配合流程管理工具,只要保存代码(ctrl+s),就马上进行构建,构建完成自动刷新页面。

我用的Live Reload是grunt-contrib-watch。

7.代码质量分析工具

人工检查代码的效率是比较低下的,所以质量分析这一块可以作为开发辅助工具,来提高开发质量

常见的代码质量工具有:

等等,让然还有其他的质量分析,这些都是可以整合到流程管理上的。

JavaScript和PHP的用的比较多,Jshint,Jscs,uglifyjs,phpcpd,phpcs,phpdcd,PHPLOC等等工具,可以帮助开发人员提高代码质量,控制团队代码风格。

8.持续集成

有人和我说过,持续集成可以让你开发水平提高达到到另外一个层级。

当我实践后,终于明白持续集成的魅力所在了。

要会持续集成,你首先必须学会以上6条(live reload除外),以上6条基本就是持续集成的几个基础模块,学会后,你自然而然就已经会了持续集成了。

持续集成的主要流程如下

当你设置好一个持续集成的项目后,以上的步骤应该就是全自动的了。

还是那句老话: 凡是重复的步骤,应该用工具来完成。

而持续集成就是这个终极工具。

持续集成其实就是流程管理的一个升级版本,或者说一个扩充。

它们都是自动流程工具。

它们的差别是:

我们可以设想一下这样的一个情况,在有20-50个人的团队在开发一个PHP项目,每个人每天至少往版本控制中push大约10次新代码,而这个项目你又要保证在3个主流的浏览器中功能一致,样式相同,而这个项目又必须跨平台,可以在mac,window,linux上都可以运行,而且还要保证PHP5.4~5.6都可以运行。

这个时候,持续集成系统的优势就会显示其真正的威力了。

总之,在一个专业项目中,持续集成服务所提供的自动构建和专业报告,可以把项目开发的专业水准再次提高到一个新的层次当中。

我用过的持续集成是Jenkins。

文章到此算完结了。

其实开发中,还有很多优秀的工具,但无法和这些主要的开发工具相比,就不在这里说了。

为什么说单元测试能发现约80%的软件缺陷

不好意思,没看过这个笔试问题,不过经验看来,这个80%有点高,因为:1.单元测试是开发自己测自己,比较倾向于用合法的数据保证功能的完成2.开发过程中,有的需求都没有确定,开发没法做单元测试3.因为各个模块的开发在单元测试的时候都是模拟其他模块的数据来交互的,一旦进入集成和系统测试,会带来大量问题,数据格式不对,数据长度不对,等等,我们不能假设在紧张的项目中,各个组能完整的沟通相互间的接口问题。

还有很多是在设计中根本想不到的。

等等

如何判断报告单元 reporting unit

PHPUnit是一个用PHP编程语言开发的开源,是一个单元测试框架。

PHPUnit由Sebastian Bergmann创建,源于Kent Beck的SUnit,是xUnit家族的框架之一。

本文将探索PHPUnit,特别介绍自动化单元测试的基本用法。

你需要掌握PHP编程语言的基本知识才能继续。

介绍单元测试是对单独的代码对象进行测试的过程,比如对函数、类、方法进行测试。

单元测试可以使用任意一段已经写好的测试代码,也可以使用一些已经存在的测试框架,比如JUnit、PHPUnit或者Cantata++,单元测试框架提供了一系列共同、有用的功能来帮助人们编写自动化的检测单元,例如检查一个实际的值是否符合我们期望的值的断言。

单元测试框架经常会包含每个测试的报告,以及给出你已经覆盖到的代码覆盖率。

heiingheiing翻译于 4年前5人顶顶翻译得不错哦!安装PHPUnit 通常以 PEAR 包,Composer bundle 或是 PHAR 文件形式存在。

如果你要安装它,你需要先安装 PHP Code Coverage 依赖。

在 PEAR 中,你需要天价 频道,并通过命令行安装两个包:PHP Unit Testing with PHPUnit (注意,在输入时,默认的 XAMPP 的 PEAR 安装已经被破坏:你需要在尝试上面代码之前先安装 PEAR PHAR)。

测试一个简单的类试试只有单一方法的简单类:class TruthTeller{public function() tellTruth{return true;}}是的,现在 tellTruth 方法总是返回 TRUE,那么我们应改怎么通过单元测试确保今后它的返回值不变?K6FK6F翻译于 4年前4人顶顶翻译得不错哦!使用PHPUnit,每组测试是PHPUnit_Framework_TestCase类的一个扩展类,它提供了常用的功能,如判断。

下面是一个对上述tellTruth方法的一个基本测试:require_once PHPUnit/;require_once ;class TruthTester extends PHPUnit_Framework_TestCase{function testTruthTeller(){$tt = new TruthTeller();$this->assertTrue($tt->tellTruth());}}请注意,您需要包括PHPUnit的自动加载器和“被测对象”,在这种情况下的TruthTeller类文件。

我们用剩余的代码要做的就是判断,如果tellTruth方法被调用时,它将返回true。

这些判断是PHPUnit的核心 - 它们将决定一个测试是通过还是失败。

Holiday_Holiday_翻译于 4年前2人顶顶翻译得不错哦!如果你启动了命令行提示,切换到你的测试所在目录,运行 phpunit TruthTester (参数是你的测试文件名,去除 扩展名),PHPUnit 将会运行文件中指定的所有它能找到的测试(测试将是名字以 test 开头的所有方法)。

PHP Unit Testing with PHPUnit如果你回到 TruthTeller 类,并将其方法的返回值改为 FALSE,你讲看到类似下面的信息:PHP Unit Testing with PHPUnit这就是单元测试的核心——编写断言并判断是否通过。

当先前编写并测试通过的代码开始无法通过时,你就知道有更改的代码对现有代码起了负面影响。

在现实中,你肯定需要处理比上一个更复杂的情况。

比如一个常见的测试是检查下面的outputArray方法是否返回了一个特定数据结构的数组。

class ArrayTeller{public function outputArray(){return array(1,2,3);}}对此方法的一个简单测试可以这样写:class ArrayTester extends PHPUnit_Framework_TestCase{function testArrayTeller(){$at = new ArrayTeller();$result = $at->outputArray(1);$this->assertInternalType(array, $result);$this->assertCount(3, $result);$this->assertEquals(1, $result[0]);$this->assertEquals(3, $result[2]);}}如你所见,使用PHPUnit进行单元测试时可以在每一行进行多样化的检查:可以检查ArrayTeller返回的是否是一个数组,而非任何其他数据类型;可以检查数组的长度;可以检查数组中的单个值。

除这些外,还有其它一些功能的断言,比如如果你需要更复杂的判断,假设要知道一个返回值是否处于两个整数的区间内,只要你能用一个IF语句的结果来表述,你就可以用断言assertTrue来测试结果。

可点击随后链接来访问PHPUnit文档中的所有可用断言列表,。

单元测试片面的讲就是编写覆盖被测方法所有预期行为的测试,最好基于规范文档,不过如果你在编写覆盖现有代码的单元测试,将其视为白盒测试的一种形式更有用。

如果你知道一个如下的简单切换方法:class Switcher{public function aOrB($switch, $a, $b){if ($switch == TRUE){return $a;}else{return $b;}}}… 你就知道需要编写两个测试,分别针对一种情形。

但你开始质疑你是如何知道这些的——如果以后方法变为 True 返回 $a,False 返回 $b,其它情形抛出一个异常,理想情况是规范文档中的某处有提及。

无论如何,上面方法的测试如下:class SwitcherTester extends PHPUnit_Framework_TestCase{function testSwitchTrue(){$switcher = new Switcher();$result = $switcher->aOrB(TRUE, 1, 2);$this->assertEquals(1, $result);}function testSwitchFalse(){$switcher = new Switcher();$result = $switcher->aOrB(FALSE, 1, 2);$this->assertEquals(2, $result);}}运行两个测试同在命令行运行 phpunit SwitcherTester 一样简单。

K6F使用 setUp,简化多个测试当你的测试需要覆盖越来越多的输入组合及数据设置时,使用函数: setUp 将会非常有帮助。

setUp 是 PHPUnit_Framework_TestCase 类中你可以覆写以在类中所有及每个测试运行前运行的代码。

(注意,还有一个简单的方法,tearDown,它会在所有测试结束后立即运行——这对关闭 socket 及文件指针很有帮助)下面是如何精简代码的一个简单的例子。

尝试一个依赖一些对象数据何输入的方法。

class DataTeller{private $data;public function __construct($data){$this->data = $data;}public function outputData($switch){if ($switch == TRUE){if (!empty($this->data))return $this->data;elsereturn FALSE;}else{return switch off;}}}如果你继续之前幼稚的方法,我们需要编写三个测试,并实例化三个 DataTeller 对象,每个测试一次。

然而,通过 setUp,我们可以讲对 DataTellers对象的创建,至少是3个中的两个。

只有最后一个测试需要新的 DataTeller 被创建。

class DataTellerTester extends PHPUnit_Framework_TestCase{private $dt;protected $data = valid data;function setUp(){$this->dt = new DataTeller($this->data);}function testOutputArraySwitchOff(){$this->assertEquals(switch off, $this->dt->outputData(FALSE));}function testOutputArraySwitchOn(){$this->assertEquals($this->data, $this->dt->outputData(TRUE));}function testOutputArrayEmptySwitchOn(){$new_dt = new DataTeller();$this->assertEquals(FALSE, $new_dt->outputData(TRUE));}}PHPUnit使用断言来告诉你你所测试的代码是否如你预期那样工作。

学到这里,你现在应该已经可以写一些简单的测试来覆盖一些功能相对比较独立的类了。

但当要测试一些互相有交互操作的类时,就要面对真正的挑战了。

为此,请收听下一次讲解,学习如何为静态类写测试,以及如何使用 mock(模拟对象)和 stubs(存根,桩点)来孤立你要测试的对象与其所在环境中其他代码的联系。

评论(0)