2008-09-22 8 views
11

Ich bin ein Doktorand im Maschinenbau ohne einen umfangreichen Hintergrund in der Informatik. Wir schreiben Code als Teil unserer Forschung, aber es ist in der Regel High-Level (z. B. Matlab) und oft eher ad-hoc.Code Review in der Wissenschaft

Es klingt wie Code Bewertungen unter den Wissenschaftlern hier wäre wertvoll für (a) Lerntechniken von anderen Menschen, und (b) Unzulänglichkeiten in Ihrem Code zu erkennen. (Manchmal finde ich es beängstigend, dass es Veröffentlichungen gibt, bei denen die Theorie in einem Code instanziiert wird, den niemand außer dem Autor sieht!) Sollten Wissenschaftler Code-Reviews mit ihren Kollegen haben? (Hat jemand schon einmal so etwas gesehen?)

Noch wichtiger, wie lange dauert es, um in diesem Zusammenhang eine effektive Code-Überprüfung durchzuführen? Es scheint schwierig zu sein, die zusätzliche Zeit zu rechtfertigen, wenn diese bestimmte Ressource immer sehr knapp ist.


Nachtrag: Ein paar Leute gefragt haben, ob „Veröffentlichung“ eine ausreichende Überprüfung darstellt. Überhaupt nicht, auf meinem Gebiet. Die Ergebnisse sind der wichtige Teil, also, wenn Sie Ihren Algorithmus und/oder Datenanalyse mit unverständlichem Code schreiben, der einen Graph nach Stunden der Verarbeitung ausspuckt, ist das nicht anders als sauberer, sharable, schneller Code.

Sie könnten Buggy-Code schreiben, der Ergebnisse liefert, die über richtig aussehen und nie wissen, dass dort ein Fehler drin ist, obwohl!

Aber ich denke, es wäre eine großartige Idee, Publikationen elektronisch zusammen mit dem Code zu haben, der verwendet wurde, um die Ergebnisse im Manuskript zu produzieren. Das Problem ist wiederum die Zeit: Jeder Code ist hässlich und nicht zu pflegen (zu verallgemeinern; schließlich sind wir Ingenieure, keine Programmierer), also würde es zu lange dauern, ihn für die Veröffentlichung aufzuräumen. Code-Reviews könnten dieser Situation ein wenig helfen.

+1

Ich ging immer davon aus, dass, wenn Ihre Forschung auf Daten beruht, die von einem Programm manipuliert werden, sowohl die Daten UND das Programm überprüft werden müssen, bevor Ihre Forschung als Peer-Review betrachtet wird. Ist das überhaupt nicht so? – Will

Antwort

6

Nachdem ich ein wenig Zeit in der Wissenschaft verbracht habe, habe ich festgestellt, dass ein großer Teil des erzeugten Codes nur Code ist, um die Arbeit zu erledigen.

Code wird normalerweise von einer Person zusammengehackt, um zu testen, welche Hypothese gerade getestet wird. Während in der Industrie Code in kleinen Teams produziert wird, ist die Wartbarkeit ein wichtiger Faktor.

Es sei denn, der Prüfer ist vertraut mit der Codebasis, und die Menge an Code ist sehr klein (ein paar tausend Zeilen?) Die Code-Überprüfung wird entweder sehr zeitaufwendig sein oder nicht sehr streng sein.

Ich verbrachte einen Tag Code Überprüfung eines 5000-Zeilen-Programm, das ein Kollege geschrieben hatte und ja ich fand ziemlich viele Probleme, aber ich würde sagen, ich wäre nicht bereit, das zu oft zu tun. Meiner Erfahrung nach funktioniert die Code-Überprüfung am besten in Stücken, die Funktionalitätspunkte und nicht eine Anwendung als Ganzes bewerten.

Um ehrlich zu sein, würde ja Code-Review, wenn richtig gemacht wäre ein Segen für die Wissenschaft, aber die Chancen, jemanden mit genügend Zeit zu finden, um Ihren Code zu überprüfen, ist dünn in der Wissenschaft, wie jeder versucht, ihr eigenes Projekt so schnell erledigt zu bekommen wie möglich. Im Wesentlichen ist das akademische Umfeld nicht wirklich förderlich für die Überprüfung des Codes.

Und Undergraduate Praktikanten zu tun ist dumm, im Idealfall sollte eine Code-Überprüfung von jemandem mit mehr Erfahrung in der Software-Entwicklung als Ihr durchschnittlicher undergrad durchgeführt werden. Wenn der Undergrad nicht besonders begabt ist, werden Sie wahrscheinlich keinen großen Nutzen aus der Code-Überprüfung ziehen.

1

Länge der Zeit von Code-Review ist abhängig von:

  • Länge des Code
  • Komplexität von Code
  • Fähigkeit von Rezensenten

