STK203: Qualität von Architektur (Softwaretechnik kompakt)

Wolf-Gideon Bleek

Softwaretechnik kompakt

STK203: Qualität von Architektur (Softwaretechnik kompakt)

Softwaretechnik kompakt

Moin Moin und herzlich willkommen aus Hamburg. Mein Name ist Wolfgedeon Bleek. In dieser Reihe

Good morning and welcome from Hamburg. My name is Wolfgedeon Bleek. In this series

möchte ich in loser Folge auf Themen der Softwaretechnik eingehen, die für gute Software,

I would like to address topics in software engineering in a loose sequence that are important for good software,

Softwarearchitektur und gutes Vorgehen wesentlich sind. Der Podcast ist dafür gedacht,

Software architecture and a good approach are essential. The podcast is intended for that purpose,

kleine Wissensportionen weiterzugeben und gleichzeitig als Anregung für Diskussionen

to share small portions of knowledge and at the same time serve as a stimulus for discussions

zu dienen. Ich freue mich also über Rückmeldungen und möchte gerne andere Erfahrungen und Meinungen

to serve. I am therefore looking forward to feedback and would like to hear others' experiences and opinions.

aufnehmen. In der heutigen Folge geht es um das Thema Qualität von Softwarearchitektur. Dazu habe

record. In today's episode, the topic is the quality of software architecture. To that end, I have

ich mir eine Interviewpartnerin zur Seite geholt, Carola Lilienthal. Carola Lilienthal hat das

I have brought on an interview partner, Carola Lilienthal. Carola Lilienthal has the

Studium der Informatik im Jahr 1995 an der Universität Hamburg abgeschlossen und dort im

Completed studies in computer science in 1995 at the University of Hamburg and there in

Jahr 2008 promoviert. In den Jahren 1995 bis 1998 und 2004 bis 2008 war sie wissenschaftliche

Graduated with a doctorate in 2008. From 1995 to 1998 and from 2004 to 2008, she was a researcher.

Mitarbeiterin im Department für Informatik der Universität Hamburg. Im Jahr 2007 erhielt sie

Employee in the Department of Computer Science at the University of Hamburg. In 2007, she received

einen Lehrauftrag für die Vorlesung Architektur von Informationssystemen an der Hamburger Hochschule

a teaching assignment for the lecture Architecture of Information Systems at the Hamburg University

für angewandte Wissenschaften. Im Januar 2009 wurde Carola Lilienthal zum Mitglied der

for applied sciences. In January 2009, Carola Lilienthal was appointed a member of the

Geschäftsleitung der C1 WPS ernannt und ist Themenverantwortliche für das Softwarearchitekturbüro.

Management of C1 WPS appointed and is responsible for the software architecture office.

Hintersemester 2009 ist sie außerdem Vertretungsprofessorin für Softwaretechnik an der

In the second semester of 2009, she is also an acting professor for software engineering at the

Universität Hamburg. Ihr Hauptinteresse galt in den letzten Jahren der Komplexitätsreduktion bei

University of Hamburg. In recent years, her main interest has been in complexity reduction in

großen Softwarearchitekturen. In diesem Rahmen setzt sie besonders auf ihre Erfahrungen aus

large software architectures. In this context, it particularly relies on its experiences from

über 30 Architekturuntersuchungen und Restrukturierung von großen Anwendungssystemen. Ich

over 30 architectural studies and restructuring of large application systems. I

kenne Carola Lilienthal schon seit den 90er Jahren, als wir zusammen an der Universität Hamburg in der

I have known Carola Lilienthal since the 1990s when we were together at the University of Hamburg in the

Arbeitsgruppe Softwaretechnik gearbeitet haben.

Worked in the software engineering working group.

Guten Tag Carola. Hallo Wolfgideon. Ich möchte heute mit dir über Softwarequalität sprechen und Softwarequalität ist für uns beide ja in den

Good day Carola. Hello Wolfgideon. I would like to talk with you today about software quality, and software quality is indeed important for both of us in the...

vergangenen Jahren eigentlich ein sehr wichtiges Thema gewesen, aber du hast dich ganz speziell darauf konzentriert und zwar über den

In recent years, it has actually been a very important topic, but you have specifically focused on the

spannenden Weg genähert Softwarekomplexität. Kannst du mir mal erzählen, was das miteinander zu tun hat?

An exciting approach to software complexity. Can you tell me what that has to do with each other?

Ja, also wenn man sich mit Qualität von Softwaresystemen beschäftigt, dann ist ja immer die Frage,

Yes, so when you deal with the quality of software systems, the question always arises,

welchen Sinn hat es eigentlich auf Qualität zu achten, weil ich will eigentlich mich nur um Qualität kümmern, wenn mir das auch wirklich was nützt.

What is the point of paying attention to quality, because I only want to care about quality if it actually benefits me.

Sonst brauche ich das nicht zu tun. Wenn ich also Wegwerfsoftware schreibe, dann hat das überhaupt keinen Sinn auf Qualität zu achten, wie schnell fertig werden.

