Git (version control) 2026-11-05
Git is a distributed version control system whose history records version-control snapshots linked by version-control commits. A local repository can contain history and support comparisons and new version-control commits without a connection to a central server. Version-control branches name movable tips of that history.[ref]
Suppose two collaborators start at the same version-control commit and each records a different change. Their new version-control commits share a parent in the commit graph. Exchanging repository objects makes both histories available; version-control merging can then combine their work, possibly exposing a merge conflict. The stored version-control snapshot identifies recorded file contents, while external datasets and installed software dependencies still need their own reproducibility record.
Greg Wilson Created 2026-10-20 Updated 2026-11-05
Greg Wilson is the first-listed author of Best Practices for Scientific Computing by Greg Wilson and others, which connects reliable scientific results to maintainable software. Its recommendations include software testing, version control, small reusable components and review of changes. These practices make it possible to inspect how an analysis was produced and detect mistakes when its implementation changes.[ref]
Merge conflict 2026-11-05
A merge conflict occurs when a version-control merging operation cannot automatically reconcile changes under its merge rules. For a typical three-way merge, the tool compares two revisions with their common base. Incompatible edits to the same region, or deletion on one side and modification on the other, can require a human decision.[ref]
For example, the base contains threshold=5; one side changes it to 7 and the other to 9. Choosing either value or a new value requires understanding the intended behavior. After editing the combined result, the resolver records that decision in version control. A textually conflict-free merge can still break a function's contract, so successful automatic combination supplies weaker evidence than software testing of the integrated program.
Software defects can make a scientific result wrong even when another researcher reproduces it exactly. Reducing their impact requires both a traceable computational workflow and independent checks that its implementation and scientific assumptions are appropriate.
Terminology should be stated because usage varies. Here, computational reproducibility means obtaining consistent results from the same data and recorded computational procedure; scientific replication means testing the finding with newly collected data or an independently conducted study. model verification asks whether the code implements the intended equations and rules. model validation asks whether those equations and rules are adequate for the scientific use. A result can pass the first two computational checks and still fail biological validation. Conversely, floating-point differences between platforms need not invalidate a conclusion if they lie within a justified numerical or statistical tolerance.
A software bug can enter at every stage. A sample-order mismatch may associate measurements with the wrong labels while retaining plausible matrix dimensions. An indexing or sign error can reverse a treatment contrast. Unit conversion errors can alter a kinetic rate by orders of magnitude. A mistaken stopping rule can report an optimizer's initial value as its solution. A preprocessing script can leak test-set information into training and exaggerate predictive accuracy. These failures are dangerous because an apparently reasonable plot and a successful program exit are weak tests of correctness.
Data handling provides a documented biological example. Spreadsheet defaults can coerce identifiers into dates or numbers: historical gene symbols such as SEPT2 and MARCH1 are examples of this problem. A survey found such conversions in published supplementary gene lists, demonstrating that silent changes can propagate beyond the originating analysis.[ref] Automatic conversion may be intended spreadsheet behavior, but it becomes a defect in an analysis that requires exact textual identifiers. Specifying identifier columns as strings, preserving stable accessions, checking uniqueness and matching against an expected identifier set directly address that failure mode.
A second example distinguishes coding errors from modeling errors. The AFNI 3dClustSim program had a defect in variance rescaling after smoothing, associated with boundary effects. Its maintainers documented the repair and assessed its consequences. Their analysis also showed why the broader problem of inflated cluster-inference false positives could not be attributed to that defect alone: assumptions about spatial autocorrelation and the inferential procedure mattered as well.[ref] Thus correcting an implementation is necessary but does not automatically validate the statistical method it implements.
The first defense is a clear, inspectable specification. Write down units, array meanings, intended inputs and limiting behavior; divide a pipeline into small components with explicit interfaces. A unit test for a decay solver can compare against . An integration test should check the connection between data import, model fitting and plotting, including sample identifiers and units. regression tests preserve justified behavior after a fix, but a saved output from an unexamined older version is not an independent truth standard. Test quality matters more than the percentage of lines executed.
Exact reference answers are often unavailable, so property-based testing and metamorphic testing are valuable. A closed chemical conversion should conserve total material; a probability vector should be nonnegative and sum to one; consistently permuting independent sample rows should leave a deterministic fitted model unchanged. A valid metamorphic relation must match the problem: permuting a time series would generally destroy temporal information rather than preserve the expected result. Testing extreme inputs, empty groups and zero-rate cases often exposes bugs that ordinary examples miss. Code review and an independently written implementation can find shared blind spots that additional tests derived from the same erroneous formula cannot.[ref]
Numerical algorithms introduce another layer. For explicit Euler integration of , the update is . The exact solution is positive and decays, but makes the discretization unstable, and even produces alternating negative values. This can be an unsuitable algorithm or step size rather than a typographical defect. Comparing step sizes, solver tolerances and alternative algorithms separates discretization error from a biological prediction. In a sensitive dynamical system, convergence of statistical summaries may be more meaningful than exact agreement of a long trajectory.
Traceability makes failures discoverable and corrections usable. version control identifies the code revision that generated a result; data provenance records raw inputs, reference annotations, filtering decisions and transformations. An executable workflow regenerates outputs from those inputs without undocumented manual edits. Dependency versions and a recorded environment, possibly a software container, reduce accidental differences between installations. A random seed should be recorded together with the generator and, where relevant, the allocation of streams to parallel workers. One seed is not an uncertainty estimate, and parallel scheduling or library changes can defeat bitwise repetition even when it is reused.
continuous integration can run focused tests whenever the analysis changes, while release notes and archived versions let readers distinguish corrected results from earlier ones. The environment archive preserves the ability to reproduce an old computation; the maintained version should also contain the scientific correction. Publishing only a container that reliably reproduces a wrong result is inadequate. When a defect is found, quantify which conclusions change, rerun affected analyses, retain a minimal reproducing example and communicate the correction through the appropriate scientific record. Reliable computational science combines reproducible execution, verified implementation, quantified numerical error and validation against evidence; none is a substitute for the others.
Software engineering Created 2026-10-31 Updated 2026-11-05
Software engineering develops and maintains software through systematic design, implementation and evaluation. It connects requirements to program structure, verification, deployment and later change. For example, altering a data format can require changing its parser, stored files and clients together; a locally correct code edit does not by itself ensure a working system. Software testing, version control and explicit interface contracts help manage these dependencies. The subject includes technical trade-offs between correctness, performance, maintainability and the constraints of the intended users.
Version control Created 2026-10-20 Updated 2026-11-05
Version control records identifiable revisions of files and their history, making it possible to inspect an earlier state and determine what changed. A version-control commit records a revision; a version-control branch permits a line of development to proceed alongside another; version-control merging combines changes and exposes conflicts requiring a decision. These operations make collaboration and investigation of software regressions practical.[ref]
Suppose a numerical simulation produced an unexpected result after a formula changed. Recording the version-control commit with the result identifies the exact source revision, so the old and new formulas can be compared and rerun with the same inputs. Reproducing the full calculation also requires the relevant data, software dependencies and execution settings: file history is one part of that record.