One of the principle rules of Continuous Delivery is that you should never knowingly commit code that will break the build. When you practice test-driven development this is easy: you write a failing test (or, more precisely, a failing "executable specification"), make it pass, and then refactor as required.
JDK 9 features have been announced, and we want to know what you think about them! Are these features something you've been waiting for, or are you a bit underwhelmed? Do some of these proposals seem to go against improvements that you want? Post a comment and tell us!
One of my friends asked how to get started with unit testing and Test Driven Development and figured I could write a short post. I also mention TDD a few times in my book so I think it could use some more attention.
Fifteen years ago, at the height of the dot com bubble, system administrators were burning the candle at both ends. With no cloud, Agile, or DevOps to help them, they were making it happen through sheer force of will and effort. As far as modern IT is concerned, those days are gone, and it's for the best.
This approach not only gives you better control in your tests, but it also speeds them up – no more sleeping threads, which can add up in large test suites. As well as all that it enables classes of testing that were simply impossible before (e.g. long duration waits).
When facing some duplicate code, you're not always feeling comfortable to dry it up. You're not even sure you'll keep - as is - the code you've just wrote. By experience, you don't want to spend a whole day to end, maybe, with an abstract solution end to reason about.
Recently, I came across this Podcast series between Martin Fowler, Kent Beck and DHH which was in response to DHH’s post TDD is dead, long live Testing.
Test-driven development is a software development process in which developers write tests first and, then writing enough code to pass those tests. Once all of the tests pass, they do code refactoring to enhance code quality. Following are key advantages of adopting TDD as your development process.
I believe that test coverage is an unhelpful measure. I have two main reasons behind this belief: Firstly, test coverage often gives false positives and false negatives; and secondly, too many badly written tests will slow a project down (that is, higher coverage can mean lower habitability).
If you need detailed information about GIT, then this is the deal (short of reading the source code I guess). Every aspect of the tool is explained (sometimes in excruciating detail) and the authors go to a great length to provide tips and gotchas on commands (especially when you might easily shoot yourself in the foot).
For JUnit implementation in our project, we see a great challenge in having them implemented as we are already running behind for Sprint 2 and Sprint 3
Its great to see that despite only releasing a couple of months ago there's already quite a few people trying out or contributing to lambda behave. Massive thanks to the London Software Craftsmanship Community for hosting a talk on Lambda Behave and the London Java Community and Opencredo for hosting a hackday.
Should there really be such a thing as a “DevOps Engineer”? Probably not, but we’re far too late to stop it, and trying to stop it seems a bit of a waste of energy to me. Eventually “DevOps Engineer” will come to mean something more specific, but for now we’re just going to have to read a few more lines on CVs.
Why are programs so poorly structured?
DevOps is a marriage between tools and culture. If you are just using the tools that you heard about at a recent DevOps Days and not also embracing the culture (or at least working towards it) then you're not really "doing DevOps".
How do we know, we know what DevOps is? For episode 46, we sit down with Praxisflow’s Kevin Behr (whom you might recognize as one of the authors of the Phoenix Project) and Jabe Bloom to talk about these and other heady questions, including: what can we learn from the Agile community?
There are those people that have a strong, dogmatic belief in what they call “Free” or “Standard” or “Open” software.
The objectives of Test Driven Development and unit testing are generally misunderstood. The problem is the word ‘test’, it is much less about testing and much more about specification of requirements, showing your working – as in maths, and the impact it has on design.
Environment config, isn’t the same as “infrastructure as code”. This is the stuff that’s potentially live-tunable in an application stack that subsumes feature toggles, but goes further – application specific things not limited to rectangles of web-pages appearing or disappearing.
I keep hammering on trust and how it’s crucial that we trust our tests. If a test is deterministic, it raises the level of our trust. If it isn’t, we may question its result, which will be followed by questioning other tests as well.
This week, DZone released its latest Checklist: Unit Testing. If you're interested in learning more about Unit Testing or sharpening your skills, we decided to dig into the DZone archives and find some of the most popular posts we've had on the topic over the past two years.
I’ve just upgraded to Vagrant version 1.6, and vagrant global-status is possibly my favourite new feature. This command lists all currently up Vagrant environments wherever they may be on your computer
The goal of Continuous Delivery is to optimise cycle time in order to increase product revenues, and cycle time is measured as the average lead time of the value stream from code checkin to production release. This was memorably summarised by Mary and Tom Poppendieck as the Poppendieck Question.
The value stream associated with software development typically goes something like this: analysis, design, build, test, and deploy. That’s pretty much everything you need to develop a working tested increment of the product… and therefore what defines the basic requirements for a Scrum team.
Feature flags or config flags aka feature toggles aka flippers are an important part of Devops practices like dark launching (releasing features immediately and incrementally), A/B testing, and branching in code or branching by abstraction.