1"use strict";(self.webpackChunkstryker_mutator_github_io=self.webpackChunkstryker_mutator_github_io||[]).push([["8204"],{30070:function(e,t,n){n.r(t),n.d(t,{assets:function(){return h},contentTitle:function(){return o},default:function(){return u},frontMatter:function(){return a},metadata:function(){return r},toc:function(){return l}});var r=n(10095),i=n(94686),s=n(23191);let a={slug:"happy-new-stryker",title:"Happy new Stryker!",authors:"nicojs",tags:["stryker-js"]},o,h={authorsImageUrls:[void 0]},l=[{value:"2017 - The year to invest into test quality",id:"2017---the-year-to-invest-into-test-quality",level:2},{value:"Mutation testing in JavaScript",id:"mutation-testing-in-javascript",level:3},{value:"Stryker Hackweek 2016",id:"stryker-hackweek-2016",level:2},{value:"Achieved goals",id:"achieved-goals",level:3},{value:"The Hackweek Team",id:"the-hackweek-team",level:3},{value:"Want to try out Stryker? Begin with the handy quick start guide.",id:"want-to-try-out-stryker-begin-with-the-handy-quick-start-guide",level:4}];function c(e){let t={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h2,{id:"2017---the-year-to-invest-into-test-quality",children:"2017 - The year to invest into test quality"}),"\n",(0,i.jsxs)(t.p,{children:["Up until now, when you were writing unit tests, you were actually investing in ",(0,i.jsx)(t.em,{children:"code quality"}),". Catching bugs early by continuously\nexercising your code with unit tests and keeping your stakeholders happy by presenting them with a code coverage number of 85% or higher.\nBut does code coverage tell the entire story? Are your tests actually able to detect bugs? How do you test ",(0,i.jsx)(t.em,{children:"your tests"}),"?\nThat's the problem ",(0,i.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Mutation_testing",children:"mutation testing"})," sets out to solve."]}),"\n","\n",(0,i.jsx)(t.h3,{id:"mutation-testing-in-javascript",children:"Mutation testing in JavaScript"}),"\n",(0,i.jsxs)(t.p,{children:["Due to JavaScript's dynamic nature, unit testing has become a fundamental tool to bring a higher level of robustness to JavaScript projects.\nYour average JavaScript app can easily have around 1,000 unit tests. Ensuring that these are actually ",(0,i.jsx)(t.em,{children:"effective"})," can be a full-time job. This is where Stryker comes in.\n",(0,i.jsx)(t.a,{href:"https://stryker-mutator.github.io/",children:"Stryker Mutator"})," is our approach to providing a comprehensive mutation testing tool for the JavaScript environment."]}),"\n",(0,i.jsxs)(t.p,{children:["We start out by altering your source code ever so slightly (e.g. turning a ",(0,i.jsx)(t.code,{children:"+"})," into ",(0,i.jsx)(t.code,{children:"-"}),") and then running your tests to see if they are\nresilient to this ",(0,i.jsx)(t.em,{children:'"mutant"'}),". If they are (and they fail), all is fine - the ",(0,i.jsx)(t.em,{children:"mutant is dead"}),". If they don't, the ",(0,i.jsx)(t.em,{children:"mutant"})," survived and you have to fix your test."]}),"\n",(0,i.jsx)(t.h2,{id:"stryker-hackweek-2016",children:"Stryker Hackweek 2016"}),"\n",(0,i.jsxs)(t.p,{children:["Stryker began its life as the thesis project of Simon de Lang. After graduating, his thesis tutor Nico Jansen joined him and continued development in the open on ",(0,i.jsx)(t.a,{href:"https://github.com/stryker-mutator/",children:"GitHub"}),".\nSince then they had five major releases, improving performance, adding support for the ",(0,i.jsx)(t.a,{href:"https://karma-runner.github.io/1.0/index.html",children:"Karma"})," and ",(0,i.jsx)(t.a,{href:"https://mochajs.org/",children:"Mocha"})," test runners,\nas well as creating a fancy ",(0,i.jsx)(t.a,{href:"https://github.com/stryker-mutator/mutation-testing-elements/tree/master/packages/mutation-testing-elements",children:"HTML reporter"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"Up until now, the two of them did all of this in their own time, next to their daytime jobs as software engineers."}),"\n",(0,i.jsxs)(t.p,{children:["Around came the traditionally slow Christmas time period, allowing a select few of their colleagues at ",(0,i.jsx)(t.a,{href:"https://www.infosupport.com/",children:"Info Support"})," to join them for 4 days for the ",(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.em,{children:"Stryker Hackweek 2016"})}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"achieved-goals",children:"Achieved goals"}),"\n",(0,i.jsx)(t.p,{children:"The whole team enjoyed the experience a lot and had good fun extending Stryker and fixing issues.\nWe mostly concentrated on integrating Stryker with SonarQube, as well as improving the first time usage experience."}),"\n",(0,i.jsxs)(t.p,{children:["All in all we made ",(0,i.jsx)(t.strong,{children:"47 commits"}),", closed ",(0,i.jsx)(t.strong,{children:"18 issues"}),", eat ",(0,i.jsx)(t.strong,{children:"6 kebabs"})," and ",(0,i.jsx)(t.strong,{children:"4 subway sandwiches"}),"!\nHere's a quick overview of what we did:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Created a ",(0,i.jsx)(t.a,{href:"https://github.com/stryker-mutator/sonar-stryker-plugin",children:"Stryker SonarQube plugin"}),", that turns survived mutants into neat SonarQube issues"]}),"\n",(0,i.jsxs)(t.li,{children:["Added ",(0,i.jsx)(t.a,{href:"https://stryker-mutator.github.io/blog.html",children:"a blog"})," to the Stryker homepage"]}),"\n",(0,i.jsx)(t.li,{children:"Upgraded the TypeScript compiler in all projects to 2.1"}),"\n",(0,i.jsxs)(t.li,{children:["Released ",(0,i.jsx)(t.a,{href:"https://stryker-mutator.github.io/blog/2016-12-30/stryker-0-5-5.html",children:"version 0.5.5 of Stryker"}),", including:","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"A new progress reporter"}),"\n",(0,i.jsx)(t.li,{children:"Limit the number of test-names to log in the clear text reporter"}),"\n",(0,i.jsxs)(t.li,{children:["Support to ",(0,i.jsx)(t.a,{href:"https://github.com/stryker-mutator/stryker-js/issues/90",children:"exclude online files from globbing"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["Support for ",(0,i.jsx)(t.a,{href:"https://github.com/stryker-mutator/stryker-js/tree/master/packages/stryker-karma-runner/issues/7",children:"karma config parsing in the stryker
1-karma-runner"})]}),"\n",(0,i.jsx)(t.li,{children:"Improved documentation for first time-users"}),"\n",(0,i.jsx)(t.li,{children:"A plan for a series of blog articles"}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"the-hackweek-team",children:"The Hackweek Team"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"The Hackweek Team (f.l.t.r.): Alex van Assem, Nico Jansen, Simon de Lang, Philipp Weissenbacher, Jasper Catthoor, Wannes Van Regenmortel",src:n(19725).A+"",width:"553",height:"485"})}),"\n",(0,i.jsx)(t.p,{children:"The Stryker Hackweek team consisted of (from left to right):"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Alex van Assem: Agile coach and TypeScript hacker"}),"\n",(0,i.jsx)(t.li,{children:"Nico Jansen: T-shaped software engineer"}),"\n",(0,i.jsx)(t.li,{children:"Simon de Lang: Software engineer and TypeScript aficionado"}),"\n",(0,i.jsx)(t.li,{children:"Philipp Weissenbacher: Software/BI engineer"}),"\n",(0,i.jsx)(t.li,{children:"Jasper Catthoor: Software engineer (via Info Support Belgium)"}),"\n",(0,i.jsx)(t.li,{children:"Wannes Van Regenmortel: Software engineer (via Info Support Belgium)"}),"\n"]}),"\n",(0,i.jsxs)(t.h4,{id:"want-to-try-out-stryker-begin-with-the-handy-quick-start-guide",children:["Want to try out Stryker? Begin with the handy ",(0,i.jsx)(t.a,{href:"/docs/stryker-js/getting-started/",children:"quick start guide"}),"."]})]})}function u(e={}){let{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},19725:function(e,t,n){t.A=n.p+"assets/images/stryker-team-photo-1003ee4578880ce98346a284f276b6e8.jpg"},23191:function(e,t,n){n.d(t,{R:function(){return a},x:function(){return o}});var r=n(92990);let i={},s=r.createContext(i);function a(e){let t=r.useContext(s);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),r.createElement(s.Provider,{value:t},e.children)}},10095:function(e){e.exports=JSON.parse('{"permalink":"/blog/happy-new-stryker","editUrl":"https://github.com/stryker-mutator/stryker-mutator.github.io/edit/develop/blog/2017-01-01-happy-new-stryker.mdx","source":"@site/blog/2017-01-01-happy-new-stryker.mdx","title":"Happy new Stryker!","description":"2017 - The year to invest into test quality","date":"2017-01-01T00:00:00.000Z","tags":[{"inline":true,"label":"stryker-js","permalink":"/blog/tags/stryker-js"}],"readingTime":3.2,"hasTruncateMarker":true,"authors":[{"name":"Nico Jansen","title":"Stryker Team","socials":{"github":"https://github.com/nicojs","x":"https://x.com/_nicojs"},"imageURL":"https://avatars.githubusercontent.com/u/1828233","key":"nicojs","page":null}],"frontMatter":{"slug":"happy-new-stryker","title":"Happy new Stryker!","authors":"nicojs","tags":["stryker-js"]},"unlisted":false,"prevItem":{"title":"Introduction to mutation testing","permalink":"/blog/introduction-to-mutation-testing"},"nextItem":{"title":"Stryker 0.5.5 released!","permalink":"/blog/stryker-0-5-5"}}')}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.