Wie überprüfe ich, ob meine Tests nicht von anderen Entwicklern entfernt wurden?

8

Ich bin gerade bei der Arbeit auf ein interessantes Problem bei der kollaborativen Codierung gestoßen.

Ich habe einige Unit- / Funktions- / Integrationstests geschrieben und neue Funktionen in Anwendungen implementiert, an denen ~ 20 Entwickler arbeiten. Alle Tests bestanden und ich habe den Code eingecheckt. Am nächsten Tag aktualisierte ich mein Projekt und bemerkte (zufällig), dass einige meiner Testmethoden von anderen Entwicklern gelöscht wurden (Probleme am Ende zusammenführen). Neuer Anwendungscode wurde nicht berührt.

Wie kann ich ein solches Problem automatisch erkennen? Ich meine, ich schreibe Tests, um automatisch zu überprüfen, ob mein Code noch funktioniert (oder nicht gelöscht wurde). Wie mache ich dasselbe für Tests?

Wir verwenden Java, JUnit, Selenium, SVN und Hudson CI, wenn es darauf ankommt.

Parxier
quelle
1
Ich bin mir nicht einmal sicher, wie Sie "versehentlich" ganze Codestreifen löschen würden, wenn Sie tatsächlich eine ordnungsgemäße Pull-> Merge-> Commit-Aktion ausführen.
Anon.
@Anon Ich bin mir auch sicher, dass er in Eile war und seinen Code schnell festschreiben musste, also hat er nicht viel darauf geachtet, etwas oder etwas zusammenzuführen. : - / Wie auch immer, ich möchte solche Probleme immer noch automatisch auf CI-Ebene erkennen.
Parxier
10
Und die Person, "die es eilig hatte", braucht möglicherweise ein leises Gespräch von einem Manager. Ein solches Verhalten ist faul und sollte nicht akzeptabel sein.
schnell_now
1
Ich kann mir nur vorstellen, dass dies möglich wäre, wenn Leute große Änderungen mit vielen Dateien einchecken, die über einen sehr langen Zeitraum geändert wurden. Normalerweise sollten Sie keine großen Zusammenführungen haben, bei denen sogar die Möglichkeit besteht, dass Code "verloren" geht ... das klingt für mich nach der eigentlichen Ursache des Problems.
Dean Harding
1
Aus diesem Grund sollte es einem einzelnen Entwickler niemals gestattet sein, in zentralisierten VCSs zum Trunk zusammenzuführen. Faule Entwickler neigen dazu, die Sachen anderer Leute zu überfallen (ich habe mich selbst schuldig gemacht).
Chris K

Antworten:

4

Ich bin mit Hudson for CI nicht besonders vertraut, aber mein CI-Tool kann auch die Codeabdeckung berechnen. Wenn Sie einen Prozess schreiben können, der Sie benachrichtigt, wenn die Codeabdeckung abnimmt, ist dies ein guter Indikator dafür, dass ein Test entfernt wurde. Es würde Ihnen auch sagen, ob neuer Code ohne Tests hinzugefügt wurde. Nicht das, wonach Sie gefragt haben, aber schön zu wissen.

Marcie
quelle
3
Ich wollte genau diesen Punkt in einem Kommentar zu Tims Antwort erwähnen: Ihr Prozentsatz der Codeabdeckung sollte niemals abnehmen.
Frank Shearar
Guter Winkel auf einer Metrik!
Welches Werkzeug ist das vielleicht?
Chris K
@ Chris, wir verwenden TFS + TeamBuild, das ich konfiguriert habe, um die Codeabdeckung für jeden Build zu berechnen.
Marcie
Bei diesem speziellen Projekt wird es nicht funktionieren, da die Testabdeckung im Moment sowieso ziemlich gering ist, also muss ich Tims Idee ausprobieren. Aber Sie haben mir eine gute Lösung gegeben und ich denke, es ist die beste Antwort auf meine Frage.
Parxier
12

Es gelten die üblichen Haftungsausschlüsse: Wir entwickeln eine technische Lösung für ein soziales Problem. Dies ist jedoch ein Problem der Projekthygiene. Es ist also ein bisschen so, als würde man sagen, dass Toiletten eine technische Lösung für ein soziales Problem sind.

Lassen Sie den RSS-Feed von Hudson übergeben. Zählen Sie die Anzahl der Tests im Hudson-Bericht. Wenn es sich verringert, ertönt ein Alarm. Haben Sie ein Auto-Da-Fe, wenn der Alarm ertönt.

Der Schuldige des Commits kann identifiziert und bestraft werden. Ihr Problem wird verschwinden.

Aufgrund dieser Lösung können andere Probleme auftreten. Bei anhaltendem Schwindel wenden Sie sich bitte an Ihren Arzt.

