CodeDevelopment
Jump to navigation
Jump to search
Introduction
A page to write some principles and questions for code development.
Use Cases
Each level incorporates the levels above.
- user - setup pre-built code and run utilities and standard mu2e fcl. Example: compare filter rates by modifying fcl, make a gdml file, run tutorials. Needs simple and fool-proof procedures.
- analyzer - checkout, build user code against pre-built offline, commit changes. Example: user makes ntuples from personal code or Stntuple makes an ntuple. Needs user code well-incorporated with offline - possibly using the same build system, possibly coordinated directory structures and commands. Fool-proof user-to-offline dependencies.
- junior - make localized modifications to offline, test and commit them, as in specific product maintenance. Examples: fix a bug in an algorithm, add an accessor. Needs quick and reliable partial build of arbitrary pieces. Needs to catch dependency mistakes. Needs to switch quickly between prof and debug.
- senior - make larger and more widespread changes, test and commit them. Examples: modifying major include files, reco sequences, products. Probably needs full build of offline. Needs quick checkout and build.
- expert - infrequent complex development - move code between packages, build prototype products with offline, build trigger code.
Some Issues
- is it amenable to a tutorial?
- how will it run on OSG without /mu2e/app?
- should there be a different build time vs run time environment?
- is checkout setup different from re-setup?
- what windows does the user have open?
- can all dependencies be checked automatically?
- what does switching between prof and debug look like?
- how does an analyzer switch between pre-built releases?
- what build commands are supported for user code, how much are they forced to be coordinated with offline?
- are there clear lines of code responsibility?
- who coordinates pieces and tags and validates the whole (and how)?
- is it amenable to code reviews and pull requests?
- does it support out-of-source builds?
- what do paths look like? do they include "mu2e"?
- what does validation do - continuous and nightly
- what is the maintenance effort required?
- does it follow KISS?
- does it fit into a long-term plan?
- does a major change like introducing the calibration database cause unnecessary disruption?
- is git history preserved?