From the 25th until the 28th of August 2016 the 6th International Software Craftsmanship and Testing Conference (SoCraTes) took place in Soltau, Germany. Both of us were lucky to attend such a great event. And even one of the sponsors was ePages. This conference has a quite unique format and you can’t really tell what you will get beforehand. Here’s our wrap-up of 4 awesome days.
Warm-up
How do you get 226 people, software developers and non-developers alike, to show up at one place where you don’t even have mobile coverage? Observing “normal” conferences, usually the most interesting slots are the coffee breaks where people connect, share inside knowledge, ideas, and inspiration. The actual talks become a second thought. So why not make a conference that is one big coffee break?
Right after the initial kick-off meeting on Thursday evening we met in a World Cafe. We sat together in small groups with other people we did not know. We introduced ourselves and explained what made us come here, which expectations we have, what we’d like to learn, and what sessions we could provide. At the end of this ice breaker there was a pretty precise idea of what people are interested in, and what could be provided as conference sessions for the next two days.
Conference days
Friday and Saturday were open spaces. Upfront around 15 meeting locations with initially empty time schedules (6x1 hour slots) were prepared as a supportive sessions’ frame by the organization team. There was a “marketplace” every morning where people could pitch sessions and distribute those among the time slots and rooms. Being an open space the “Law of Two Feet” applies: You can join or walk out of any session at any time. At each day before dinner, everyone gathered in the hall again and shared what they had learned during the day.
We attended lots of those open spaces, so here’s just an extract of some of them accompanied by our notes:
Deep dive into Git internals
- How does Git store files and track changes internally?
- Types of Git objects
- Use of low-level “plumbing” commands. Git users normally just use the high-level “porcelain” commands.
- Git does not store any diffs. This is very ineffective on binary data.
- The validation of hashes is disabled by default, so if you want to check the integrity of a repository you need to set a flag to validate (this is a huge performance impact in bigger projects).
Can monitoring be used for integration testing?
- Using a test bot and monitoring to detect problems
- Thresholds for monitoring are bad. Better: track velocity or do a baseline comparison
- Use an alert hierarchy/alert conditions/alert dependencies
- Also test your monitoring.
Property-based testing in Java
Solving the FizzBuzz Kata multiple times revealed the concepts of property-based testing (PBT) step by step. First we started writing normal unit tests in TDD-as-if-you-meant-it style. Then we looked for repetitions to transfer several tests into parametrized tests with input and output by using the DataProviderRunner. As last step we switched to JUnitQuickcheck for running tests several times with random values produced by a custom generator. Big picture: Typically a developer starts with a hypothesis of the favored behavior of the system under test (SUT) and then tries inductively with TDD to prove the observation. In contrast to this approach, a developer can also start with the observation of the SUT, find patterns how the system behaves, and then apply PBT deductively to generate a hypothesis of the SUT. This means, that PBT can be seen as a complementary method to TDD to enhance the safety net and should not be used as its substitute.
Intro to concepts of Functional Programming (FP)
This session quickly showed the basic ideas in functional programming: No side effects, immutable data structures, first class functions, and higher-order functions, which take one or more functions as input and may return another function. For instance, we focused on map with transformers, fold/reduce/accumulate with combiners, and filter with predicates. As an easy example for monads (an abstract datatype) we learned about containers/boxes/collections, like lists, sets and multisets, maps, as well as vectors. We also learned about the special Option/Some/Maybe monad/type, which can be created via a None or a Just/Some constructor. Hence the return type of operations, that may fail, can be represented in a type safe matter so that operation chaining without throwing/checking for null reference/pointer exceptions is possible.
Workshop day
Sunday was reserved for longer workshops:
- Code retreat with various sessions of the Kata Game of Life
- Agora platform development
- Android app development
- Integration testing without mocks
More than the usual conference!
Giving feedback to session hosts, other participants, or the organization team was quite easy as well: Every attendee received Kudo Cards that they could freely distribute with remarks, why they liked a session, or other things. Yet, the best part: The fully equipped conference hotel was located in a big beautiful national park, isolated by a forest from the surrounding world. This is a huge opportunity to completely leave the daily business and escape into a surreal paradise for developers. Hence, all participants also stayed together for the whole 4 days and nights, which allowed to establish close connections in a short period of time.
Besides the technical talks there were a lot of soft topics about communication, such as:
- How to communicate with management, sales or marketing
- Company politics
- Giving feedback
- How to get your co-workers into a testing mindset?
- Self-organization.
Furthermore, we had plenty of entertaining morning/evening activities, including board games, PowerPoint karaoke, astrology walk, beach volleyball, martial arts, breathing exercises, wake-up running, and much more.
It was a great conference, we learned a lot, and had fun doing so!