Skip to content
Think Red Green Refactor TDD

TDD as if you Meant It: Think – Red – Green – Refactor (Episode 1)

TDD as if you Meant It: Think – Red – Green – Refactor (Episode 1)

About

TDD as if you meant it is a very strict way of writing code in a Test Driven Development approach. One needs to follow the rules below:

Guidelines

In the first episode the main focus in to respect a few guidelines:

  1. Guideline 1: Always start with outputs when doing an analysis
  2. Guideline 2: Behavior Slicing
  3. Guideline 3: SIMPLIFY!
  4. Guideline 4: Introduce only one notion (domain concept) at a time, one per test
  5. Guideline 5: The rule of three “only extract duplication when spotted at least three times”
  6. Guideline 6: Triangulation
pruning

Evolutionary Design: Normalize Growth

Evolutionary Design: Normalize Growth

The Definitions

Evolutionary Design is the practice of creating the components and interactions of a system while it is evolving, on the basis of the client requirements and user needs.

Normalization refers to a process that makes something more normal or regular

Normalization may refer to more sophisticated adjustments where the intention is to bring the entire probability distributions of adjusted values into alignment from Wikipedia

Growth refers to a positive change in size, and/or maturation, often over a period of time from Wikipedia

 

The Moment

I am a big fan of gardening. Whenever I can, I take care of my plants and think about subjects like Evolutionary Design. One moment I was taking care of my young tomato plants: I needed to rip the small leaves that grow and just take the food away from the flowers and fruits. And it struck me: any gardener is doing Evolutionary Design.

pruning

Legacy Code is Fear

Talk: Easier to change CODE

Talk: Easier to change CODE This is a talk from I T.A.K.E. Unconference 2016, Bucharest. It is a hands-on talk, where I refactor some code live with the help of the audience. Techniques During this… 

Automated Tests System Under Test

Automated Tests Purposes

Automated tests: Why? How they help? Who needs them?

There are many types of automated tests out there. Let’s see the most used types of tests and understand how each one is useful.

Types of tests covered are:

  1. Unit Tests are isolated, focused on methods and classes. White box tests.
  2. Integration Tests are for checking how two different modules integrate. Black box tests.
  3. Integrated Tests are big, large tests showing how many modules integrate, with a business purpose. Black box tests.
  4. Acceptance Tests are showing that a features works well. Black box tests.
  5. Contract Tests are a special type of tests, that verify polymorphism integration of multiple components or classes.

Let’s take them one by one in detail.

Automated Tests System Under Test

Performing Kata

Hands-on Sessions: Performing Kata

Performing Kata

Blog Post Series

This is a series of blog posts about hands-on sessions you can facilitate at software conferences. You can find the rest of the hands-on sessions here.

Purpose

You can learn from someone who shows a live demonstration about a concept, technique or tool.

The idea of performing kata comes from martial arts. Its purpose is to teach a group how to tackle a specific problem in a systematic approach.

It is a very efficient way of conveying information because it is a mix of theory and practice.

Performing Kata

Deliberate Practice

Talk: Deliberate Practice at AgileWorks Bucharest

Talk: Deliberate Practice at AgileWorks Bucharest

Deliberate practice is a highly structured activity engaged in with the specific goal of improving performance. It is different from work, play and simple repetition of a task. It requires effort, it has no monetary reward, and it is not inherently enjoyable.

The common view held until recently was that expert-level performance was simply the result of talent and “natural abilities.” But scientists believe that expert-level performance is primarily the result of expert-level practice NOT due to innate talent.

So let’s have a discussion about how we can practice, formats and methods of practice in the Software Development world. I will touch technical type of practice (for programmers, testers, etc), and also organizational type of practice (managers, Scrum Masters, Team Leaders, Product Owners, etc)

Call for Speakers I T.A.K.E. Unconference 2017

Call for Speakers I T.A.K.E. Unconference 2017 Code. Craft. Learn. Share. Repeat. Software craftsmanship movement is raising the bar in tech industry. Are you also challenging the current practices, making experiments and trying new techniques?… 

Coderetreat Book

The Coderetreat Book

The Coderetreat Book About A couple of weeks ago I published the Coderetreat book together with Alex Bolboacă. The book is about how to facilitate and host a coderetreat event. Contents It contains plenty of… 

Programming by wishful thinking

Programming by Wishful Thinking

Coderetreat: Programming by Wishful Thinking

Blog post series

This blog post is part of a series about coderetreat sessions.

Purpose

This session introduces the concept of top-down approach of Test Driven Development for a new feature.
By following the steps you will be able to understand how to add thin top-down features that you can show very fast to your customers. Many of the features will work, even though you will not have a fully functional system, just because you have used stubs or fakes for the parts of the system that are not yet implemented.

Programming by Wishful Thinking

Refactor Conditionals by Decomposing Conditional

Legacy Coderetreat: Part 16 – Refactor Conditionals by Decomposing Conditional

Refactor conditionals by Decompose Conditional

Blog post series

This blog post is part of a series about legacy coderetreat and legacy code techniques you can apply during your work. Please click to see more sessions about legacy code.

IF-THEN-ELSE-END_flowchart

Purpose

We often see code with conditionals that are hard to understand. The purpose of this technique is to make the code look readable by extracting a function with the condition. It will be easier to test the code if the condition is extracted and injected as a dependency.

This technique is useful when having good variable names is not enough to explain the condition. We can have some of the following reasons for wanting to extract a function with the condition:

  • The condition is duplicated in several parts of the class
  • The condition is duplicated along different classes
  • Test the condition in isolation, because of its complex nature
  • Test the code without understanding how the conditions work (inject conditions as stubs)