AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Softwareentwicklung im Allgemeinen Softwaretests und Qualitätssicherung Methode zu lang - Toxizitäts Metriken - FixInsight

Methode zu lang - Toxizitäts Metriken - FixInsight

Ein Thema von creehawk · begonnen am 5. Sep 2018 · letzter Beitrag vom 10. Sep 2018
Antwort Antwort
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
243 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Methode zu lang - Toxizitäts Metriken - FixInsight

  Alt 5. Sep 2018, 13:42
Aha.

Danke für die Antworten Links, habe ich gelesen.

Zusammengefasst: Taten sind eher nicht notwendig. Was ich am meisten gelesen habe ist das Thema Übersichtlichkeit und aussagekräftige Benennung von Funktionen. Das die Teile dann ~ 80 Zeilen lang werden tut in unserem Fall der Sache keinen Abbruch. Zumal wir uns die Mühe machen - nicht zuletzt damit wir es auch noch nächstes Jahr verstehen - ausgiebig Kommentare zu verwenden. Auch die Namensgebung haben wir an die Lesbarkeit angepasst. Unser geprüftes Programm dient zur Erzeugung von Spielkarten Skripten für ein Computerspiel (Age of Empires), die angesprochene Function ist vom Namen her für jeden, des sich Programm ansieht und das Spiel kennt, völlig klar.

Wenn es also nur darum geht ob ich mal scrollen muss kann es mir also egal sein.

Ich hatte den Begriff Funktion bisher so aufgefasst: Bündeln einer öfter wiederkehrenden Aufgabe. Oder bündeln eines Abschnittes (bzw.mehrere Abschnitte) die man nach Bedarf einmal aufruft oder nicht. Beispiel: Winterlandschaft oder Sommerlandschaft.

Jedenfalls gehe ich davon aus das es Delphi wurscht ist ob die Funktion nun 20 oder 150 Zeilen lang ist. Oder liege ich falsch?

Toxizitäts Metriken lege ich jedenfalls unter 'Brauch` ich nicht' ab. In unserem Falle. Sollte ich mal ein Programm schreiben sollen für die Steuerung eines Raumschiffes kann ich mir das ja nochmal ansehen.

creehawk
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#2

AW: Methode zu lang - Toxizitäts Metriken - FixInsight

  Alt 5. Sep 2018, 14:39
Jupp, Delphi ist es egal ... da kann am Ende auch der ganze Code nur in einer einzigen Funktion liegen. (z.B. bei einem Konsolenprogramm alles in der DPR nach dem BEGIN)

Es geht da wirklich nur um die Übersichtlichkeit/Wartbarkeit des Codes.
Im weiteren Sinne auch im die Testbarkeit. Ist eine große Methode nochmal unterteilt, dann kann man die Einzelteile auch getrennt testen.





Und notfals macht man sich eine {$REGION} in die Methode und faltet alles zu einer Zeile zusammen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 5. Sep 2018 um 14:43 Uhr)
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Methode zu lang - Toxizitäts Metriken - FixInsight

  Alt 5. Sep 2018, 15:04
Ja, hier hat sich einer einen Dreck um sowas geschert... Eine DLL, dient dem Ausdruck von Angeboten, Gesamt-, Zwischen- und Endrechnungen, Gutschriften, Mahnungen, Sammelrechnungen, Stornierungen und so weiter. Eben alles, was an Ausdrucken in einem Geschäft so anfällt. Außerdem werden diese Dokumente in PDF's übertragen, in der Datenbank wird alles sauber verbucht, dann für SAP zusammengestellt und in die benutzerabhängigen Dokumentablagen kopiert.

Alles in einer (in Zahlen: 1), 11k Zeilen langen Methode.

Darin einen Fehler zu suchen oder was zu ändern entfärbt die Haare besser als jeder Wasserstoffperoxid.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.201 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Methode zu lang - Toxizitäts Metriken - FixInsight

  Alt 5. Sep 2018, 16:16
Rekordverdächtig.

Da lobt man sich doch Refactoring-Tools wie MMX das einen einfach Text markieren und mit einem Hotkey in eine neue Methode auslagern lässt
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Methode zu lang - Toxizitäts Metriken - FixInsight

  Alt 5. Sep 2018, 19:57
Habe ich schon versucht. Von den MMX-Tools habe ich erst kürzlich was mitbekommen und bin begeistert. Aber gegen sowas hier:

Delphi-Quellcode:
if (s_Art='Rechnung') or (s_Art='Endrechnung') or (s_Art='Gutschrift') then
begin
   //900 Zeilen Code
   if (s_Art = 'irgendwas') then
      ...
end;

if (s_Art='Angebot') then
begin
   //300 Zeilen Code
end;
Da ist nix mit Refactoring und/oder Auslagern in extra Methoden. Das Ding ist ein Meisterwerk des unentwirrbaren Spaghetti-Codes.

