There are several different tools to maintain the internal structure of a java application available. The tools range from simple open source software like jdepend and degraph to full fledged architecture tooling like Structure101 or Sonargraph Architect. All these provide methods to define the internal structure of an application and validate it somehow.
Recently we had a problem related Springs auto-proxy feature that I think is worth writing about.
We use Spring as our framework of choice because it provides us with a nice set of convenience features when bootstrapping and plugging together our application.
One of these features is caching: We cache our users' roles because their definitions are stored in a pretty slow external system and change rarely.
Anstatt immer wieder zur Fortbildung auf Konferenzen zu fahren hatten wir dieses Jahr noch eine andere Idee: Wir hatten einen Inhouse-Workshop zum Thema "Visual Thinking" mit Tanja alias @frauhoelle. Ziel des Workshops war es, den Teilnehmern die Bildsprache näher zu bringen und dadurch die Kommunikation zu verbessern.
Zeig’ mir Deinen Code und ich sage Dir wer Du bist.
Oftmals kommen Unternehmen mit der Bitte um einen Code-Review auf uns zu. Gründe dafür gibt es viele, jedoch dreht es sich meistens um schlechte Erweiter- und Wartbarkeit der Software und in der Konsequenz um eine langsame Entwicklungsgeschwindigkeit (höhere Kosten). Häufig sind diese Anwendungen dann neue Patienten für die Code-Clinic.
The last few blogs about acceptance-testing focused on setting up a nice and scalable infrastructure to do testing through the (web)-GUI using a Selenium grid. Since we've got this running now we can go on to topics that focus how we write these tests. At synyx we try to write our web-tests as "acceptance-tests" so we first take a small dive into what that is.
Within this post I want to describe how to extend the grid with windows nodes to be able to test on our beloved Internet Explorer.
After showing you how to request a remote browser from a Selenium Grid in the last part its time to put some effort in getting the grid running smoothly. Also, check out the first part of the series for the greater context of this blog post.
In the first part of the series I gave some reasons why to do acceptance testing (or webtests) as well as a rough overview how we do it at synyx. This part is rather technical and describes how to use Seleniums RemoteWebDriver to control browsers on a remote host.
Overview - Why and how we do web-testing
In my team at synyx we wrote a lot of tests in 2012. Most of the tests were unit-tests (as a consequence of TDD), some stuff is also tested as integration-tests (sometimes because the stuff was hard to test as unit-tests, sometimes as addition to them to verify that interactions of components work properly). I can tell TDD and the special focus on tests changed the way we work pretty much and of course boosted the quality of our applications even further. Its not that we did not write tests before, but once you develop test driven you can start to trust your code which makes refactorings (evolution) easy.
My team and I are currently working on an project we first started in early 2010. The application is in production since sometime late 2010 and there has been no active development except for minor enhancements and bugfixes since then. Even if our code, processes and tools were good in 2010 we've improved a lot since then. Working on my old projects is one of the occasions, where this becomes most evident.