Connect with us

Entwicklung & Code

Neu in .NET 10.0 [6]: Generische Erweiterungsblöcke in C# 14.0


Erweiterungsblöcke mit dem Schlüsselwort extension habe ich in der vorherigen Folge der Serie zu .NET 10.0 vorgestellt. Ein Erweiterungsblock darf einen oder mehrere generische Typparameter (optional inklusive Einschränkung mit where) besitzen:

Weiterlesen nach der Anzeige

extension(List source) { … }

oder

extension(List source) where T : INumber { … }


Der Dotnet-Doktor – Holger Schwichtenberg

Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.

Folgender Code zeigt eine Klasse mit Erweiterungsblocken für List, wobei T auf Zahlen beschränkt ist, durch where T : INumber:


public static class MyExtensions
{
 extension(List source) where T : INumber // <-- Receiver Ein Erweiterungsblock darf eine oder mehrere generische Typparameter (optional inklusive Constraint) besitzen!!!
 {
  public List WhereGreaterThan(T threshold)
           => source.Where(x => x > threshold).ToList();
 
  public bool IsEmpty
           => !source.Any();
 
  /// 
  /// Erweitern um eine Instanz-Eigenschaft mit Getter und Setter
  /// 
  public int Size
  {
   get { return source.Count; }
   set
   {
    while (value < source.Count) source.RemoveAt(source.Count - 1);
    if (value > source.Count) source.AddRange(Enumerable.Repeat(default(T)!, value - source.Count).ToList());
   }
  }
 
  // NEU: Operatorüberladung als Extension und neu ist auch, dass man += überladen kann
  public void operator +=(int count)
  {
   source.Size = source.Count + count;
  }
 
  // NEU: Operatorüberladung als Extension und neu ist auch, dass man -= überladen kann
  public void operator -=(int count)
  {
   source.Size = source.Count - count;
  }
 
  // NEU: Operatorüberladung als Extension und neu ist auch, dass man ++ überladen kann
  public void operator ++()
  {
   source.Size += 1;
  }
 }
}


Folgender Code ruft die Erweiterungsmethoden für List auf:

Weiterlesen nach der Anzeige


public void Run()
 {
  CUI.Demo(nameof(CS14_ExtensionDemo) + ": Collection");
 
  var list = new List { 1, 2, 3, 4, 5 };
  var large = list.WhereGreaterThan(3);
  Console.WriteLine(large.IsEmpty);
  if (large.IsEmpty)
  {
   Console.WriteLine("Keine Zahlen größer als 3!");
  }
  else
  {
   Console.WriteLine(large.Count + " Zahlen sind größer als 3!");
  }
 
  CUI.H2("list.Size = 10");
  // Das klappt: Die Liste wird auf 10 Elemente mit Nullen aufgefüllt
  list.Size = 10;
  foreach (var x in list)
  {
   CUI.OL(x, separator: " = ");
  }
 
  CUI.H2("list.Size -= 2");
  list.Size -= 2;
  bool restart = true;
  foreach (var x in list)
  {
   CUI.OL(x, separator: " = ", restartCounter: restart);
   restart = false;
  }
 
  CUI.H2("list.Size++");
  list.Size++;
  restart = true;
  foreach (var x in list)
  {
   CUI.OL(x, separator: " = ", restartCounter: restart);
   restart = false;
  }
 }


Der Code erzeugt folgende Ausgabe:



Ausgabe des Beispielcodes


(rme)



Source link

Entwicklung & Code

Eine Schätzung ist keine Prognose: Sprachphilosophie im Softwareprojekt


Nicht nur in agilen Projekten gehört es zum normalen Vorgehen, Aufgaben zu schätzen (Ticket-Estimation). Persönlich vertrete ich dabei die Meinung, dass Schätzungen immer richtig sind. Es handelt sich schließlich um eine Schätzung.

Weiterlesen nach der Anzeige


Escape the Feature Factory: Stefan Mintert

Escape the Feature Factory: Stefan Mintert

(Bild: 

Stefan Mintert

)

Stefan Mintert arbeitet mit seinen Kunden daran, die Unternehmenskultur in der Softwareentwicklung zu verbessern. Das derzeit größte Potenzial sieht er in der Leadership; unabhängig von einer Hierarchieebene.