Tim Williscroft
quelle
1
+1: "Wir machen eine technische Lösung für ein soziales Problem". Das sollte das Ende der Antwort sein. Der Rest der Antwort ist weniger wertvoll als diese eine Aussage.
S.Lott
2
@SLott ja, aber wenn Sie es einfach machen, das Richtige zu tun, wird es erledigt. Wir haben eine automatische E-Mail an das gesamte Team verwendet, die durch das Unterbrechen des Builds ausgelöst wurde. Es klappt; du wirst vorsichtiger. Ich persönlich bezweifle, dass es nützlich ist, dieses soziale Problem zu lösen. Wenn Sie ehrlich gesagt sagen, dass das Löschen von Tests in Ordnung ist, dann ist die Unternehmenskultur gegen die Qualität.
Tim Williscroft
Wow, ich bin Portugiese und hatte keine Ahnung, was ein Auto-Da-Fé ist.
R. Martinho Fernandes
Die Anzahl der Tests kann sich aus triftigen Gründen verringern: Durch ein Refactoring können eine Klasse und alle ihre Komponententests entfernt werden. Es lohnt sich jedoch immer noch herauszufinden, warum die Testanzahl gesunken ist.
Frank Shearar
@Frank Ich nehme an, was wäre wichtig, wenn die Anzahl der Tests aus gültigen Gründen im Vergleich zu ungültigen abfällt. Wenn es sich hauptsächlich um triftige Gründe handelt, wird der Alarm nach einer Weile ignoriert und wertlos. Wenn es meistens ungültig ist, könnte es gut sein. Wie oft passiert das? Und tatsächlich, @parxier, wenn es nur einmal passiert ist, von dem Sie wissen, könnten Sie überreagieren?
James
2

Organisatorischer Ansatz

Verfügen Sie über eine Richtlinie, nach der eine Person Tests löschen muss, um mit dem Testersteller zu sprechen. Normalerweise würden Sie Tests nur löschen, wenn Sie einige getestete Funktionen ablehnen, und das kommt nicht sehr oft vor.

Technische Ansatz

Dies ist eher ein Kontrollfreak-Ansatz, aber Sie können einen separaten Test durchführen, der den Quellcode auf das Vorhandensein aller Tests überprüft, die Sie überprüfen möchten. Möglicherweise können Sie auch eine Schnittstelle zu Hudson herstellen und die Liste der ausgeführten Tests abrufen.

Kunst
quelle
Sachen wurden während einer Zusammenführung gelöscht. Vielleicht durch Zufall, vielleicht durch Faulheit. Die Politik wird nicht viel bewirken, abgesehen von mehr "du sollst" vom Management, das jeder ignorieren wird. Ein öffentliches Brennen und Auspeitschen könnte jedoch Aufmerksamkeit erregen. / sarcoff
schnell_now
2
@quickly_now: "Sachen wurden während einer Zusammenführung gelöscht". Das sollte ein Schussdelikt sein. Jede Organisation, die dieses Verhalten zulässt, muss wirklich viele Menschen entfernen und durch Leute ersetzen, die sich bemühen, etwas Vernünftiges statt Böses zu tun.
S.Lott
Unfall - Sie können es beim ersten Mal vergeben. Faulheit oder böswillige - ja - Entlassung.
schnell_now
Es wäre schwierig, diese separate Testklasse auf dem neuesten Stand zu halten, aber es ist eine interessante Idee, danke.
Parxier
0

Ähnlich wie bei Art ..

Kommentare Verwenden Sie zunächst gut kommentieren. Für jede Methode; Vergessen Sie nicht, die erwarteten Ein- und Ausgaben, eine kurze Beschreibung für komplexere Funktionen und Ihren Namen anzugeben.

Richtlinien Dies unterstreicht jedoch wirklich, dass mehr Kommunikation zwischen den Entwicklern erforderlich ist. Mannschaft. Es sollten Richtlinien für die Zusammenarbeit vorhanden sein ... oder zumindest mit Ihrem Projekt sprechen. Manager und bitten Sie ihn, dies im Team zu klären.

Richtige Verwendung von SVN Sie können auch Ihre Klassen und Methoden aufschreiben und nachverfolgen. Auch wenn Sie SVN verwenden, hoffe ich aufrichtig, dass diese Löschungen als Änderungen nachverfolgt werden, separat vermerkt werden und gute Gründe haben.

Ohne ein spezielles Programm zu schreiben, können Sie auch nur diff vergleichen. Dateien in SVN, um Änderungen an Ihren Methoden zu verfolgen.

Ross
quelle
0

Das Gleiche kann auch für den tatsächlichen Code passieren, und Sie werden es erst erfahren, wenn Sie feststellen, dass Ihre Änderung nicht mehr vorhanden ist.

Abgesehen davon ist es schwierig, Code, der entfernt wird, als eine schlechte Sache zu identifizieren, da Sie sehr oft Code / Funktionen usw. manuell entfernen und aufgrund dessen die Anzahl der Tests ebenso sinken kann wie bei einer anderen Person.

ozz
quelle
Wenn Code gelöscht wird, werden die Tests unterbrochen. Wenn Tests gelöscht werden, bricht nichts.
Parxier