The information below is from http://www.dccwiki.com A big thanks to Mitch Schwenk for putting it all together.
A Configuration Variable is a memory location in the decoder that controls the behavior of the decoder. Think of it as a preferences file that saves the settings on a computer. Once set, the value will be retained unless the memory is changed or becomes corrupted.
Another term is Configuration Register which is used to describe Configuration Variable 29, which stores the settings for a number of basic decoder functions.
Just like any other computer, decoders must be programmed by the user to reach their full potential. While they come with basic "factory default" settings, most users will want to customize the decoder address, motor control, lights, sound, and other functions to meet their specific needs. You do so by editing the CVs, or Configuration Variables, in the decoder. Some CVs use values ranging from 0 to 255, others use their space in the decoder's memory as a bank of eight on/off switches. While this lets you do a lot with very little memory, it can get very complex for those of us that aren't on speaking terms with binary code.
There is software available which simplifies the programming of decoders. Many people agree that JMRI is the best, free, open source software available. JMRI often rivals commercially available software