2008-11-14 5 views
8

Ich verwende derzeit Rcov, um C0-Code-Coverage-Analyse für ein Rails-Projekt zu erhalten, an dem ich arbeite.Gibt es eine C1-Code-Coverage-Analyse für Ruby?

Aber diese Ergebnisse sind praktisch bedeutungslos- Ich habe 100% Abdeckung nach rcov (da es nur C0-Analyse umfasst) und ich habe kaum die Hälfte der Testfälle für die Funktionalität, die bisher existiert geschrieben.

Ich bin an die nützlichen Ergebnisse aus der Codeabdeckung in Visual Studio 2008 Team gewöhnt, die C1-Abdeckung hat. Gibt es Werkzeuge, die Ruby ähnlich abdecken?

Antwort

12

Im Moment gibt es keine C1-Coverage-Tools für Ruby. In der Tat gibt es keine irgendwelche Abdeckungswerkzeuge außer RCov.

Bis vor kurzem konnten solche Tools nur durch Patchen oder Erweitern des MRT-Interpreters in C geschrieben werden. Seit etwa zwei Jahren ist es auch möglich, JRuby in Java zu erweitern, und tatsächlich gibt es seit letztem Monat einen Hafen von RCov für JRuby. Dies erfordert jedoch sowohl eine Kenntnis von Ruby und C, und ein ziemlich tiefes Wissen darüber, weil herumfummeln mit den Interna der MRI ist nicht für schwache Nerven im Herzen.

Aber nur mit Rubinius wird es möglich sein, dynamische Analysewerkzeuge wie Code-Coverage-Tools in Ruby selbst zu schreiben, was das Schreiben von Werkzeugen für einen viel größeren Teil der Ruby-Community zugänglich macht. Ich hoffe, dass dies in Verbindung mit der beträchtlichen finanziellen Unterstützung von Tool-Anbietern geschieht (viele IDE-Hersteller arbeiten bereits an Ruby-IDEs, einschließlich CodeGear (ex-Borland), IntelliJ, NetBeans, Eclipse, SapphireSteel (Ruby in Steel) für Visual Studio) und sogar Microsoft) werden zu schnellen Innovationen im Ruby Tooling Space im Jahr 2009 führen und wir werden Dinge wie C1, C2 Abdeckung, NPath Komplexität, viel feinkörnigeres Profiling und so weiter sehen.

Bis dahin ist die einzige Idee, die ich habe, Java-Tools zu verwenden. Die JRuby-Leute versuchen, die richtigen magischen Metadaten auszusenden, um ihren generierten Bytecode zumindest von den Java-Tools durchlässig zu machen. Es ist also möglich, Java-Coverage-Tools mit JRuby zu verwenden. Ich habe jedoch keine Ahnung, ob das tatsächlich funktioniert oder ob es funktionieren soll.

+0

ist dies immer noch der Stand der Dinge in 2016? –

0

Ich weiß nicht über Code-Coverage-Tools, aber Ruby hat eine Mutation Tester namens Heckle.

Beim Mutationstest wird der zu testende Code geändert und überprüft, ob diese Mutationen dazu führen, dass die Komponententests fehlschlagen.

Leider enthält das neueste offizielle Schmuckstück (Version 1.4.1) einige Fehler, daher möchten Sie vielleicht ein Schmuckstück mit Code aus dem Entwicklungszweig erstellen. Es kann nur Instanzmethoden mutieren. Ich bin mir nicht sicher, wie zuverlässig die Entwicklungszweigversion auch ist.

Mutationstests sollten vermieden werden, wenn der zu testende Code das System potenziell zerstören könnte (z. B. Löschen von Dateien). Vielleicht möchten Sie a FAQ about heckle und a FAQ question mentioning rcov versus heckle lesen.

+0

ist es in RSPec eingebaut. Von spec --help gibt es eine Option -H (oder --heckle): "Wenn alle Beispiele bestanden haben, mutiert dies die CODE-Klassen und -Methoden nach und nach und führt alle Beispiele für jede Mutation erneut aus. Die Absicht ist, dass für jede Mutation mindestens ein Beispiel * sollte * fehlschlagen, und RSpec wird Ihnen sagen, wenn dies nicht der Fall ist.CODE sollte entweder Some :: Module, Some :: Class oder Some :: Fabulous # method sein. " – hgmnz

1

Für die Aufzeichnung, NetBeans 7.0 hat Code-Coverage-Analyse für Ruby eingebaut. Ich kann keine Dokumente finden, die erklären, ob es C0 oder C1 ist oder nicht, aber es ist etwas, das man im Auge behalten sollte.

+1

E.S .: Netbeans benutzt RCov nur hinter den Kulissen. – srboisvert