... | @@ -5,9 +5,11 @@ Das Augenmerk wird besonders auf diese Art von Patterns/Smells gelegt, da sich d |
... | @@ -5,9 +5,11 @@ Das Augenmerk wird besonders auf diese Art von Patterns/Smells gelegt, da sich d |
|
|
|
|
|
## Anti-Pattern & Code-Smells
|
|
## Anti-Pattern & Code-Smells
|
|
|
|
|
|
|
|
### Anti-Pattern
|
|
|
|
|
|
Als Basis für die Erkennung, wurden zu dieser Thematik die Informationen von [Wikipedia: Anti-Pattern](https://de.wikipedia.org/wiki/Anti-Pattern) und [Wikipedia: Smell](https://de.wikipedia.org/wiki/Smell_(Programmierung)) herangezogen. Mithilfe dieser wurden die betreffenden Muster im Code ausfindig gemacht um nun im Einzelnen näher betrachtet zu werden.
|
|
Als Basis für die Erkennung, wurden zu dieser Thematik die Informationen von [Wikipedia: Anti-Pattern](https://de.wikipedia.org/wiki/Anti-Pattern) und [Wikipedia: Smell](https://de.wikipedia.org/wiki/Smell_(Programmierung)) herangezogen. Mithilfe dieser wurden die betreffenden Muster im Code ausfindig gemacht um nun im Einzelnen näher betrachtet zu werden.
|
|
|
|
|
|
### [Copy&Paste](https://de.wikipedia.org/wiki/Anti-Pattern#Copy_and_Paste)
|
|
#### [Copy&Paste](https://de.wikipedia.org/wiki/Anti-Pattern#Copy_and_Paste)
|
|
|
|
|
|
Copy&Paste als solches, ist die einfachste Möglichkeit mit wenig Aufwand bereits vorhandene Implementierungen weiter zu verwenden. Die dadurch gegebene Einfachheit der Wiederverwendung mündet allerdings dann meist im weiteren Verlauf der Entwicklung in tiefer sitzende Anti-Patterns deren Entfernung schwieriger ist als wenn es zu Beginn eigenständig entwickelt wurde.
|
|
Copy&Paste als solches, ist die einfachste Möglichkeit mit wenig Aufwand bereits vorhandene Implementierungen weiter zu verwenden. Die dadurch gegebene Einfachheit der Wiederverwendung mündet allerdings dann meist im weiteren Verlauf der Entwicklung in tiefer sitzende Anti-Patterns deren Entfernung schwieriger ist als wenn es zu Beginn eigenständig entwickelt wurde.
|
|
|
|
|
... | @@ -27,10 +29,82 @@ preparationIndex: function (options) { |
... | @@ -27,10 +29,82 @@ preparationIndex: function (options) { |
|
ARSnova.app.mainTabPanel.tabPanel.userQuestionsPanel.toolbar.setTitle(Messages.PREPARATION_QUESTIONS);
|
|
ARSnova.app.mainTabPanel.tabPanel.userQuestionsPanel.toolbar.setTitle(Messages.PREPARATION_QUESTIONS);
|
|
```
|
|
```
|
|
|
|
|
|
### [Magic Values](https://de.wikipedia.org/wiki/Anti-Pattern#Magische_Werte)
|
|
#### [Magic Values](https://de.wikipedia.org/wiki/Anti-Pattern#Magische_Werte)
|
|
|
|
|
|
|
|
Insofern keine Problematik, da es die Funktionalität des Codes nicht beeinflusst, allerdings deren Verständlichkeit in Mitleidenschaft zieht.
|
|
|
|
So geschieht dies vor allem bei der Verwendung von zwar bekannten Werten wie bspw. 404 und 405, die aber außerhalb ihres Kontextes nicht zuordbar sind.
|
|
|
|
|
|
|
|
Außerdem wurde an mehreren Stellen innerhalb des Codes die "Duration" als Zahlenwerte definiert. Dies verschlechtert die Wartbarkeit des Codes insofern, als das Änderungen an dieser manuell durchgeführt an jeder Stelle des Codes angepasst werden müssen.
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
sTP.animateActiveItem(sTP.inClassPanel, {
|
|
|
|
type: 'slide',
|
|
|
|
direction: 'right',
|
|
|
|
duration: 700
|
|
|
|
});
|
|
|
|
```
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
if (options.active === 1) {
|
|
|
|
questionStatus.questionOpenedSuccessfully();
|
|
|
|
} else {
|
|
|
|
questionStatus.questionClosedSuccessfully();
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
Es lässt sich anhand der oberen Methode lediglich durch den Kontext (Opened/Closed) erkennen, aus welchem Grund eine Abfrage gegen 1 gestellt wurde. Die Verwendung einer Konstanten wäre hier besser.
|
|
|
|
|
|
|
|
#### [Lavafluss](https://de.wikipedia.org/wiki/Anti-Pattern#Lavafluss)
|
|
|
|
|
|
|
|
Aufgrund des bereits vorliegenden Anti-Patterns Copy & Paste und der beachtlichen größe des ARSnova-Projekts liegt die Vermutung nahe, dass sich bereits an einigen Stellen ein sogenannter Lavafluss gebildet hat. Durch immer weiter steigende Komplexität des Projekts, wird dieses Anti-Pattern weitergehend gefördert.
|
|
|
|
|
|
|
|
Eine Entfernung dieser Lavaflüsse (Lavapfützen) ist nur mit sehr großem Aufwand möglich und sollte im weiteren Projektverlauf durch gezielte Feature-Entwicklung allein auf Basis von Codeverständnis erfolgen.
|
|
|
|
|
|
|
|
### Code-Smells
|
|
|
|
|
|
|
|
Wie der Name schon vermuten lässt, handelt es sich bei den sogenannten Code-Gerüchen um strukturelle und inhaltliche Vorkommen, welche das Gesamtbild des vorliegenden Codes in Mitleidenschaft ziehen.
|
|
|
|
Entgegen den Anti-Patterns, tragen Code-Smells nicht im späteren Verlauf zu Funktionsstörungen sondern fördern lediglich das Code-Unverständnis.
|
|
|
|
|
|
|
|
#### [Code-Duplizierung](https://de.wikipedia.org/wiki/Quelltextklon)
|
|
|
|
|
|
|
|
Copy&Paste als solches, ist die einfachste Möglichkeit mit wenig Aufwand bereits vorhandene Implementierungen weiter zu verwenden. Die dadurch gegebene Einfachheit...
|
|
|
|
|
|
|
|
Die Code-Duplizierung welche zu Quelltextklonen tendiert, fördert Redundanzen im Code. Da in ARSnova häufig bereits vorhandenes als Basis für neue Funktionalitäten dient, wird dieser Code-Smell besonders gefördert.
|
|
|
|
|
|
|
|
#### [Lange Methode](https://de.wikipedia.org/wiki/Smell_(Programmierung))
|
|
|
|
|
|
|
|
Betrachtet man die Init-Funktionen der View-Klassen, so wird deutlich, dass diese oft eine Größe von weit über 100 Zeilen erreicht und somit eindeutig den Code-Smell einer langen Methode trägt.
|
|
|
|
Methoden mit solchen Größenausmaßen fördern weitergehende Anti-Pattern sowie bilden diese eine Basis für die Generierung von technischen Schulden, welche im weiteren Verlauf nur schwer wieder zurückgebildet werden können.
|
|
|
|
|
|
|
|
#### [Datenklumpen](https://de.wikipedia.org/wiki/Smell_(Programmierung))
|
|
|
|
|
|
|
|
Bei Datenklumpen treten bestimmte Code-Abschnitte immer gemeinsam auf und bilden dadurch einen scheinbar untrennbaren Klumpen, da die Abhängigkeiten zu tief gesetzt sind.
|
|
|
|
Dieses Gefühl kommt bei Abschnitten wie der Toolbar in ARSnova auf, auch wenn deren Funktionalitäten nur durch die gemeinsame Nutzung der dort vorhandenen Codestücke gewährleistet werden kann.
|
|
|
|
|
|
|
|
Dies ist ein gutes Beispiel dafür, dass Code-Smells begünstigt durch die Entwicklung "gewollt" eingebunden werden müssen.
|
|
|
|
|
|
|
|
#### [Kommentare](https://de.wikipedia.org/wiki/Smell_(Programmierung))
|
|
|
|
|
|
|
|
Kommentare sind wichtig und sollten dort verwendet werden, wo das Verständnis der Funktionen nicht allein durch den Code zu erkennen ist. Meist finden Kommentare allerdings dort Verwendung, wo keine weiterreichenden Informationen durch ihr Auftreten geboten werden.
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
/* toolbar items */
|
|
|
|
toolbar: null,
|
|
|
|
backButton: null,
|
|
|
|
cancelButton: null,
|
|
|
|
editButton: null,
|
|
|
|
gridStatistic: null,
|
|
|
|
```
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
var hasEmptyAnswers = function (possibleAnswers) {
|
|
|
|
var empty = false;
|
|
|
|
//=====================================================
|
|
|
|
if (panel.questionObj.questionType !== 'freetext') {
|
|
|
|
```
|
|
|
|
|
|
Insofern keine Problematik, da es die Funktionalität des Codes nicht beeinflusst, allerdings deren Verständlichkeit in Mitleidenschaft zieht.
|
|
## Schlusswort
|
|
|
|
|
|
### [Gas-Fabrik](https://de.wikipedia.org/wiki/Anti-Pattern#Gasfabrik)
|
|
Die Entwicklung des QA-Reports konnte in Kombination mit dem Pattern "read the code in one hour" einen guten und weiterführenden Einblick in die Entwicklung von ARSnova und der vorhandenen Klassen und Funktionen bieten.
|
|
|
|
|
|
### [Lavafluss](https://de.wikipedia.org/wiki/Anti-Pattern#Lavafluss) |
|
Zurückblickend kann man sagen, dass sich durch die eingehende Auseinandersetzung mit dem Projekt schon in dieser Phase für das weitere vorgehen positiv auswirken sollte. |
|
|
|
\ No newline at end of file |