1. A method for dynamically updating software, comprising: providing a dynamic patch including a plurality of updates to variable units of the software; constructing an interference graph of the dynamic patch by generating a node corresponding to each variable unit of the dynamic patch and generating edges connecting nodes having impact expressions with a non-zero intersection, wherein one or more connected nodes is a connected component, and wherein a non-zero intersection occurs when the impact expression of two nodes intersects; dividing the dynamic patch into a plurality of micro-updates each corresponding to one of the connected components; and applying at least two of the micro-updates to the software independently while the software is running, comprising: selecting a first micro-update of the plurality of micro-updates, determining whether the variable units of the selected first micro-update are active, applying the selected first micro-update to the software if the variable units of the selected first micro-update are inactive, and selecting a second micro-update of the plurality of micro-updates and applying the selected second micro-update after determining the variable units of the selected second micro-update are inactive.