Otherwise, I don’t need to do that. So if I’m writing disposable software, then it makes no sense to pay attention to quality; the focus is on finishing quickly.

Aber die meisten Systeme heute werden ja für längere Dauer gebaut und dann ist immer die Frage, kann ich das System über lange Zeit warten, kann ich es

But most systems today are built for long durations, and then there is always the question of whether I can maintain the system over a long period, whether I can do it.

vielleicht auch erweitern und da wird dann die Frage der Qualität ganz wichtig und ich habe mich der Qualität so ein bisschen aus dem Blickwinkel der

perhaps also expand and then the question of quality becomes very important, and I have approached the quality from the perspective of the

Komplexität genähert und mich gefragt,

Approached complexity and asked myself,

was ist eigentlich wichtig, damit Leute Software gut warten können? Also was verstehen die Entwickler leicht oder wo kommen sie gut mit zurecht und was ist für sie komplex?

What is actually important for people to be able to maintain software well? So what do developers understand easily or where do they manage well, and what is complex for them?

Also die Aussage ist so ein bisschen, wenn man die Komplexität reduziert, dann hat man schon ein ganzes Stück Qualität gewonnen und kann den Rest der Qualität auch schon noch hinbekommen.

So the statement is somewhat that if you reduce the complexity, you have already gained a good amount of quality and can still achieve the rest of the quality.

Die Leute müssen einfach schnell sich zurechtfinden in einem Softwaresystem.

People just need to quickly find their way around a software system.

Okay. Wie kommt denn Komplexität überhaupt in das System rein? Denn, wenn ich mit einer Klasse anfange, einem Package und ein paar Klassen und ein paar Packages, habe ich ja noch gar keinen Sinn.

Okay. How does complexity even enter the system? Because, when I start with a class, a package, and a few classes and a few packages, I still don't have any meaning.

Habe ich ja noch gar keine Komplexität.

I don't have any complexity at all.

Ja, also dass es tatsächlich war, es hat was mit der Größe einfach zu tun.

Yes, so it actually was, it has something to do with the size.

Also nur der Punkt ist, Menschen können sich ungefähr bis 30.000 Lines of Code so merken,

So the point is that people can remember about 30,000 lines of code.

aus was für Teilen ein Software-System besteht.

what components a software system consists of.

Und das ist aber auch schon eine große Zahl.

And that is already a large number.

Und dann vergessen sie einfach, was es hier und da noch gibt,

And then they simply forget what else is here and there,

kennen die anderen Teile in dem System gar nicht.

The others do not know the other parts of the system at all.

Und normale Software-Systeme heute sind einfach, wenn sie klein sind,

And normal software systems today are simply easy when they are small,

200.000 Lines of Code groß und richtig fette Systeme sind über eine Million oder sowas in großen Firmen.

200,000 lines of code is large, and really big systems are over a million or so in large companies.

Und da kann ein Mensch alleine sich gar nicht zurechtfinden.

And a person cannot find their way alone at all.

Und die schiere Masse macht das Ding komplex.

And the sheer mass makes the thing complex.

Und dann gibt es aber natürlich auch noch viele andere Sachen, die Komplexität erzeugen können.

And then, of course, there are many other things that can create complexity.

Also nicht nur die Masse, sondern eben auch, wie die Struktur gebaut ist von dem Software-System.

So it's not just the mass, but also how the structure of the software system is built.

Wenn man also ein Kraut-und-Rüben-System hat, wo alles durcheinander benutzt,

If you have a hodgepodge system where everything is used in a jumble,

es gibt kein Oben, kein Unten, kein Links und kein Rechts,

there is no up, no down, no left and no right,

da herrscht einfach viel Komplexität.

There is simply a lot of complexity.

Da findet man sich schlecht zurecht.

It's difficult to find your way there.

Okay. Das heißt, wir müssen eigentlich danach schauen, wie entsteht jetzt dieses Kraut-und-Rüben-System?

Okay. That means we actually need to look at how this hodgepodge system is created now.

Oder besser noch, wie können wir verhindern, dass dieses Kraut-und-Rüben-System entsteht?

Or better yet, how can we prevent this hodgepodge system from arising?

Ja, auf jeden Fall.

Yes, definitely.

In den aktuellen Programmiersprachen würde ich ja ein System unterteilen.

In current programming languages, I would divide a system.

Ich habe ja die üblichen objektorientierten Gliederungsmerkmale wie Klassen und Packages.

I have the usual object-oriented structuring features such as classes and packages.

Und häufig nimmt man sich ja noch dazu so etwas wie Subsysteme.

And often one also takes something like subsystems into account.

Würden wir das so nennen?

Would we call it that?

Ja, das würde ich so etwas, glaube ich, nennen, um das System zu strukturieren.

Yes, I would call something like that to structure the system, I believe.