Die Aufgabe, dieses Potenzial zu heben, hat er sich nach einem beruflichen Weg mit einigen Kurswechseln gegeben. Ursprünglich aus der Informatik kommend, mit mehreren Jahren Consulting-Erfahrung, hatte er zunächst eine eigene Softwareentwicklungsfirma gegründet. Dabei stellte er fest, dass Führung gelernt sein will und gute Vorbilder selten sind.

Es zeichnete sich ab, dass der größte Unterstützungsbedarf bei seinen Kunden in der Softwareentwicklung nicht im Produzieren von Code liegt, sondern in der Führung. So war es für ihn klar, wohin die Reise mit seiner Firma Kutura geht: Führung verbessern, damit die Menschen, die die Produkte entwickeln, sich selbst entwickeln und wachsen können.

Für Heise schreibt Stefan als langjähriger, freier Mitarbeiter der iX seit 1994.

Wikipedia versteht darunter die genäherte Bestimmung von Zahlenwerten, Größen oder Parametern durch Augenschein, Erfahrung oder statistische Methoden. Eine Schätzung bestimmt also etwas, was ist, und nicht etwas, was wird. Eine Schätzung kümmert sich nicht um die Zukunft.

Die meisten Manager, die ich erlebt habe, behandeln Schätzungen aber wie eine Prognose, also eine Vorhersage über die Zukunft.

Wenn die Zukunft dann zur Gegenwart geworden ist, vergleicht man die Schätzung aus der Vergangenheit mit einem Wert, der sich zu einem späteren Zeitpunkt entwickelt hat. Das passt nicht zusammen.

Was die Manager eigentlich wollen, ist – wie gesagt – eine Prognose. Auch dazu hat Wikipedia etwas Interessantes zu sagen: Von anderen Aussagen über die Zukunft (z. B. Prophezeiungen) unterscheiden sich Prognosen durch ihre Wissenschaftsorientierung.

Wer sich als Entwickler von Schätzungen und dem Umgang damit unter Druck gesetzt fühlt, kann mal versuchen, Schätzungen durch Prognosen zu ersetzen. Selbstverständlich explodiert damit der Aufwand. Und genau das ist der Punkt: Viele Manager sprechen sehr viel und sehr gerne darüber, wie man besser schätzen kann. In diese Frage wird viel Energie gesteckt. Die Frage, wie man besser arbeiten kann, tritt dabei oft in den Hintergrund.

Weiterlesen nach der Anzeige

Es wirkt manchmal so, als ob die Schätzung (die eigentlich eine Prognose sein soll) wichtiger als das Produkt ist. Der Grund dahinter ist oft die den Managern heilige Planung. Die Gründe für deren Scheitern liegen aber nicht in der Durchführung der Schätzung. Eine Schätzung ist immer richtig, wie ich auch bereits an anderer Stelle schrieb.

Das gilt auch, wenn der geschätzte Wert vom wahren Wert abweicht. Wenn mir das nicht gefällt, müsste ich eine Schätzung durch eine Messung ersetzen. Das ist in diesem Fall nicht möglich, weil ich zukünftige Ergebnisse nicht heute messen kann.

Wenn ein Ticket bei Fertigstellung also dreimal so viel Zeit erforderte, wie geschätzt (prognostiziert) wurde, wird nicht die Frage gestellt, ob die Umsetzung des Tickets gut gelaufen ist. Nein. Bereits die Abweichung von der Schätzung (Prognose) genügt, um die geleistete Arbeit zu diskreditieren. Das halte ich für wenig zielführend, und hier sind meines Erachtens Softwareentwickler aufgefordert, der missbräuchlichen Verwendung von Schätzungen entgegenzutreten.

Der erste Schritt kann darin bestehen, klarzumachen, dass Pläne auf Grundlage von Schätzungen selbst Schätzungen und keine Zusagen sind. Wer es anders sieht, dem kann man mit hoher Wahrscheinlichkeit eine turbulente Zukunft prophezeien.

Wenn Du die Themen, die ich im Blog anspreche, in Deiner Firma verbessern möchtest, komm’ in unsere Leadership-Community für Softwareentwicklung. Sie wirkt auch ohne Führungsposition. Mit dem Code „heisedev“ gibt’s den Heise-Rabatt für Interactive-Members.


(rme)



Source link

Weiterlesen

Entwicklung & Code

Software Testing: KI-gestützte Testfallermittlung | heise online


In der neuen Folge des Podcasts Software Testing spricht Richard Seidl mit Mark Menzel von der Landeshauptstadt München über die LLM-basierte Webanwendung MUCGPT und Sherlock, den städtischen Software-Test-KI-Assistenten. Das Gespräch zeigt, dass auch Verwaltung Innovation kann: Prompt Engineering statt Schulungsmarathon, ISO-29119-konforme Testfälle sowie Export nach TestLink und Xray.

Weiterlesen nach der Anzeige

Mark Menzel verfügt über mehr als 25 Jahre Erfahrung im Bereich Softwarequalität und Testmanagement. Nach seiner Promotion in Business Administration spezialisierte er sich auf KI-basierte Testverfahren. Als Testmanager bei der Landeshauptstadt München leitet er dort Testprojekte. Darüber hinaus ist er als Hochschuldozent und Mentor tätig und erforscht, wie KI das Testen revolutionieren kann.

Bei diesem Podcast dreht sich alles um Softwarequalität: Ob Testautomatisierung, Qualität in agilen Projekten, Testdaten oder Testteams – Richard Seidl und seine Gäste schauen sich Dinge an, die mehr Qualität in die Softwareentwicklung bringen.

Die aktuelle Ausgabe ist auch auf Richard Seidls Blog verfügbar: „KI-gestützte Testfallermittlung – Mark Menzel“ und steht auf YouTube bereit.


(mai)



Source link

Weiterlesen

Entwicklung & Code

pandas 3.0 bringt einheitlichen String-Typ und Performance-Optimierung


Fast drei Jahre nach der letzten Hauptversion steht jetzt Version 3.0 von pandas, der Bibliothek zur Datenanalyse mit Python, am Start. Zu den wichtigsten Änderungen gehören der dedizierte String-Data-Typ str, eine verbesserte Copy-on-Write-Methode sowie eine neue Standardauflösung für datums- und zeitähnliche Daten. Letztere verwendet standardmäßig Mikrosekunden statt Nanosekunden, um Grenzwertfehler für Datumsangaben mit einem Jahr vor 1678 oder nach 2262 zu vermeiden.

Weiterlesen nach der Anzeige

Bei installierter PyArrow-Bibliothek interpretiert pandas 3.0 String-Spalten automatisch als Datentyp str statt als NumPy-object. Das soll für Leistungssteigerung und effizientere Zuweisung von Python-Objekten sorgen. Wie der neue Code aussehen kann, zeigt folgendes Beispiel:


# Old behavior (pandas < 3.0)
>>> ser = pd.Series(["a", "b"])
>>> ser
0 a
1 b
dtype: object # <-- numpy object dtype

# New behavior (pandas 3.0)
>>> ser = pd.Series(["a", "b"])
>>> ser.dtype
>>> ser
0 a
1 b
dtype: str # <-- new string dtype


Mit pandas 3.0 ist Copy-on-Write (CoW) nun die Standard-Speicherverwaltungstechnik. Damit verhält sich jedes Index-Ergebnis wie eine Kopie, sodass Änderungen am Ergebnis den ursprünglichen DataFrame nicht beeinflussen.

Da verkettete Zuweisungen nicht mehr funktionieren, entfällt SettingWithCopyWarning. Damit können die copy()-Aufrufe zum Unterdrücken dieser Warnung entfallen, was ebenfalls eine Verbesserung der Performance bedeutet.


# Old behavior (pandas < 3.0) - chained assignment
df["foo"][df["bar"] > 5] = # This might modify df (unpredictable)

# New behavior (pandas 3.0) - must do the modification in one step (e.g. with .loc)
df.loc[df["bar"] > 5, "foo"] = 100


Weiterlesen nach der Anzeige

Mit dem neuen Release hat das Pandas-Team einige veraltete Funktionen entfernt. Deshalb empfiehlt es, zunächst ein Upgrade auf pandas 2.3 durchzuführen, um sicherzustellen, dass der Code ohne Fehlermeldungen läuft. Erst anschließend sollte man den Wechsel auf Version 3.0 angehen.

Installieren lässt sich pandas 3.0 über PyPI mit python -m pip install --upgrade pandas==3.0.* oder über conda-forge mit conda install -c conda-forge pandas=3.0.

In den Release Notes von pandas 3.0.0 lassen sich sämtliche Änderungen im Detail nachlesen. Weil sie ein Code-Update erforderlich machen können, stellen die Entwicklerinnen und Entwickler Migrationsanleitungen zur Verfügung, unter anderem für den neuen String-Data-Typ und die Copy-on-Write-Methode.

Lesen Sie auch


(who)



Source link

Weiterlesen

Beliebt