По первому пункту - согласен. И даже могу дополнить, что и генерация больших объёмов данных при таком подходе не всегда выгодна, т.к. данные могут ходить по совершенно одним и тем же путям программы, но одни будут вызывать NPE, другие нормально работать, а третьи вызывать AIOOB.
Да, тут можно добавить и ещё один аспект -- как правило мы измеряем покрытие своего кода, но в программе имеются и обращения к внешним библиотекам, и они могут тоже возвращать разные результаты (в том числе разные исключения, в том числе неспецифицированные unchecked-исключения), и это остаётся неучтённым, поскольку строчку с вызовом внешнего метода достаточно покрыть один раз, чтобы показатели были хорошими.
Про остальные пункты - это чисто технические заморочки (кстати, что такое покрытие по дизъюнктам?). Я всё это понимаю, но не думаю, что это сильно может влиять именно на работу и попытку подгона под результат. А даже если и так, то если покрытие, как бы его не измеряли, растёт - то это непременно будет плюс и тестируемому продукту и тестовому набору.
Дело не в том, что покрытие растёт (если так -- это хорошо), а в том, что если оно уже достигнуто, то больше тесты делать нет необходимости, которые покрывают уже покрытые элементы, они не улучшают показатели. А это опасно, потому что это лишь лишь один из факторов, которые нужно принимать во внимание, когда мы решаем, нужно делать дополнительные тесты или уже достаточно.
Покрытие по дизъюнктам -- это покрытие всех возможных логических комбинаций, при которых срабатывает или не срабатывает составное условие ветвления. Например, знаменитая учебная задача про треугольник, там есть такое условие:
if (a+b<c || b+c<a || c+a<b) {
// это не треугольник!
}
Условие состоит из трёх частей, и оно выполняется тогда, когда выполняется одна из трёх частей (любая), а две другие не выполняются, когда выполняются две любые, а третья не выполняется, или когда выполняются все три. То есть всего имеется восемь различных комбинаций состояний частей этого условия, при этом семь из них приводят к выполнению условия, а одно -- к нарушению. И дополнительным усложнением является то, что некоторые из этих комбинаций не могут быть достигнуты, так что здесь тоже нужно применить интеллект, чтобы понять, почему не достигается полное покрытие -- потому что тестов мало или потому что это принципиально невозможно.
А что касается 100% покрытия, так оно, насколько я помню, вредно, с точки зренеия трудозатрат. Хотя опять же, смотря о каком покрытии вести речь :)
И то что 100% покрытие ничего не гарантирует, я тоже согласен.
Вовсе нет, достижение 100% покрытия это очень хорошо, потому что любое числе меньше 100% оставляет сомнения относительно того небольшого количества элементов, которые остались непокрытыми. Мы должны каждый из них внимательно изучить, и если они несущественны -- явно исключить их из рассмотрения, используя возможности инструмента. И тогда мы сможем с уверенностью сказать, глядя на замечательное число 100%, что покрыты все существенные элементы.