
automated testing: represents a clear step from informally trying the
program to a formalized and repeatable verification activity,

configuration management: introduces a standard way of versioning code
and keeping a common shared repository,

integrated development environment: provides basic features supporting
coding, e.g. code completion, language specific presentation,
automatic incremental build, error highlighting, and automatic
code refactoring [1]}.