Aber trotzdem passiert es mir ja, dass ich das System dann in seiner Komplexität so hochschraube,

But still, it happens to me that I then complicate the system to such a degree.

dass ich es schlecht verstehen kann.

that I can hardly understand it.

Ja, also es gibt einfach unterschiedliche Richtungen da.

Yes, so there are simply different directions there.

Ich habe in meiner Doktorarbeit ja drei verschiedene Faktoren betrachtet.

In my doctoral thesis, I have considered three different factors.

Ich habe also gesagt, einmal ist es wichtig, dass ich Modularität habe in einem System.

So I said, it is important that I have modularity in a system.

Das hast du eben so ein bisschen angesprochen, als du gesagt hast, ich will das in Teile teilen.

You just sort of touched on that when you said, I want to break it down into parts.

Aber auch da kann man sich immer noch fragen, sind das sinnvolle Teile?

But even there, one can still ask oneself, are these meaningful parts?

Ja, also wenn du auf ein System triffst und der Architekt dir sagt,

Yes, so when you encounter a system and the architect tells you,

ja und dann haben wir so ein paar Methoden genommen und die haben wir zusammen in eine Klasse getan.

Yes, and then we took a few methods and put them together in a class.

Und dann haben wir so ein paar Klassen genommen und haben die zusammen in einen Package gesteckt,

And then we took a few classes and bundled them together in one package,

dann ahnt man schon, der Mensch hat nicht verstanden, wozu diese Modularisierung eigentlich gut ist.

Then one suspects that the person has not understood what this modularization is actually for.

Ich will nämlich eigentlich in einer Klasse etwas haben, was eine Aufgabe hat oder eine Zuständigkeit

I actually want to have something in a class that has a task or a responsibility.

und auch in einem Package dann im größeren Rahmen.

and also in a package then in a larger context.

Also das ist die eine Seite.

So that is one side.

Dann hatte ich als zweiten Faktor also die Geordnetheit untersucht.

Then I examined orderliness as the second factor.

Also gibt es eben oben und unten.

So there is above and below.

Ist das ein Zyklus, das ganze System oder Teile vom System?

Is this a cycle, the whole system, or parts of the system?

Oder habe ich etwas Hierarchisches hier?

Or do I have something hierarchical here?

Das ist also auch für Menschen unheimlich wichtig, dass die hierarchische Strukturen haben.

It is therefore incredibly important for people to have hierarchical structures.

Und als drittes habe ich noch die Mustertreue betrachtet.

And as a third point, I have also considered the adherence to the sample.

Also werden die Muster, die man den Menschen eigentlich beibringt, in der geplanten Architektur auch nachher umgesetzt.

So the patterns that one actually teaches people will also be implemented in the planned architecture later on.

Okay.

Okay.

Also so diese drei Aspekte sind dann eigentlich einfach wichtig für eine Architektur.

So these three aspects are actually just important for an architecture.

Ja, das heißt bei der Gliederung in einzelne Einheiten zum Beispiel müssen so Prinzipien wie Design,

Yes, this means that when structuring into individual units, for example, principles like design must be considered.

for Responsibility verwendet werden oder Information Hiding, um klare Kapseln zu gestalten.

to be used for Responsibility or Information Hiding to create clear capsules.

Aber jetzt fängt es ja an kompliziert zu werden, wenn ich die Beziehungen zwischen diesen Elementen mir genauer anschaue.

But now it starts to get complicated when I take a closer look at the relationships between these elements.

Also wir haben ja typischerweise Vererbungs- und Benutzbeziehungen, aber auch eben Enthaltenseinbeziehungen.

So we typically have inheritance and usage relationships, but also containment relationships.

Und du hast eben schon angesprochen, dieses Wort Zyklus ist da über deine Lippen gekommen.

And you just mentioned it, this word cycle has come off your lips.

Da gibt es dann offensichtlich, ich sage mal erlaubte Beziehungen und weniger erlaubte oder ungünstige Beziehungen.

There are obviously, I would say, permissible relationships and less permissible or unfavorable relationships.

Ja, also wenn man auf Architekturebene ein System betrachtet, dann sagt man einfach zu allen Beziehungen.

Yes, so when you look at a system at the architectural level, you simply refer to all relationships.

Also das eine, die eine Klasse oder das eine Package braucht das andere, wenn es entweder da eine Variable benutzt oder einen anderen Typ benutzt oder davon erbt.

So one class or package needs the other if it either uses a variable from it or utilizes another type or inherits from it.

Ich kann das eine, die eine Klasse nicht ohne die andere übersetzen, also braucht sie die.

I cannot translate one without the other class, so it needs it.

Das ist einfach so, da würde man dann in der Architektur nicht mehr unterscheiden zwischen den verschiedenen Arten von Beziehungen, die es da im Detail gibt.

That's just the way it is; one wouldn't distinguish between the different types of relationships that exist in detail in architecture.

Ja, weil grundsätzlich braucht der eine Teil den anderen.