so ist es schwer, genau zu quantifizieren, wie es lange werde nehmen. Ich kenne einige Leute, die arbeiten, die ~ 400loc/h überprüfen können, aber einige Projekte haben die maximale loc/h-Rate bei 200 begrenzt, da sie glauben, dass ein schnelleres Arbeiten die Qualität der Code-Überprüfung verringert.

Auch Code-Reviews werden am häufigsten gegen einen Codierungsstandard durchgeführt, da die Überprüfung sicherstellen soll, dass sie den Standard erfüllt. Eine Code-Überprüfung ist kein Ort, an dem Code neu gestaltet werden kann. Wenn Sie also keinen Codierungsstandard haben, sind Code-Reviews schwierig zu implementieren.

2

Mein Rat ist, 1 oder 2 Sitzungen zu haben und zu sehen, wie das Team/die Kollegen damit umgehen. Die Antwort auf "ist es effektiv" ist, dass es im Wesentlichen auf die Menschen ankommt.

Ich war in vielen Bewertungen, in denen die Leute, die das Durchsehen machten, nicht wirklich die Zeit nahmen, sich hinzusetzen und den Code zu verfolgen. Viele Male werden die Leute einfach die Quelle beschönigen und Rechtschreibfehler notieren und "braucht Kommentare hier" Art von "Defekten". Während diese Informationen sind schön, es ist nicht wirklich hilfreich die a, b Gründe, die Sie oben aufgeführt.

Beachten Sie, dass ich auch in Bewertungen gewesen bin, die sehr produktiv waren.

Mein letzter Ratschlag ist, kleine Abschnitte des Codes gleichzeitig zu überprüfen. Wenn Sie eine Rezension für das gesamte Projekt senden, werden die erwarteten Ergebnisse nicht erzielt. Die meisten Leute werden müde, wenn sie viel Code überprüfen und beginnen, über zu überfliegen, nur um es durch alles zu machen.

In meiner neuesten Position, was am besten funktioniert hat, ist improvisierte Code-Bewertungen. Also, wenn ich einen Codeabschnitt habe, den ich gerade beendet habe, rufe ich einen anderen Entwickler an, um einen Blick darauf zu werfen, bevor er etwas in unseren Quellcode-Kontrollzweig eincheckt. Nichts Formelles, nur ein kurzer Blick, damit jemand anderes weiß, was mit dem Code entschieden wurde.

1

Sind die Forschungsarbeiten nicht alle vor der Veröffentlichung begutachtet? Und die Forschung selbst, gibt es nicht irgendeine Form von Mentor? (Ich kenne den richtigen Begriff nicht, ich bin nicht in der Wissenschaft ...)

Also warum nicht nur Code Review zu enthalten? Peer Review zu Forschungsarbeiten sollte ebenfalls eine Überprüfung des Codes sein. (Wahrheit, nur wenige Menschen wissen, wie eine effektive Codeüberprüfung durchzuführen, aber das ist ein anderes Thema ...)


Um zu klären, ich den Peer-Review angenommen (vor der Veröffentlichung?) Alle Annahmen überprüfen, bestätigen Schlussfolgerungen Validieren von Datenspuren usw.
Ein Teil der Validierung von Datenspuren (und somit die Gültigkeit von Schlussfolgerungen aus diesen Daten) muss das Programm untersuchen, das diese Daten verarbeitet oder generiert. Daher ist eine Codeüberprüfung notwendig ...

1

Angenommen, Ihre Gruppe von Überprüfern kennt die Sprache, in der Sie schreiben, und sie versteht die von Ihnen verwendeten mathematischen Formeln. Das dauert im Allgemeinen nicht zu lange. Es gibt veröffentlichte Studien und Zitate über Dinge wie die Anzahl der zu überprüfenden Codezeilen pro Stunde und andere solche Statistiken, aber es dauert länger, Code zu überprüfen, der eine Menge Mathe ausführt, als etwas Mathe-intensives zu tun Wenn Sie Ihre eigenen Funktionen auf X oder Y rollen.

Als ich in der Schule war, haben wir keine Code-Bewertungen (außer wenn wir ratlos waren! und dann nur um den Fehler zu finden), aber es wäre sicherlich gewesen gut, um mehr Code zu sehen.

Bei Code-Überprüfungen würde mein Team den Code den Überprüfern in der Regel einige Tage im Voraus bereitstellen (abhängig von der Menge des Codes) und sie in Blöcke aufteilen, die logisch zusammen gruppiert waren eine Menge Code) und lassen Sie die Rezensenten es auschecken. Dann trafen wir uns für eine Stunde oder so und gingen durch die Funde. Es gibt viele Möglichkeiten, dies zu tun, aber das hat für uns einigermaßen gut funktioniert.

Ich denke, es hat mich ein bisschen überrascht, dass es so etwas noch nicht gibt.

0

Anstatt direkt in Code-Reviews zu springen, ist es vielleicht eine gute Idee, eine Art Code-Analyzer zu testen. Etwas wie FindBugs ist großartig darin, auf eklatante Probleme hinzuweisen, die im "Proof of Concept" -Code existieren.

