The correct answer to both questions is "it depends". I have successfully upgraded many farms and written PowerShell scripts to crawl my farms looking for InfoPath forms in Form Libraries as well as List Edit and New item forms. We use the resulting list of forms to first, check to see if they are still in use, then later, for testing. Probably the biggest issue is when you migrate from Classic to Claims Authentication. This may break your InfoPath forms if your are getting the current user and then passing it outside the form.
We also script the discovery of every custom assembly and custom field control. Then, again, we evaluate if the customization is still necessary and if so, test it in the upgraded farm. 2010 customizations did not use a versioned Layouts folder. In 2013 and 2016 we use a 14 & 15 folder respectively. So, it is POSSIBLE that the only change you will need to make is in the deployment path of your Solution. (Otherwise you will get a file not found
error.)
If you are using parts of the API that have been deprecated, then you will have to rewrite the code. This you can test by recompiling against the 2016 SharePoint DLLs.
There is a lot of other discovery you will have to do, as Moe indicates above, before you can move from 2013 to 2016, you have to ensure that you have no sites in 2010 mode. We just write scripts to perform this entire audit in 2010, then script the same in 2013, then upgrade to 2016 and test again.
<SelfPromotion> There is a great class on all this on Pluralsight. Upgrading Your Farm to SharePoint 2016
</SelfPromotion>