Yes, because fundamentally one part needs the other.

So, und wenn diese Beziehungen nicht nur in einer Richtung verlaufen, sondern ich irgendwo Kreise feststellen kann, dann bezeichnet man das normalerweise als Zyklus.

So, if these relationships do not only run in one direction, but I can observe circles somewhere, it is usually referred to as a cycle.

Wenn ich mir das im Detail betrachte, dann stelle ich fest, ich will nicht nur lauter einzelne zusammenhängende Kreise von Klassen finden,

When I look at this in detail, I realize that I don't just want to find numerous individual interconnected circles of classes,

sondern ich will alle Kreise, die miteinander zu tun haben, finden.

But I want to find all the circles that are related to each other.

Also ich will sozusagen den am stärksten verbundenen Graph in dem System herausfinden, so nennt man das in der Mathematik.

So I want to find the most strongly connected graph in the system, that's what it's called in mathematics.

Also alle Klassen, die in irgendeiner Weise, von einer Klasse aus die anderen erreichen kann.

So all classes that can reach the other classes in any way from one class.

Ja.

Yes.

Und sowas untersucht man dann in der Architektur und bezeichnet dann häufig als Zyklengruppe, aber das deutscht sich dann so ein, dass man dann schon einfach immer Zyklus sagt dazu.

And such things are then examined in architecture and often referred to as a cycle group, but it becomes so Germanized that people just end up always calling it a cycle.

Ja, okay. Aber das will ich ja eigentlich nur deshalb identifizieren, weil es nicht günstig ist.

Yes, okay. But I actually want to identify that only because it is not inexpensive.

Genau.

Exactly.

Ich möchte es loswerden.

I want to get rid of it.

Genau.

Exactly.

Und das ist ja jetzt die große Herausforderung.

And that is now the big challenge.

Ja.

Yes.

Also ich glaube einmal wären wir natürlich sehr froh, wenn wir sofort bemerken würden, wenn wir so etwas einbauen und andererseits müssen wir es dann später ausbauen.

Well, I think we would of course be very happy if we immediately noticed when we incorporate something like that, and on the other hand, we then have to remove it later.

Ja.

Yes.

Aber vielleicht bevor wir die beiden Punkte ansprechen, könntest du nochmal sagen, wie?

But maybe before we address the two points, could you say once more how?

Wie geht das denn eigentlich? Wie passiert, also aus deiner Erfahrung, wenn du mit Projekten sprichst, wie kommt es, dass die Leute sowas überhaupt einbauen?

How does that actually work? From your experience, when you talk about projects, how does it happen that people actually incorporate such things?

Also es kann einmal sein, dass den Leuten nicht bewusst ist, dass das nicht gut ist.

So it can happen that people are not aware that this is not good.

Ja.

Yes.

Also die bauen einfach vor sich hin und brauchen irgendwelche Funktionalität aus einer anderen Klasse und dann benutzen sie die einfach, weil sie von der anderen Klasse wissen oder weil sie irgendwo her Source-Code kopieren und da war das schon so gemacht.

So they just build away and need some functionality from another class and then they just use it, either because they know about the other class or because they copy source code from somewhere where it was already done that way.

Vielleicht war da aber auch ein anderer Zustand.

Maybe there was another state as well.

Also vielleicht haben sie es auch eben.

Well, maybe they have it right now too.

Also es kann einmal eben durch Unachtsamkeit, weil man kopiert, passieren, weil die Leute gar nicht wissen, dass Zyklen nicht gut sind.

So it can happen just through negligence, because people are copying, because they don’t even know that cycles are not good.

Aber es passiert auch in modernen Entwicklungsumgebungen ganz oft, dass man einfach einen Klassennamen hinschreibt, weil man sich erinnert, dass man von irgendeiner Klasse was wollte und die Entwicklungsumgebung importiert das dann da automatisch und schreibt einfach oben in Java zum Beispiel den Import rein.

But it also often happens in modern development environments that you just write a class name because you remember that you wanted something from some class, and the development environment then automatically imports it and just writes the import at the top in Java, for example.

Und das sieht man nie.

And you never see that.

Weil man programmiert da unten irgendwo in seiner Klasse immer weiter, sodass man gar nicht wahrnimmt, dass man eigentlich einen Zyklus eingebaut hat.

Because you keep programming down there somewhere in your class, so that you don't even realize that you've actually built in a loop.

Also das kann einfach auch durch die heutigen Unterstützungen passieren, weil man den nicht mehr per Hand, sonst würde man da hinschreiben, oh jetzt benutze ich hier was aus dem GUI und ich bin eigentlich in einer ganz anderen Schicht.

So this can also happen through today's supports, because you can no longer do it by hand; otherwise, you would write there, oh now I’m using something from the GUI, and I’m actually in a completely different layer.

Also man würde das lesen, wenn man selber den Import hinschreiben müsste.

So one would read that if one had to write the import oneself.

Aber da ist dann sozusagen das schnelle Arbeiten wichtiger als solche Verhinderungen.