1

Ich nehme an, es gibt einen wirklich großen Unterschied: Akademiker und Softwareentwickler arbeiten auf sehr unterschiedliche Weise zusammen.

Code-Reviews werden normalerweise als Teil eines Teams mit einer gemeinsamen Agenda durchgeführt. Wir werden bezahlt, wenn die Anwendung verkauft. Es liegt in jedermanns Interesse, dass sie den gesamten Code verstehen und dass der Code so gut wie möglich ist.

Akademiker haben eine ganz andere Agenda - Ich bin sicher, dass Sie mindestens einen Doktoranden kennen, der ständig in seiner Forschung von jemand Älteren vereitelt wird, weil es ihrer Arbeit von vor 20 Jahren widerspricht (die meisten Unis scheinen das viel zu tun) .

Als Student müssen Sie möglicherweise sorgfältig auswählen, mit wem Sie rezensieren, und sie haben kein automatisches Interesse daran, Ihren Code zu verbessern.

Codeüberprüfungen beheben (häufig) keine Fehler oder validieren den Code wirklich. Sie teilen nur das Verständnis und geben Feedback.

Wenn Ihr Code funktioniert, aber beklagenswert ineffizient ist das ein Problem? Wenn es ein Albtraum ist, zu warten, ist schlecht dokumentiert und nicht praktikabel, wenn es wirklich funktioniert?

In gewissem Maße denke ich, Ad-hoc-Code kann das richtige Werkzeug für den Job sein, wenn dieser Job nicht professionelle Software-Entwicklung ist. Es gibt Sachen, die ich mit Matlab (während meines Mathe-Abschlusses) gemacht habe, von denen ich jetzt nicht träumen würde, aber der Code, den ich jetzt schreibe, wird von meinem Team geteilt und regelmäßig überarbeitet. Der Code, den ich geschrieben habe, wurde seither nicht mehr angeschaut absolvierte.

1

Geben Sie beim ersten Mal einen besseren Code ein, um den Code Monate später noch einfacher zu bearbeiten. Arbeite mit gleichgesinnten Wissenschaftlern und Ingenieuren zusammen, die guten Code schreiben. Seien Sie stolz auf Ihren Code und denken Sie daran, dass einer der Gründe, warum wir den Maschinencode und erfundene Hochsprachen verloren haben, darin bestand, besser mit anderen Menschen zu kommunizieren. Es macht nicht viel Sinn, wenn jemand anders Ihre Methoden nicht versteht, insbesondere in der Wissenschaft, wo die Wiederholbarkeit der Ergebnisse durch andere Forscher so wichtig ist.

1

Mein Hintergrund ist ein Physik-Akademiker in einem nicht-rechenintensiven Bereich.

Die Denkweise in der akademischen Programmierung ist, dass das peer-reviewed Papier eine Beschreibung des Algorithmus liefert, der verwendet wird, um Daten zu verarbeiten. Dies kann reine Modellierung, Anpassung von Daten mit einer funktionalen Form oder eine andere Art der Verarbeitung sein. Es wird angenommen, dass der Autor die von ihnen beschriebenen Algorithmen kompetent implementiert hat. Ein scharfer Rezensent könnte versuchen, einen Teil der Analyse zu wiederholen (aber ich stelle mir vor, dass dies selten ist).

Im Allgemeinen würde ich erwarten, Validierung der Aktion eines Programms in einem Papier durch Testen mit synthetischen Daten oder Vergleich mit einem bekannten (einfachen) analytischen Ergebnis, wenn das Programm von zentraler Bedeutung für die Arbeit oder Roman war.

Wenn ich an Gruppen denke, in denen ich gearbeitet habe, wären nicht viele Leute (einige nahe einem) in der Lage gewesen, einen nützlichen Code-Review zu machen. In einer Simulationsgruppe würden mehrere Personen an demselben Code arbeiten und möglicherweise neue Methoden entwickeln.

0

Codequalität ist in der Academia normalerweise kein großes Problem. Normalerweise ist der einzige Verbraucher des Codes der Forscher, daher sind Dinge wie Stabilität und Benutzerfreundlichkeit weniger wichtig, als einfach die Arbeit erledigen zu müssen. Darüber hinaus ist der Forschungscode notwendigerweise experimentell und die Spezifikationen ändern sich mehr und mehr als bei anderen Codearten, so dass der endgültige Code zahlreiche Änderungen enthalten wird.

Aber ich denke, der wichtigste Faktor ist einfach, dass Akademiker sich nicht als professionelle Programmierer betrachten, Programmierung ist nur ein kleiner Teil ihrer Arbeit. Daher gibt es einfach nicht das Maß an Sorgfalt oder Leidenschaft, das einen Code-Review-Prozess aufrechterhalten könnte.

Verwandte Themen