En primer lugar daremos una definición del mismo:
Software: conjunto de los programas de cómputo, procedimientos, reglas, documentación y datos asociados que forman parte de las operaciones de un sistema de computación.

Clasificación del software:
Si bien esta distinción es, en cierto modo, arbitraria, y a veces confusa, a los fines prácticos se puede clasificar al software en tres grandes tipos:

Codificación del software:
Durante esta etapa se desarrolla lo que antes hemos denominado programación que consiste esencialmente en llevar a código fuente el lenguaje de programación elegido.
La etapa de programación o codificación, también denominado implementación suele ser la etapa que supone la mayor parte del trabajo de la creación del software.
Un punto tener en cuenta es que cuanto menor es el nivel del lenguaje mayor será el tiempo de programación requerido.
Mientras se realiza el software general se van realizando tareas de depuración. No todos los errores van a tener lugar durante la etapa de programación sino que también puede darse la aparición de algún error funcional lo que llevará a retoma la fase de diseño.



Durante la fase de programación distinguimos:
1. Código fuente: es el escrito directamente por los programadores en editores de texto, lo cual genera el programa. Contiene el conjunto de instrucciones codificadas en algún lenguaje de alto nivel.
2. Código objeto: es el código binario resultante de procesar con un compilador el código fuente. El código objeto no es inteligible por el ser humano (generalmente en formato binario), sin embargo, tampoco es directamente ejecutable por la computadora.
3. Código ejecutable: resultante de enlazar uno o más fragmentos de código objeto con las rutinas y bibliotecas necesarias. Constituye uno o más archivos binarios con un formato tal que el sistema operativo es capaz de cargarlo en la memoria RAM (eventualmente también parte en una memoria virtual).

Para evitar posibles errores y su corrección tenemos las pruebas:
1- Pruebas unitarias: testear piezas de software pequeñas, aquellas que tengan una función específica, funciones concretas con un cierto grado de dependencia.
2- Pruebas de integración: una vez que realizadas las anteriores esas han resultado exitosas tienen lugar éstas, las cuales intentan asegurar que el sistema completo funcione correctamente.
Para llevarlas a cabo hacemos uso de los denominados datos de prueba, que un conjunto de datos típicos a los que puede verse sometido el sistema o los módulos (bloques de código).

Con todo esto se intenta llevar a cabo la construcción correcta del software que cuenta que las etapas y características antes contadas de una manera sencilla y entendible para principiantes en el mundo de la programación.