But then, so to speak, working quickly is more important than such hindrances.

Und die modernen Entwicklungsumgebungen versuchen aber eben gerade nicht zu verhindern, dass man Zyklen baut.

And modern development environments do not actually try to prevent you from creating cycles.

Was ich auch relativ gefährlich fände an einigen Ecken und Enden, weil die Leute sonst anfangen Workarounds zu machen.

What I would also find relatively dangerous in some areas is that people start to create workarounds.

Also mir ist es dann lieber, sie bauen das erstmal ein, ich sehe das dann nachher und kann sagen, oh was ist passiert und kann mit ihnen diskutieren, weil sie wollten ja was damit, die Leute, die Entwickler.

So I prefer that they implement it first; I will look at it later and can say, oh what happened, and can discuss it with them, because they wanted something with it, the people, the developers.

Ja, okay. Also das ist so zur Entstehungsgeschichte, wie baut man Zyklen ein, nicht als Anleitung, aber zum Verständnis.

Yes, okay. So this is about the origin story, how to incorporate cycles, not as a guide, but for understanding.

Und jetzt haben wir ja die Situation, wir möchten diesen Zyklus erkennen und wir möchten ihn wieder loswerden.

And now we have the situation that we want to recognize this cycle and we want to get rid of it again.

Und ich denke, da hast du ja relativ viel Arbeit in deiner Berufserfahrung reingesteckt.

And I think you have put a relatively lot of work into your professional experience.

Was kann man denn da tun?

What can one do about that?

Also wir haben heutzutage zum Glück eine ganze Reihe von Tools, mit denen wir solche Zyklen identifizieren können.

Well, fortunately, we have a whole range of tools nowadays that allow us to identify such cycles.

Es gibt Open Source Produkte, JD-Pen, das gibt es auch für C-Sharp und für andere Programmiersprachen noch.

There are open source products, JD-Pen, which are also available for C-Sharp and for other programming languages as well.

Oder es gibt eben auch kommerzielle Produkte, du hast ja SotoGraph und SotoArc schon erwähnt oder auch SonaJ.

Or there are also commercial products; you have already mentioned SotoGraph and SotoArc, or SonaJ.

Denn Zyklen sind eigentlich einfach zu finden, weil man ja bei der Analyse von so einem Software-System,

Because cycles are actually easy to find, because when analyzing such a software system,

mit so einem Tool sowieso alle Elemente und alle Beziehungen sucht.

with such a tool, it searches for all elements and all relationships anyway.

Und solche Graphen, da gibt es eine ganze Theorie hinter, sind leicht zu ermitteln.

And such graphs, there is a whole theory behind them, are easy to determine.

Das heißt, es ist nicht so schwer, Zyklen in Systemen zu finden und auch tatsächlich dem Menschen, der sich das anguckt,

That means it’s not that difficult to find cycles in systems and also actually show them to the person who is looking at it.

also dem Architekten in der Regel, darzustellen dann nachher.

So, to present it to the architect in general, afterwards.

Und man kann dann unterschiedlichste Maßzahlen darüber erheben, wie viele Klassen sind hier jetzt in Zyklen,

And one can then take various measurements regarding how many classes are currently in cycles here,

welche Zyklen sind groß, welche sind kleiner, welche gehen über Grenzen.

Which cycles are large, which are smaller, which cross boundaries?

Also das ist eben auch immer noch so eine Frage.

Well, that's still a question.

Ich kann in irgendwelchen Subsystemen oder Schichten kleine Zyklen haben.

I can have small cycles in any subsystems or layers.

Da brauche ich mich vielleicht nicht so drüber aufzuregen, aber ich kann auch welche haben, die über die Schichtengrenzen gehen.

I might not need to get so worked up about it, but I can also have ones that cross the layer boundaries.

Und dann ist eben die Frage, das will ich eigentlich nicht.

And then the question is, I actually don't want that.

Ich will mein Software-System aufteilen können in einzelne Komponenten,

I want to be able to split my software system into individual components,

die ich vielleicht auch gesondert weg zu einem anderen System tue.

which I might also separately process to another system.

Und dann will ich auf jeden Fall verhindern, dass da Zyklen inzwischen sind.

And then I definitely want to prevent any cycles from being in between.

Also insofern denke ich heute, man benutzt Werkzeuge, um sich das anzugucken,

So in that respect, I think today, one uses tools to take a look at it,

denn anders geht das kaum.

because that's barely possible otherwise.

Und dann kriegt man eigentlich relativ schnell einen Blick darauf und kriegt Zahlen.

And then you actually get a quick overview and receive numbers.

Man muss dann nur eben die nochmal mit jemandem interpretieren.

You just have to interpret it again with someone.

Das sind immer nur Hinweise.

These are always just hints.

Hier könnte irgendwas sein, guck mal hin.

There could be something here, take a look.

Ja, und was ich aus meiner Berufspraxis auch mitgenommen habe,