Geändert von OlafSt ( 5. Sep 2018 um 19:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#6

AW: Methode zu lang - Toxizitäts Metriken - FixInsight

  Alt 5. Sep 2018, 22:06
Delphi-Quellcode:
if MatchStr(s_Art, ['Rechnung', 'Endrechnung', 'Gutschrift']) then
   MethodeFürRechnungen(...);

if s_Art = 'Angebotthen
   MethodeFürAngebote(...);
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.687 Beiträge
 
Delphi 12 Athens
 
#7

AW: Methode zu lang - Toxizitäts Metriken - FixInsight

  Alt 5. Sep 2018, 22:45
Delphi-Quellcode:
if MatchStr(s_Art, ['Rechnung', 'Endrechnung', 'Gutschrift']) then
   MethodeFürRechnungen(...);

if s_Art = 'Angebotthen
   MethodeFürAngebote(...);
oder
Delphi-Quellcode:
if IsRechnungsArt(s_Art) then
   MethodeFürRechnungen(...);

if IsAngebotsArt(s_Art) then
   MethodeFürAngebote(...);
oder, wenn es sich gegenseitig ausschließt
Delphi-Quellcode:
if IsRechnungsArt(s_Art) then
   MethodeFürRechnungen(...)
else if IsAngebotsArt(s_Art) then
   MethodeFürAngebote(...);
oder
Delphi-Quellcode:
case GetArt(s_Art) of
  artRechnung: MethodeFürRechnungen(...);
  artAngebot: MethodeFürAngebote(...);
  ...
else
  raise EInvalidArtExcetion.Create('unbekannte Art: ' + s_Art);
end;
Auch der weiteste Weg beginnt mit einem ersten Schritt. (Konfuzius)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.682 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Methode zu lang - Toxizitäts Metriken - FixInsight

  Alt 6. Sep 2018, 05:00
Habe ich schon versucht. Von den MMX-Tools habe ich erst kürzlich was mitbekommen und bin begeistert. Aber gegen sowas hier:

[Delphi]
if (s_Art='Rechnung') or (s_Art='Endrechnung') or (s_Art='Gutschrift') then
begin
//900 Zeilen Code
if (s_Art = 'irgendwas') then
...
end;
Da ist nix mit Refactoring und/oder Auslagern in extra Methoden. Das Ding ist ein Meisterwerk des unentwirrbaren Spaghetti-Codes.
Ablaufsteuerung durch casesensitive Strings - krass - nicht mal Konstanten verwendet, ich hoffe es gibt wenigstens ein Handbuch zur Funktion
Sven Harazim
--
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Methode zu lang - Toxizitäts Metriken - FixInsight

  Alt 6. Sep 2018, 08:15
Nope. Das ganze ist auch absolut hervorragend dokumentiert und kommentiert. Kommentare sind drin, jede Menge: Auskommentierter Code, weil geändert und Fehlerbehebungen mit Kürzel wer und wann.

Kommentare mit erklärender Funktion gibt es - wenn man meine hinzugefügten abzieht - genau gar keinen.

Wäre die Routine so aufgebaut, wie die Vorschreiber es sich vorstellen, hätte ich mich da auch mal dran gewagt. Ihr geht davon aus, das das ganze logisch nach Funktion gegliedert ist. Das würde das Refactoring tatsächlich vereinfachen. Aber so ist das Ding nicht gebaut.

Das Teil ist so strukturiert, wie ein Drucker arbeitet . Am Anfang des Blattes gibt es [Code]. Die Zeile darunter ist aber für Kunden "BCD" anders, also [Code mit Ausnahme]. Dann muß da ja n Firmenlogo kommen, also [Je nach s_Art [je nach Kunde [Code]]. Hab ich schon das Seitenende erreicht ? Ach ja, englische Texte brauchen wir ja auch noch... Und so weiter. Zusätzlich wird etwa ein dutzend SQL-Queries geöffnet, je nach s_Art und Kunde mit anderen Statements versehen; da werden Formulare geöffnet (weil die nicht wußten, wie man sonst Klassen erzeugt) und in versteckte Edit-Felder Werte eingetragen (keine Ahnung von Properties gehabt) und dann im OnChange-Handler jeweils s_Art- und Kunde-Abhängige Dinge gemacht. Wirklich benutzt wird das dann 5k Zeilen weiter unten...

Wie schon gesagt, Spaghetti-Code vom allerfeinsten. Das auseinander zu sortieren hat schon mal einer versucht und es nach 3 Monaten aufgegeben, weil die zahllosen Seiteneffekte einfach nicht mehr beherrschbar waren.

Letztlich geht es aber nicht um dieses "Meisterwerk der Software-Entwicklung". Man kann tatsächlich Code produzieren, mit dem man nur noch eines machen kann: Löschen, weil selbst so coole Tools wie MMX einfach nicht mehr gegenan kommen. Zum Glück ersetzen wir diesen Müll sukzessive durch wartbaren und besser dokumentierten (weil meinen ) Code.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz