It's a solid start for a game, and could be pretty good with some polish.
I'd recommend making the destruction animations smoother. The 'slow break apart then immediately disappear' is something every novice animator does, but it never really works out well. If you're set on not just having an explosion or group of explosion effects, do it procedurally - write a script that takes a group of 'part' sprites and has them move outwards from their origin point as they fade out. It'll look much smoother. You can even keep up performance by pre - generating a few animations for each enemy and just using them the same way you'd use spritesheets.
The missile effects should similarly be changed. I know you want to use hard animation and spritesheets, but it's hard as hell to get 8 directional missile guidance to feel 'right'. Just rotate an image programatically and use full 360 degree motion.
The final boss could be more complex. Right now, it's just pure luck. Either you get the right combination of powerups to survive as you rapidly press spacebar and try to move around the impenetrable cloud of ships to get a clear shot, or you just die. An ending after you kill it would be a big improvement as well. On a related note, you should be able to continue firing missiles by holding down the spacebar.
The upgrades aren't very exciting. I've never needed extra missile space - I either use them as soon as I get them(in a mission with 'factory ships') or not at all. That one could probably be changed to missile damage, missile guidance, number of missiles fired, etc. Similarly, the shield cap isn't really something that ever got in my way - I don't know why I'd waste points on raising it. Bullet damage was completely necessary, armor upgrades were helpful but a bit less noticeable, and the other two categories could just be ignored.
Also, if you want to add carriers to survival as you mentioned to the other dude, you could just have them retreat after X number of spawned ships.