Yes, and what I have also taken from my professional practice,

man fängt zwar an mit Klassenzyklen, aber es gibt natürlich auch noch ekligere Zyklen,

one starts with class cycles, but there are of course also more disgusting cycles.

also Package-Zyklen oder andere Konstellationen.

also package cycles or other constellations.

Was kannst du dazu erzählen?

What can you tell me about it?

Ja, also ich...

Yes, so I...

Ich vertrete da vielleicht so eine Meinung, die so ein bisschen anders ist als das, was andere Leute sagen.

I might hold an opinion that is somewhat different from what other people are saying.

Also grundsätzlich interessieren mich natürlich Zyklen zwischen Schichten und Subsystemen und zwischen Packages auch.

Basically, I am of course interested in cycles between layers and subsystems as well as between packages.

Was aber eigentlich wirklich am schlimmsten ist für Entwickler zu reparieren, sind wirklich Klassenzyklen.

But what is actually the worst thing for developers to fix are really class cycles.

Also Zyklen, bei denen man im Grunde die Klassen redesignen muss, um diesen Zyklus aufzulösen.

So cycles in which you basically have to redesign the classes to resolve this cycle.

Also es gibt natürlich ganz einfache Zyklen.

So there are of course very simple cycles.

Ich hatte Zyklen so 16, 20 Klassen, wo es nur eine Beziehung gab, die den Zyklus hergab.

I had cycles of about 16, 20 classes, where there was only one relationship that defined the cycle.

Also eine Klasse, die bei einer anderen irgendwie eine Konstante haben wollte, den Wert für eine Konstante.

So a class that wanted a constant from another one somehow, the value for a constant.

Das ist natürlich ganz einfach zu reparieren, aber wenn man so Zyklen hat, bei denen sich mehrere Klassen gegenseitig verwenden,

That is of course quite easy to fix, but when you have cycles where multiple classes use each other,

also der eine braucht den einen, der andere braucht den anderen und das vielleicht fünf oder sechs Mal in so einem Zyklus,

so one needs one, the other needs the other, and maybe that happens five or six times in such a cycle,

dann kriegt man den ganz schwer weg.

then it’s very hard to get rid of it.

Da muss man wirklich mit den Leuten sich hinsetzen und sagen, was sollte diese Klasse eigentlich tun, was sollte die tun,

You really need to sit down with the people and say what this class should actually do, what it should do.

wer ist eigentlich hier oben, wer ist unten, wie gehört das eigentlich?

Who is actually up here, who is down there, how does this actually belong together?

Und das ist eigentlich am schwierigsten.

And that is actually the most difficult thing.

Das ist am schwierigsten normalerweise, weil man die Klassen auch wirklich umprogrammieren muss.

That is usually the most difficult part, because you really have to reprogram the classes.

Wenn man auf die höheren Ebenen geht und zum Beispiel einen Package-Zyklus hat,

When you go to the higher levels and, for example, have a package cycle,

dann ist es ganz häufig so, dass dieser Package-Zyklus nur eine Falschsortierung der Klassen ist.

Then it is often the case that this package cycle is just a misclassification of the classes.

Also es gibt natürlich Package-Zyklen, die bestehen aus Klassenzyklen.

So there are of course package cycles that consist of class cycles.

Dann sind sie genauso eklig wie ein Klassenzyklus.

Then they're just as disgusting as a class cycle.

Aber es gibt ganz oft auf den höheren Ebenen Zyklen, da hat einfach jemand eine Klasse aus Versehen in das falsche Package getan,

But there are often cycles at the higher levels where someone just accidentally put a class in the wrong package.

weil er nicht drüber nachdenkt.

because he doesn't think about it.

Weil er nicht drüber nachgedacht hat.

Because he didn't think about it.

Und dann stellt man fest, die Klasse ist hier falsch, die muss woanders hin und räumt so ein bisschen auf,

And then you realize that the class is wrong here, it needs to go somewhere else, and you tidy up a bit,

was sowieso immer passiert, wenn man sich die Systeme das erste Mal anguckt.

What always happens anyway when you look at the systems for the first time.

Und wenn man dann aufgeräumt hat, ist der Zyklus weg.

And when you have tidied up, the cycle is gone.

Da braucht man nur eine Klasse zu verschieben.

You only need to move one class.

Das ist nicht so schwierig.

That's not so difficult.

Die Klasse bleibt, wie sie ist.

The class remains as it is.

Alles bleibt so, wie es ist.

Everything remains as it is.

Es ist nur eine Umstrukturierung.

It's just a restructuring.

Also insofern bin ich eher jemand, der sagt, ja, ist schon schön, ich fange auch an aufzuräumen bei den Schichten.

So in that respect, I am more someone who says, yes, it's nice, I also start to tidy up the layers.

Und dann wende ich mich den Packages zu.

And then I turn to the packages.

Aber ich sehe dann schon, da ist ein Klassenzyklus dran schuld.

