In my experience Debugging is an absolutely critical skill that is *never* taught in schools. The importance of debugging lies in the fact most of the software work you do in most companies involves maintaining other people's code and not writing applications from scratch. Similar sentiments are expressed in this article quite well, see the first point:
https://medium.com/@cramforce/ive-lately-been-thinking-about-what-patterns-could-explain-perceived-differences-in-productivity-77d1f52f1527
Testing on the other hand depends at times on your tool sets. Dynamically typed languages (Ruby, Python, JavaScript, etc) tend to lend themselves to more rigorous testing procedures, some of which could be avoided with the use of statically typed languages (C++, JAVA, C#, Erlang, Go, etc). It is said that a compiler takes care of a fairly large amount of errors that can only be detected at runtime when using language interpreters, hence the need for carrying out automated test suites in those cases.
Hope I haven't veered off point too much?
Martin.