<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kostas Sidiropoulos</title>
    <description>The latest articles on DEV Community by Kostas Sidiropoulos (@kostas_sidiropoulos_82c6d).</description>
    <link>https://dev.to/kostas_sidiropoulos_82c6d</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2796765%2Fb3e3f623-18e1-4197-907c-cae5c35f93f1.png</url>
      <title>DEV Community: Kostas Sidiropoulos</title>
      <link>https://dev.to/kostas_sidiropoulos_82c6d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kostas_sidiropoulos_82c6d"/>
    <language>en</language>
    <item>
      <title>ECESCON 15 years later…</title>
      <dc:creator>Kostas Sidiropoulos</dc:creator>
      <pubDate>Wed, 28 May 2025 06:44:19 +0000</pubDate>
      <link>https://dev.to/agileactors/ecescon-15-years-later-1of9</link>
      <guid>https://dev.to/agileactors/ecescon-15-years-later-1of9</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx1ui1u99vb4457hndyo4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx1ui1u99vb4457hndyo4.png" width="700" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s been a few years (maybe not so few…) years since I entered the software development industry and started out my dynamic career that took me from developing software to creating tests that would challenge it to the breaking point! There have been many twists and turns in my journey, as expected, but one thing has remained constant throughout; my appreciation for the ever-evolving technologies that drive us forward.&lt;/p&gt;

&lt;p&gt;I can recall my student years filled with curiosity, working on different projects, and attending meetups and conferences to keep up with what was going on in the industry, one of which was EESTEC.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Allow me to take you on a journey on a timeline with my EESTEC experience!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;May 2007:&lt;/strong&gt; I had come across a new conference. It was the first time that Electrical and Computer Engineering Students Conference was taking place and I remember thinking how it was unlike any other. Ok, I had attended conferences mainly organised by the Hellenic Telecommunciations and Post Commission, but this was something different. It was organised by people like us, by students, who wanted to see how science and technology were evolving and wanted to see what is coming next for them — me included of course. It was a relatively small venue, where myself and a group of friends from university, I was a student at the National Technical University of Athens at the time were waiting in a conference room for the conference to start. The presentations were delivered by professors of the field, I can’t recall the topics but what I do remember is the feeling that the experience left me with!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Over a decade and a pandemic later…&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;April 2022:&lt;/strong&gt; It’s been a long time since that May, and I’m currently the Chapter Lead of Software Engineers in Test and Infrastructure at Agile Actors living out my early professional dreams of working on exciting projects, implementing the newest technologies and staying at the forefront of the trends. I’m sitting in the office and our communications officer, Reem tells me that ECESCon Patra is going to take place and we are sponsoring the event. Oh, dear! I travelled back 15 years. Without hesitation, I volunteered to be actively and on a Friday morning myself, Alexis, our Chapter Lead of Full stack in Java and Maria, part of our Talent Acquisition team we left for 3 days I was instantly wondering what new graduates are looking for, what should we focus on, but eventually everything came to me naturally. What was I looking for as an attendee 15 years ago? To see the future of the industry, what’s going on in the market, what the latest trends are and what technologies and disciplines to focus on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log day 1:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We arrived in the afternoon but got the chance to meet students and have very interesting discussion with. Most questions were in regard to internship opportunities, how can a graduate start their career and how can Agile Actors help. We got the opportunity to explain our unique model and received valuable feedback in the process. We felt their passion for programming and wanted to see how we could help them in their development, discussing what do they want to do and how we can help them start their journey and that was just the beginning, as we had a live demo of a developer’s typical day planned for the next day!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log day 2:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today was the big day! We had decided to present something hands-on and what better than to start implementing a Java Spring Boot backend service from scratch. Alexis started implementing the service whilst I was implementing the tests. In what was a very real scenario, he started modelling DB entities at which point I had to stop him… Why? We had discussed nothing about requirements, specs, acceptance criteria — in actual fact we didn’t know WHAT to build. And that’s where our discussion started to give more insights on what we want to implement. This was also probably the most interesting part that someone could take away from the session.&lt;/p&gt;

&lt;p&gt;There is no framework or library that can do the trick and be the absolute solution to our problems. Nothing can replace communication and at the end of the day this is the key success factor for delivering and for having a good time in the process! Through a 3-hour session, we tried to put incorporate and present most of what happens during a typical day on the job.&lt;/p&gt;

&lt;p&gt;We got very interesting questions and started discussing with attendees. Suddenly I found myself in a time warp yet again, thinking about how at some point I was in their shoes joining the discussion on the presentation with questions and queries, eager to learn as much as I could. We went on and explained how our coaching and mentoring model works and focused a lot on our external coaching model which could potentially be a good fit for a lot of the graduates and open up career opportunities for them. This was of significant interest to the students, as a candidate is taken on by our engineers, who coach and mentor specific to an internal position, ultimately leading to an employment opportunity when successful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log day 3:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Final day and after a weekend filled with interesting discussions with students, it was about to time to return to base. What a great experience! Discussing with new joiners in the market and potential new colleagues was very interesting and refreshing. Would I go again? Definitely yes! In the meantime, I am waiting to see the attendees again, but now as new colleagues!&lt;/p&gt;

