85
Test How to not blow up spaceships

How to not blow up spaceships

Embed Size (px)

Citation preview

Test

How to not blow up spaceships

Sabin Marcu

! twitter.com/sabinmarcu "facebook.com/sabinmarcu # linkedin.com/in/sabinmarcu $ github.com/sabinmarcu

Sabin Marcu

• Startup in Analytics

! twitter.com/sabinmarcu "facebook.com/sabinmarcu # linkedin.com/in/sabinmarcu $ github.com/sabinmarcu

Sabin Marcu

• Startup in Analytics

• Developer (not Web Developer / Java Developer, etc)

! twitter.com/sabinmarcu "facebook.com/sabinmarcu # linkedin.com/in/sabinmarcu $ github.com/sabinmarcu

Sabin Marcu

• Startup in Analytics

• Developer (not Web Developer / Java Developer, etc)• 3rd Year – Computer Science @ Southampton Uni

! twitter.com/sabinmarcu "facebook.com/sabinmarcu # linkedin.com/in/sabinmarcu $ github.com/sabinmarcu

Sabin Marcu

• Startup in Analytics

• Developer (not Web Developer / Java Developer, etc)• 3rd Year – Computer Science @ Southampton Uni• Experience:

๏ Java, C++, PHP, JavaScript ๏ Projects starting from CMS / whole systems, to libraries and expetiments ๏ Relevant example: github.com/sabinmarcu/js-trans-compat-check

(Tests for verifying compatibity between different programming languages that get transpired to Javascript 1.5)

! twitter.com/sabinmarcu "facebook.com/sabinmarcu # linkedin.com/in/sabinmarcu $ github.com/sabinmarcu

Sabin Marcu

• Startup in Analytics

• Developer (not Web Developer / Java Developer, etc)• 3rd Year – Computer Science @ Southampton Uni• Experience:

๏ Java, C++, PHP, JavaScript ๏ Projects starting from CMS / whole systems, to libraries and expetiments ๏ Relevant example: github.com/sabinmarcu/js-trans-compat-check

(Tests for verifying compatibity between different programming languages that get transpired to Javascript 1.5)

• Research in Citizen Science

! twitter.com/sabinmarcu "facebook.com/sabinmarcu # linkedin.com/in/sabinmarcu $ github.com/sabinmarcu

Sabin Marcu

• Startup in Analytics

• Developer (not Web Developer / Java Developer, etc)• 3rd Year – Computer Science @ Southampton Uni• Experience:

๏ Java, C++, PHP, JavaScript ๏ Projects starting from CMS / whole systems, to libraries and expetiments ๏ Relevant example: github.com/sabinmarcu/js-trans-compat-check

(Tests for verifying compatibity between different programming languages that get transpired to Javascript 1.5)

• Research in Citizen Science• Did (a lot of) testing in SEG

! twitter.com/sabinmarcu "facebook.com/sabinmarcu # linkedin.com/in/sabinmarcu $ github.com/sabinmarcu

Sabin Marcu

• Startup in Analytics

• Developer (not Web Developer / Java Developer, etc)• 3rd Year – Computer Science @ Southampton Uni• Experience:

๏ Java, C++, PHP, JavaScript ๏ Projects starting from CMS / whole systems, to libraries and expetiments ๏ Relevant example: github.com/sabinmarcu/js-trans-compat-check

(Tests for verifying compatibity between different programming languages that get transpired to Javascript 1.5)

• Research in Citizen Science• Did (a lot of) testing in SEG

• HackaSoton from the very begining

! twitter.com/sabinmarcu "facebook.com/sabinmarcu # linkedin.com/in/sabinmarcu $ github.com/sabinmarcu

• Why we need testing, and what does it even mean

• Automatic testing

• UI testing

• Continuous integration (/ testing)

• Deployment

Spaceships?

Mars Climate Orbiter [1]

Mars Climate Orbiter [1]

• Joint mission between NASA & Lockheed

Mars Climate Orbiter [1]

• Joint mission between NASA & Lockheed• Launched in 1998

Mars Climate Orbiter [1]

• Joint mission between NASA & Lockheed• Launched in 1998

• In 1999 it desintegrated in Mars's atmosphere

[1] https://www.wikiwand.com/en/Mars_Climate_Orbiter

Mars Climate Orbiter [1]

• Joint mission between NASA & Lockheed• Launched in 1998

• In 1999 it desintegrated in Mars's atmosphere• NASA și Lockheed used different measurement units (lbs s | N s)

YouTube Video Count Break [1]

[1] http://goo.gl/Pwh7Es [2] https://www.youtube.com/watch?v=9bZkp7q19f0

YouTube Video Count Break [1]

[1] http://goo.gl/Pwh7Es [2] https://www.youtube.com/watch?v=9bZkp7q19f0

YouTube Video Count Break [1]

• Until 20144 YouTube was using Integers (32 bits) to store the number of views of a certain video (max 2,147,483,647)

[1] http://goo.gl/Pwh7Es [2] https://www.youtube.com/watch?v=9bZkp7q19f0

YouTube Video Count Break [1]

• Until 20144 YouTube was using Integers (32 bits) to store the number of views of a certain video (max 2,147,483,647)

