En las aplicaciones de software, la división de programas es un método para identificar los elementos centrales de un programa de software y extraerlos suavemente del código más complicado que permite que el programa funcione. Esto es especialmente importante para los esfuerzos de ingeniería de software, ya que permite al ingeniero de software encontrar el camino a través de complicadas cadenas de código para acceder al código fuente que realmente impulsa la aplicación. Poder extraer estos subprogramas y ver el código fuente permite identificar una amplia gama de errores potenciales y así hacer que el software se ejecute con mayor eficiencia.
No es inusual que el código sea intencionalmente complicado. Una de las principales razones de esta acción es que las partes más complicadas del código ayudan a proteger el código fuente de la corrupción de virus e intentos de piratería. Por lo general, un programador agregará una gran cantidad de código adicional que esencialmente hace que sea necesario seguir una serie de pasos adicionales para lograr lo que podría ser administrado por el código fuente con solo unos pocos pasos. Si bien este es un estado deseable desde la perspectiva de proteger el software de posibles daños, hay situaciones en las que es necesario acceder al código fuente. Ahí es donde entra en juego la división del programa.
Hay dos enfoques o dimensiones básicos para programar el corte. La dimensión semántica se centra en los elementos de la cadena de código que son necesarios y, por lo tanto, se conservarán. Tanto las funciones estáticas como las dinámicas se identifican y conservan mediante el uso de métodos específicos de corte que dejan atrás los elementos esenciales pero eliminan gran parte del código insertado como parte del proceso de enmascaramiento. Con la división semántica del programa, el ingeniero tiene bastante discreción para decidir qué, si es que queda alguno, del código adicional que queda.
La división sintáctica del programa no proporciona al ingeniero la misma cantidad de opciones. Con este enfoque, se elimina todo lo que no es esencial para la función principal del código. Si se descubre que una cadena no tiene ningún propósito real y no tiene ningún impacto en la semántica de interés que se encuentra en el código, continúa. Este enfoque ayuda a preservar la sintaxis original del programa sin adornos adicionales.
Un segundo uso, cada vez más común, de la división de programas sintácticos se conoce como división de programas amorfos. Con este enfoque, el objetivo es hacer posible que el segmento continúe trabajando con cualquier función sintáctica que ayude a mantener las restricciones semánticas que el ingeniero desea conservar en el código.