编程范式巡礼(最终季)--超级范式 本周是编程范式系列的最后一次分享,让我们拉长视角,看向远方,进入"元编程"的领域,在<冒号课堂>中起了个很酷的名字:"超级范式". 从通用语言到领域语言 先给大家做一个小练习: 以下哪些属于编程语言: A.Java B.Html C.Spring Bean Definition D.Comment 答案是ABC,从中,我们可以感受到编程语言的一些特性: 必需:有语法结构.可运行 可选:可编译.可调试.可扩展 类似人类语…
编程范式巡礼第一季 三大基石 最近迷上了一些哲史类书籍,回望过去.放眼未来,往往沉浸在其思维之美中无法自拔.计算机编程是一门非常年轻的学科,沉淀不足也是年轻的一个侧面,在编程领域,有足够思想深度的作品并不多.这本书的作者老冒我觉得就是一个有深度的人.这周开始,给大家讲一下他的好书<冒号课堂>. 编程范式是什么? 在年底的各大媒体的展望中,我发现编程能力已经悄悄然占据了比较重要的位置,被认为是一种影响未来的能力.编程从宏观上讲就是操作计算机工作的方法,而从微观上讲是寻求一种机制,将指定的输入转换…
编程范式巡礼第二季 并发那些事 继续上周的编程范式话题,今天想聊一下并发范式. 并发也算一种范式? 真正的并发式编程,绝不只是调用线程API或使用synchronized.lock之类的关键字那么简单.从宏观的架构设计,到微观的数据结构.流程控制乃至算法,相比通常的串行式编程都可能发生变化.毫不夸张的说,是又一场思想和技术上革命. 在日常开发中,并发编程难度是比较高的,属于高级程序员才能掌握的内容.其难点在哪里,我们日常习惯的是线性思维,这与并发编程的多维世界观是不同的,提升思考的维度无疑是艰难…
编程范式巡礼第三季--谈谈依赖反转 今天会进入深一点的主题,谈一个软件开发的"道":依赖反转.根据我的观察,这也是架构师与程序员的分水岭之一. 什么是依赖反转 引出问题 让我们从Uncle Bob和小明的一段对话开始.原文地址:如何成为一名优秀的架构师 小明:我要领导一个团队,还要做所有关于数据库.框架和Web服务器的重要决定. Uncle Bob:好吧,如果是这样,你就没必要成为一名软件架构师了. 小明:当然有必要了!我要成为一个能够做所有重要决定的人. Uncle Bob:这样很好…
xUnit.Net本身提供了标记测试方法的标签Fact和Theory.在前面的文章<Lesson 02 玩转 xUnit.Net 之 基本UnitTest & 数据驱动>中,也对它们做了详细的介绍.这一篇,来分享一个高级点的主题:如何扩展标签?还是老规矩,看一下议题: 概述 让xUnit.Net识别你的测试Attribute 定义运行策略:XunitTestCase 与Runner交流:消息总线 - IMessageBus 总结 这一篇有一些不大容易理解的东东.因此,我是默认读者已经读…
这一篇,本文会介绍一下基本的断言概念,但重点会放在企业级单元测试的相关功能上面.下面来跟大家分享一下xUnit.Net的断言,主要涉及到以下内容: 关于断言的概念 xUnit.Net常用的断言 关于单元测试实践的讨论 xUnit.Net比较器:IEqualityComparer接口 重构Demo:浅谈UT框架实践 扩展实现 : 集合比较 异步处理 结合.Net平台能力:类型扩展 (一)关于断言的概念 提到断言,我想先说说概念上的东西.其实,断言不是单元测试才有的东西.先看一段断言的概念描述: 断…
上一篇文章<[小北De编程手记] : Lesson 03 玩转 xUnit.Net 之 Fixture(上)>向大家介绍了xUnit.Net 共享数据的方式.Test Case的构造函数 & IDisposable.Dispose.Class级别的Fixture : IClassFixture.这一篇,我们接着讲解后面的内容,回顾一下本文要讨论的内容: xUnit.Net 共享数据的方式(上) Test Case的构造函数 & IDisposable.Dispose(上) Cl…
本文想跟大家分享的是Selenium对PageObject模式的支持和自动化测试团队的构建.<Selenium For C#>系列的文章写到这里已经接近尾声了,如果之前的文章你是一篇篇的读下来并动手实践的话,我相信你应该可以模拟日常工作中80%常见的手动测试用例了.请注意:我的用词是模拟用例,而不是书写自动化测试用例.一个企业级的自动化测试的构建不是单靠Selenium一种技术就能Hold住的.所谓模拟指的是只能实现自动化的某个Case,但是不能工程化的使用.在本人所接触过几家公司的自动化测试…
Spark小课堂Week3 FirstSparkApp(代码优化) RDD代码简化 对于昨天练习的代码,我们可以从几个方面来简化: 使用fluent风格写法,可以减少对于中间变量的定义. 使用lambda表示式来替换对象写法,可以使用到类型推断功能,减少对于类型的定义. 优化后代码如下: return this.getInputRDD(PracticePojo.class) .mapToPair( practicePojo -> new Tuple2<>(practicePojo.get…
Spark小课堂Week3 FirstSparkApp 问题:Java有哪些数据结构 大致有如下几种,其中List与Map是最重要的: List Map Set Array Heap Stack Queue Tree 练习:构造一个1-5的List,把他们打印出来 写法1 List<Integer> input = Arrays.asList(1, 2, 3, 4, 5); for (int i = 0; i < input.size(); i++) { System.out.print…
Spark小课堂Week2 Hello Streaming 我们是怎么进行数据处理的? 批量方式处理 目前最常采用的是批量方式处理,指非工作时间运行,定时或者事件触发.这种方式的好处是逻辑简单,不影响联机业务,但是性能不行. 理想方式 对于数据处理的问题,我们的最终理想解,应该是满足业务规则正确的情况下,实时的完成处理. 平衡点 理想方式难度比较高,批量方式往往又不给力,我们可以在批量方式和理想方式中间,找到一个平衡点,就是流处理. 流处理 我们的理想情况是当不断有数据进来,就不断的进行处理.…
本期[云原生小课堂]将带你入门PXC--公认的MySQL集群优选方案.…
在使用xUnit.Net Framework构建单元测试或自动化测试项目的时候,无论是针对一些比较耗费资源的对象亦或是为了支持Test case预设数据的能力,我们都需要有一些初始化或是清理相关的动作.在xUnit.Net中,提供了多种方式来满足我们的需要.还是照例看一下本文要讨论的内容: xUnit.Net 共享数据的方式(上) Test Case的构造函数 & IDisposable.Dispose(上) Class级别的Fixture : IClassFixture(上) Collecti…
关于<玩转 xUnit.Net>系列文章,我想跟大家分享的不是简单的运行一下测试用例或是介绍一下标签怎么使用(这样的文章网上很多).上一篇<Lesson 01 玩转 xUnit.Net 之 概述>介绍xUnit.Net的一些基本概念.从这一篇开始我将会为大家逐一展示xUnit.Net的强大之处.还是先看一下本文要讨论的内容: xUnit.Net 单元测试用例的类型 简单测试用例 & Fact 标签 数据驱动的用例 & Theory 标签 (一)xUnit.Net 单…
谈到单元测试,任何一个开发或是测试人员都不会觉得陌生.我想大多数的同学也都是接触过各种单元测试框架.关于单元测试的重要性,应该不会有太多的质疑.这个系列,我向大家介绍一下xUnit.Net的使用.就让我们一起来玩转xUnit.Net吧.本文要讨论的内容如下: 单元测试框架提供了什么 .Net平台常见单元测试框架介绍 xUnit.Net简介 xUnit.Net 安装 第一个xUnit.Net Case (一)单元测试框架的提供了什么 有很多小伙伴经常会提到所谓“框架”,框架这样的概念有很多比如:X…
写<Selnium For C#>系列文章的初衷是因为有很多朋友问我应该从哪里开始学习自动化测试,于是就为大家写下了这个系列的文章,希望对你有些帮助吧.而我想表达的是Selenium(同时也包括或是QTP,Appium等其他的技术)也不过是一个简单的技术实现而已,而对于初学者往往是急于掌握一门技术.其实,测试的思维方式,设计理念,测试计划... ... 这些的东西才是真正决定了一个自动化测试的构建成败的主要原因(但技术也是必不可少的啦~~).在一开始就明白这些对初学的小伙伴是很有意义的.没想到…
在实际的自动化测试过程中,我们会遇见许多需要对窗口进行处理的情况.比如,点击删除某条信息的时候系统会显示一个Alert框.或者点击某个超链接时会在浏览器中打开一个新的页面.这一篇,来和大家分享一下Selenium WebDriver窗口处理相关的API.那么,还是照例先看一下本文主要涉及到的话题: 窗口处理接口:ITargetLocator 浏览器弹出窗口的处理(新页面) JavaScript弹出框的处理:Alert, Confirm, Prompt 内嵌框架的处理:Frame , iFrame…
无论你是用哪一种自动化测试的驱动框架,当我们构建一个复杂应用程序的自动化测试的时候.都希望构建一个测试流程稳定,维护成本较低的自动化测试.但是,现实往往没有理想丰满.而这一篇,我会为大家讲解我们在使用Selenium进行Web测试的时候应该如何控制我们的测试流程,从而尽可能地提高自动化测试可维护性.那么,先看一下这一篇的内容主要涉及到的话题: 自动化测试的成本 隐式的等待同步策略 显式的等待同步策略 自定义等待同步策略(一些关于自动化框架设计的探讨) (一)自动化测试的成本 <Selenium…
在我看来一个自动化测试平台的构建,是一种很好的了解开发语言,单元测试框架,自动化测试驱动,设计模式等等等的途径.因此,在下选择了自动化测试的这个话题来和大家分享一下本人关于软件开发和自动化测试的认识.刚刚开通了博客,就从最基础的开始吧,算是写给初学者的编程手记,也算是给对自动化完全不了解的小伙伴开个头.时间允许的话会坚持更新下去... ... 后续的文章计划会谈到一些企业级自动化测试平台的构建(但愿有时间完成哈~~). 关于自动化测试的框架,网上有很多相关的对比,在这里我我就不评论和对比了.本人…
小课堂Week12 Clean Code Part1 今天的主题是函数,让我们看一个函数,找一找其中的"不整洁". 我们也根据这段代码,讨论下对于整洁代码的两个重要原则. public static String testableHtml(PageData pageData, boolean includeSuiteSetup) throws Exception { WikiPage wikiPage = pageData.getWikiPage(); StringBuffer buf…
小课堂Week11 会说话的代码 今天主要讨论下,在编码过程中和"命名"相关的问题.因为命名方法比较自由,如果要提高可读性,我们需要尽量使其符合正规的英文语法习惯. 变量/属性 通常来说,变量/属性应该是一个名词,比如message. 但有两种特殊情况要注意: 比如如下代码, List<Message> getMessageList(String name){ } messageList的写法并不好,应该使用复数的名词. List<Message> getMes…
小课堂Week10 例外处理设计的逆袭Part3 今天是<例外处理设计的逆袭>这本书阅读的第三天,也是最后一天,我们会主要通过实例,对Part2中提出的例外处理等级进行解读. Level1 Level1的要求是立即中止运行 ,所有例外都往外抛,全部报告给使用者,或者开发者使用. 案例1 我们看一个实例,如下代码存在一些什么样的问题: public int withdraw(int amount) { if (amount > 100) return -1; else return 100…
小课堂Week9 例外处理设计的逆袭Part2 今天继续阅读<例外处理设计的逆袭>这本书,我们先看两个案例: 案例1 问:如果要设计一个依据学号到数据库中查询学生资料的函数,当找不到符合条件的学习资料时候,是不是要丢出异常? 分析: 根据Part1中的介绍,例外的生命周期包括fault.error.failure,那么要抛出的首先应该是一个fault. 让我们看下案例中的这个场景属于哪类fault. 首先,这个不是component fault,因为与环境无关. 找不到资料,看起来是主观引入的…
小课堂Week8 例外处理设计的逆袭Part1 今天和大家讲一本书,书名是<例外处理设计的逆袭>. 为什么想讲这本书,是因为,例外处理在程序代码中到处存在,但是这些到底该如何写好,总觉得有些懵懵懂懂.正好听到Jackson老师的推荐,读到了这本书,如获甘霖,好东西和大家分享. 什么是例外处理 这本书的作者是一位台湾的大牛叫Teddy Chen.台版和港版的书有一个比较好的习惯,就是对于英文的技术词汇,解释但不翻译,因为中文和英文在某些词汇的描述上强度是不同的,直译往往会丢失一部分的含义,所以先…
Spark小课堂Week7 从Spark中一个例子看面向对象设计 今天我们讨论了个问题,来设计一个Spark中的常用功能. 功能描述:数据源是一切处理的源头,这次要实现下加载数据源的方法load() 初始需求 需求:支持Json数据源加载 具体:输入一个path,需要返回一个Relation, Relation中提供scan()和write()两个方法 示意代码: class Context{ public Relation json(String path){ return new Relat…
Spark小课堂Week6 启动日志详解 作为分布式系统,Spark程序是非常难以使用传统方法来进行调试的,所以我们主要的武器是日志,今天会对启动日志进行一下详解. 日志详解 今天主要遍历下Streaming的启动日志. 授权等操作 Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties 16/07/19 15:06:04 INFO SparkContext: Running Spark ve…
Spark小课堂Week5 Scala初探 Scala是java威力加强版. 对Java的改进 这里会结合StreamingContext.scala这个代码说明下对Java的改进方面. 方便测试方式,增加了可以指定位置的作用域. 成员变量声明,构造方法,get.set方法一体化. []表示泛型,不是<> class StreamingContext private[streaming] ( 
 sc_ : SparkContext, 
 cp_ : Checkpoint,
 batchDur…
Spark小课堂Week4 从控制台看Spark逻辑结构 层级关系: 从监控控制台,我们可以看到如下关系: 一个 Job 包含 n Stage 一个 Stage 包含 n Task Job0解决什么问题? 在控制台,有一个Job0,负责进行数据接收. 其实这个程序并没有分布式的需求,为什么要采用Job来管理: 主要解决了几个问题: 程序出现异常,Job可以自动重启. 程序运行过程中有监控.度量等需要,Job可以自动完成. 如何确定运行的节点,Job可以自动调度. 所以Job就是一个有异常恢复.可…
Spark小课堂Week1 Hello Spark 看到Spark这个词,你的第一印象是什么? 这是一朵"火花",官方的定义是Spark是一个高速的.通用的.分布式计算系统!!! 用途:进行大数据计算,这里要注意,大数据是一个相对概念,并没有绝对的量化指标,一般我们认为在业务特定场景要求下,一台机器处理不了的数据都能称为大数据. 前身:大数据计算的开山鼻祖Hadoop,Spark和Hadoop的主要区别就是更快,更通用. 功能:Spark内核设计的非常通用,具有很高的扩展性,目前已经发…
写在最前面 这个系列的主旨是要跟大家分享一下关于自动化测试框架的构建的一些心得.这几年,做了一些自动化测试框架以及团队的构建的工作.过程中遇到了很多这样的同学,他们在学习了某一门语言和一些自动化测试的类库或者工具之后,打算进一步的提高.我想这个系列也许会帮助到你,我们一起从各个维度来看一看自动化测试框架的一些最佳实践.本人能力有限,如果有什么不正确的的地方还各位大牛指正. 聊聊自动化测试的初心 在开始具体的技术和理论之前,我们先来思考一下自动化测试的目的是什么?我简单的罗列了几点: 替代手工测试…