&lt;p&gt;If you want to join the discussion within our Team check out our openings &lt;a href="https://apply.workable.com/agileactors/" rel="noopener noreferrer"&gt;here&lt;/a&gt; and apply today!&lt;/p&gt;

&lt;p&gt;Til next time!&lt;/p&gt;

</description>
      <category>javascript</category>
    </item>
    <item>
      <title>Measure the Quality of Your Tests with Mutation Testing</title>
      <dc:creator>Kostas Sidiropoulos</dc:creator>
      <pubDate>Wed, 28 May 2025 06:43:58 +0000</pubDate>
      <link>https://dev.to/agileactors/measure-the-quality-of-your-tests-with-mutation-testing-1bcd</link>
      <guid>https://dev.to/agileactors/measure-the-quality-of-your-tests-with-mutation-testing-1bcd</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhp6lq6cpscl3c5icw1m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhp6lq6cpscl3c5icw1m.png" width="700" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Measure the Quality of Your Tests with Mutation Testing
&lt;/h1&gt;

&lt;p&gt;Unit testing is an integral part of the current development process. Especially with the introduction of Continuous Delivery and Continuous Deployment methods as well as the business need of delivering as quickly as possible, we need a way to deliver software quickly with the best possible quality.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Less time performing integration tests&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Protection against regression&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Executable documentation&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Less coupled code&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since starting implementing unit tests, one question that first rises is how can we measure the quality of our unit tests. So actually it’s more of a philosophical question.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If tests are the guardians, then who guards the guardians?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In other words, what metrics should I use to measure the quality of my tests and ideally how can I do it in an automated way?&lt;/p&gt;

&lt;h1&gt;
  
  
  Mutation Testing
&lt;/h1&gt;

&lt;p&gt;The most traditional way to do something like that is Code Coverage. This is the most commonly used method and its main purpose is to find how many lines and branches of our code our unit tests have executed. And here starts the problem.&lt;/p&gt;

&lt;p&gt;It does not check that your tests are actually able to detect faults in the executed code. It is therefore only able to identify code that is definitely not tested.&lt;/p&gt;

&lt;p&gt;For example, tests that are assertless (meaning that they only perform actions in SUT but no assertion, so they are not actual tests) can not be identified with code coverage tools. These are extreme cases (although some would disagree with that statement) but still there are other issues that might exist.&lt;/p&gt;

&lt;p&gt;Let’s take a look at the examples below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl8dqg5k23uks84tlf2es.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl8dqg5k23uks84tlf2es.png" width="474" height="161"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are some unit tests that will check it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqu9va7paeswzplsqau0b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqu9va7paeswzplsqau0b.png" width="429" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the above example although we check that calls to collaborator classes are made we do NOT check the return type. However code coverage tools will show 100% coverage because tests pass from the code but they do not actually test it! Even if it seems a straight forward example, in more complex cases, it could create issues.&lt;/p&gt;

&lt;p&gt;So, mutation testing comes to the rescue. It’s not a modern technique, it’s actually older than JUnit, but it was mainly into academia. Now it has started gaining popularity in the industry with some appropriate changes that have been done.&lt;/p&gt;

&lt;p&gt;Mutation testing is a simple technique to evaluate the quality of your unit tests. It is part of failure injection testing. Faults (or mutations) are automatically seeded into your code, then your tests are run. If your tests fail then the mutation is killed, if your tests pass then the mutation lives.&lt;/p&gt;

&lt;h1&gt;
  
  
  PITest
&lt;/h1&gt;

&lt;p&gt;&lt;a href="http://pitest.org" rel="noopener noreferrer"&gt;PITest&lt;/a&gt; is the most well known mutation testing tool for Java based applications. The main reasons to choose it are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  PIT is fast — can analyse in minutes what would take earlier systems days&lt;/li&gt;
&lt;li&gt;  PIT is easy to use — works with ant, maven, gradle and others&lt;/li&gt;
&lt;li&gt;  PIT is actively developed&lt;/li&gt;
&lt;li&gt;  PIT is actively supported&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Usage
&lt;/h1&gt;

&lt;p&gt;We should add PITest maven plugin in our pom.xml like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg8hbpo7t1vyzejzwhevu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg8hbpo7t1vyzejzwhevu.png" width="422" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In excludedClasses we add the classes that we don’t want to mutate. Also in excludedTestClasses we exclude the test that we don’t want to run (e.g. functional tests).&lt;/p&gt;

&lt;p&gt;In order to run mutation coverage, run &lt;em&gt;mvn org.pitest:pitest maven:mutationCoverage&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Stryker
&lt;/h1&gt;

&lt;p&gt;In JS and C# world the most famous tool is &lt;a href="https://stryker-mutator.io/" rel="noopener noreferrer"&gt;Stryker&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Stryker is easy to use&lt;/li&gt;
&lt;li&gt;  Stryker is actively developed&lt;/li&gt;
&lt;li&gt;  Stryker is actively supported&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Concluding automated tests are a great tool that can help our development team to deliver faster and with higher quality. But these tests should also be treated in the same way as production code and have clear quantitative metrics that show us their quality. Mutation testing techniques are the best ones we currently have.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffrorkc8jbu7r564ujpyb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffrorkc8jbu7r564ujpyb.png" width="700" height="132"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
    </item>
  </channel>
</rss>