But I can see that a class cycle is to blame for that.

Das wird eklig.

This is going to be disgusting.

Also die finde ich einfach schlimmer.

So I just think that's worse.

Die sind am schwierigsten auszubauen.

They are the most difficult to dismantle.

Weil es da wirklich dann um die Verantwortlichkeiten der Einzelnen geht.

Because it really concerns the responsibilities of the individuals.

Aus dem Grund denke ich auch immer, man sollte gerade, wenn ein neues System gebaut wird,

For this reason, I always think that especially when a new system is built,

den Leuten sehr ans Herz legen, sich um diese Klassenebene zu kümmern.

strongly encourage people to take care of this grade level.

Da ist eh das noch klein.

That's still small anyway.

Was soll man da über Schichten nachdenken am Anfang?

What is there to think about layers at the beginning?

Da muss man Ordnung halten.

You have to keep order there.

Ja.

Yes.

Das hat man nachher immer wieder, diese übergreifenden Zyklen.

You always have that afterwards, these overarching cycles.

Und das wird sehr unangenehm.

And that will be very uncomfortable.

Ja.

Yes.

Gibt es denn, du sprachst ja gerade so vom Anfang,

Is there, you just talked about the beginning,

gibt es denn Architekturstile, die besonders günstig sind, um Zyklen zu vermeiden, um saubere Architekturen zu bauen?

Are there architectural styles that are particularly favorable for avoiding cycles to build clean architectures?

Ja, also das habe ich mir in meiner Doktorarbeit ja auch ein bisschen angeguckt.

Yes, well, I looked at that a bit in my doctoral thesis as well.

Und in meiner Wahrnehmung sind die Architekturstile sehr hilfreich, die eine Mustersprache haben.

And in my perception, the architectural styles that have a pattern language are very helpful.

Also sowas, wie du das von WAM natürlich auch kennst, aber im Quasar ist das auch drin.

Well, something like that, which you naturally know from WAM, is also included in Quasar.

Also ein Architekturstil, der für jede Art von Klasse, die man hat, sagt, okay, diese Klasse gehört zu Kategorie A und diese Klasse gehört zu Kategorie B.

So an architectural style that says for every type of class you have, okay, this class belongs to category A and this class belongs to category B.

Und die Klassen aus Kategorie A dürfen nur Klassen aus Kategorie B benutzen und B darf nicht A benutzen.

And the classes from category A are only allowed to use classes from category B, and B is not allowed to use A.

Und dann in der Regel geben diese Architekturstile auch noch was über die Schnittstelle von diesen Klassenarten her.

And then usually these architectural styles also convey something about the interface of these types of classes.

Und wenn man solch einen Architekturstil benutzt, ich habe das auch viel bei Firmen gesehen in Haus sozusagen,

And when one uses such an architectural style, I have also seen that a lot in companies in the house, so to speak,

dass die einen eigenen Architekturstil auf der Musterebene hatten, also eine Mustersprache tatsächlich,

that they had their own architectural style at the pattern level, indeed a pattern language.

dann kümmert man sich am Anfang sehr um die Klassenebene.

Then you focus very much on the class level at the beginning.

Und das ist sozusagen der Kern, dass das System nachher gut strukturiert ist.

And that is, so to speak, the core, that the system is well structured afterwards.

Und ich habe keine Mustersprache gesehen, die Zyklen hatte bis jetzt, lustigerweise.

And I haven't seen any template language that had cycles until now, funny enough.

Oder erfreulicherweise.

Or pleasingly.

Ja, vielleicht ist das ja auch gerade in engem Zusammenhang miteinander.

Yes, maybe that is closely related.

Ja, das finde ich sehr spannend, das zu hören.

Yes, I find it very exciting to hear that.

Du hast ja eigentlich schon Tipps formuliert für Softwareentwickler,

You have actually already formulated tips for software developers,

nämlich von Anfang an darauf zu achten, Zyklen zu vermeiden.

namely to pay attention from the very beginning to avoid cycles.

Was würdest du denn so als abschließendes Statement rausgeben wollen?

What would you like to say as a final statement?

Wie können Softwareentwickler, vielleicht auch jüngere Softwareentwickler,

How can software developers, perhaps younger software developers,

sich optimal mit der Situation auseinandersetzen, dass Zyklen in ihre Software kommen werden und dass sie das vermeiden sollten?

To optimally deal with the situation that cycles will come into their software and that they should avoid that?

Also ich denke, wichtig ist, dass man erstmal überhaupt wahrnimmt, dass man mit Zyklen Probleme kriegen kann.

So I think it's important to first recognize that one can encounter problems with cycles.

Also was ich immer den Leuten am Anfang versuche beizubringen, ist, dass sie wirklich testgetrieben vorgehen.

So what I always try to teach people at the beginning is that they should really take a test-driven approach.

Und ich glaube, das ist gerade am Anfang besonders wichtig, wenn man testgetrieben lernt zu entwickeln und das dann nachher auch wirklich tut,

