Test code coverage is a form of dynamic analysis, but a very limited one. The term "dynamic analysis" in the software-quality domain usually refers to systems that use compile- and/or run-time instrumentation to monitor the behavior of executing programs for dangerous and invalid operations, such as memory mismanagement, invariant or contract violation, concurrency issues, etc.
But you're correct that code coverage is by no means a 1990s invention, nor one to come out of Extreme Programming. Wikipedia cites a 1963 CACM article by Miller and Maloney on the subject.
Similarly, as you note, static analysis is much older than the 1990s. Johnson's original lint, one of the more famous static-analysis tools, was published in 1978.
Most of the dynamic analysis tools for Windows, Linux, and UNIX date from the early 1990s or later - BoundsChecker, Purify, and Insure++ all were first released in 1992 or 1993 - but I believe it was the late 1980s when Perens released Electric Fence on USENET, and certainly academic work on dynamic program analysis goes back earlier than the 1990s.