• Gangnam Style [2] was the first such video to go over this limit

[1] http://goo.gl/Pwh7Es [2] https://www.youtube.com/watch?v=9bZkp7q19f0

YouTube Video Count Break [1]

• Until 20144 YouTube was using Integers (32 bits) to store the number of views of a certain video (max 2,147,483,647)

• Gangnam Style [2] was the first such video to go over this limit

• Fortunately, the problem was found and fixed beforehand (some observant tech)

[1] http://goo.gl/Pwh7Es [2] https://www.youtube.com/watch?v=9bZkp7q19f0

YouTube Video Count Break [1]

• Until 20144 YouTube was using Integers (32 bits) to store the number of views of a certain video (max 2,147,483,647)

• Gangnam Style [2] was the first such video to go over this limit

• Fortunately, the problem was found and fixed beforehand (some observant tech)

• Now, after that event, the limit is 9,223,372,036,854,775,808 views (64 bits)

if (!((_ok) ? true : (Math.random() > 0.1))) { return res; }

#define FALSE 0 #define TRUE !FALSE

if (!((_ok) ? true : (Math.random() > 0.1))) { return res; }

#define FALSE 0 #define TRUE !FALSE

if (!((_ok) ? true : (Math.random() > 0.1))) { return res; }

DefineProperty(object, “myproperty”, { get: function() { return this.myproperty; }.bind(object)

});

#define TRUE FALSE

#define FALSE 0 #define TRUE !FALSE

if (!((_ok) ? true : (Math.random() > 0.1))) { return res; }

DefineProperty(object, “myproperty”, { get: function() { return this.myproperty; }.bind(object)

});

#define TRUE FALSE

#define FALSE 0 #define TRUE !FALSE

if (!((_ok) ? true : (Math.random() > 0.1))) { return res; }

DefineProperty(object, “myproperty”, { get: function() { return this.myproperty; }.bind(object)

});#!/bin/bash while true; do $0 done

#define TRUE FALSE

#define FALSE 0 #define TRUE !FALSE

if (!((_ok) ? true : (Math.random() > 0.1))) { return res; }

#define TRUE random()%2

DefineProperty(object, “myproperty”, { get: function() { return this.myproperty; }.bind(object)

});#!/bin/bash while true; do $0 done

TDDTest Driven Development

JUnithttp://junit.org

BDDBehaviour Driven Development

???

Cucumberhttps://cucumber.io

Don’t believe google on this one

• Project Size

Don’t believe google on this one

• Project Size

• Project Complexity

Don’t believe google on this one

• Project Size

• Project Complexity

• Simplicity of task

Don’t believe google on this one

• Project Size

• Project Complexity

• Simplicity of task

• Experience of developers

Don’t believe google on this one

• Project Size

• Project Complexity

• Simplicity of task

• Experience of developers

• Chance of someone tracking you down and murdering you in your sleep if they have to continue your work

Don’t believe google on this one

Linting

Linting• Not a compiler

Linting• Not a compiler• Not an interpreter

Linting• Not a compiler• Not an interpreter• Not a syntax checker (although it also does that)

Linting• Not a compiler• Not an interpreter• Not a syntax checker (although it also does that)

Linting• Not a compiler• Not an interpreter• Not a syntax checker (although it also does that)

Somewhere in between.

Demo

ChickenChicken chicken, chicken chicken chicken?

ChickenChicken chicken, chicken chicken chicken?

https://www.youtube.com/watch?v=yL_-1d9OSdk

http://phantomjs.org

https://slimerjs.org http://casperjs.org

Casper Demo

Travis CI

https://travis-ci.org

Travis CI

https://travis-ci.org

Travis CI

https://travis-ci.org

Runs tests on push

Travis CI

https://travis-ci.org

Runs tests on push

Runs tests on pull request

Travis CI

https://travis-ci.org

Runs tests on push

Runs tests on pull request

Checking your code

Travis CI

https://travis-ci.org

Runs tests on push

Runs tests on pull request

Checking your code

Checking your coworker’s code

Travis CI

https://travis-ci.org

Runs tests on push

Runs tests on pull request

Checking your code

Checking your coworker’s code

Ensuring that deployment is

successful

Travis CI

https://travis-ci.org

Runs tests on push

Runs tests on pull request

Checking your code

Continuous Integration

Checking your coworker’s code

Ensuring that deployment is

successful

Process

• See how a test looks like

Process

• See how a test looks like

• Run tests and then check how different results look like

Process

• See how a test looks like

• Run tests and then check how different results look like

• Push tests to GitHub and check Travis CI Status

Process

• See how a test looks like

• Run tests and then check how different results look like

• Push tests to GitHub and check Travis CI Status

• Check Deployment Status and change local code

Process

• See how a test looks like

• Run tests and then check how different results look like

• Push tests to GitHub and check Travis CI Status

• Check Deployment Status and change local codeto generate a visible change in deployment

Process

• See how a test looks like

• Run tests and then check how different results look like

• Push tests to GitHub and check Travis CI Status

• Check Deployment Status and change local codeto generate a visible change in deployment

• There will be a quiz after