And I believe that this is particularly important at the beginning, when one learns to develop in a test-driven way and then actually does it later.

wird man sowieso nicht so viele Zyklen in seiner Architektur haben.

You won't have that many cycles in your architecture anyway.

Also ganz abgesehen von all dem, was ich dazu noch erzählt habe, was besser oder schlechter ist.

So apart from everything else I've said about what is better or worse.

Wenn man testet, dann will man oder braucht man einzelne Klassen, die man testen kann oder einzelne Gruppen von Klassen.

When testing, one wants or needs individual classes that can be tested or individual groups of classes.

Und wenn das alles verzügelt ist, dann wird es ganz schwer fallen, da vernünftige Tests zu schreiben.

And if all of this is delayed, it will be very difficult to write reasonable tests.

Und insofern würde ich das eigentlich als erstes Statement sagen, okay, schreibt Tests, dann werdet ihr sowieso nicht so viele Zyklen haben.

And in that respect, I would actually say as a first statement, okay, write tests, then you won't have that many cycles anyway.

Und den Rest werdet ihr dann finden mit irgendeinem Tool oder einem Architekten.

And you will find the rest with some tool or an architect.

Okay. Ist es dir wichtig, dabei dann wirklich testgetrieben vorzugehen oder würde es schon reichen, überhaupt Unit-Tests zu schreiben für einzelne Units?

Okay. Is it important to you to really take a test-driven approach, or would it be sufficient to write unit tests for individual units?

Ja, also ich bin froh, wenn die Leute Tests schreiben. Wenn sie testgetrieben, also erst den Test und dann programmieren, bin ich natürlich noch glücklicher.

Yes, I am glad when people write tests. If they are test-driven, meaning they write the test first and then program, I am of course even happier.

Aber das kriegt man nicht.

But you can't get that.

Ich bin häufig bei den Leuten gar nicht verankert.

I am often not anchored with the people at all.

Also wir versuchen das ja auch immer hier wieder bei unseren jungen Studenten.

So we always try to do this again with our young students here.

Aber es ist so ein Ding, ich will erst mal, ich will probieren, wie das geht.

But it's a thing, I want to first, I want to try how it works.

Und ich will nicht vorher überlegen, wie es gehen soll, merke ich dann oft bei den Leuten.

And I don’t want to think in advance about how it should go, I often notice that with people.

Wenn man das ein bisschen länger macht, dann mag man das auch, dass man erst mal hinschreibt, wie es eigentlich gehen soll, bevor man es ausprobiert.

If you do that for a little while longer, you start to like that you first write down how it should actually work before you try it out.

Aber ich habe so das Gefühl, das ist vielleicht auch ein bisschen die Ruhe des Alters.

But I have a feeling that this might also be a bit of the calm of old age.

Ich weiß nicht, dass man sich da ein bisschen zurücklehnt und sagt, ja, ja, ist schon okay. Erst mal Tests schreiben.

I don't know, people just relax a bit and say, yeah, yeah, it's okay. First, write some tests.

Okay. Ja, das freut mich. Das ist doch ein schönes Schlussstatement.

Okay. Yes, I am happy about that. That's a nice closing statement.

Herzlichen Dank, Carola, für das Interview.

Thank you very much, Carola, for the interview.

Und ich freue mich, wenn wir in Zukunft vielleicht mal wieder zu diesem Thema zusammenkommen.

And I look forward to perhaps coming together on this topic again in the future.

Ja, das freut mich auch. Ich danke dir.

Yes, I'm glad about that too. Thank you.

Soweit zu diesem Thema.

So much for this topic.

Ich hoffe, Ihnen hat der Beitrag Anregung gegeben und vielleicht haben Sie schon in naher Zukunft die Möglichkeit, etwas davon auszuprobieren oder umzusetzen.

I hope the post has given you some inspiration, and perhaps you will have the opportunity to try out or implement something from it in the near future.

Dieser Podcast wurde nicht zuletzt möglich gemacht durch die Unterstützung meines Arbeitgebers, der Blue Carat AG.

This podcast was made possible in part by the support of my employer, Blue Carat AG.

Nähere Informationen über die Blue Carat finden Sie unter www.bluecarat.de.

For more information about Blue Carat, please visit www.bluecarat.de.

Diesen Podcast erreichen Sie unter der Adresse www.wolfgideonblick.de.

You can reach this podcast at www.wolfgideonblick.de.

Dort finden sich auch die anderen Folgen dieser Reihe.

There are also the other episodes in this series.

Außerdem sind dort Hinweise auf die hier erwähnten Quellen zu finden.

Furthermore, there are references to the sources mentioned here.

Bis zum nächsten Mal. Ihr und euer Wolfgideon Blick.

Until next time. Your Wolfgideon gaze.

ARD Text im Auftrag von Funk

ARD Text on behalf of Funk

Continue listening and achieve fluency faster with podcasts and the latest language learning research.