All the above contributions are laudable and basically linked. Hope this scenario simplifies and clarifies the basics. 

*Updating* as explained earlier implies keeping something up to date thus if the functionality of a particular program is to rectify errors from level 1 to say level 3, updating the program implies maintaining or igniting its efficiency to work effectively within the specified levels (level 1to 3). 

But to *upgrade* the program implies increasing its capacity and efficiency to enable it exceed or work beyond the previous lower levels i.e. levels 4, 5 and upwards.