LINUX.ORG.RU

[Python] Выбросить ненужный код

 


0

0

Предположим ситуацию: есть довольно крупный опенсорцный проект. Какие-то чуваки взяли его, добавили кое-какой функционал, кое-что серьёзно изменили и теперь часть старого кода не используется, а просто валяется без дела. Теперь эти чуваки хотят тулзу для автоматизированного поиска и устранения ненужного кода. Такая есть в природе?

★★★

man индусы

Для компилируемых языков такая задача в разрешима (и то наверняка есть исключения), а для интерпретируемых — нет (ибо :

obj = {
  doSome: function(o){
    console.debug("arg:"+o);
  }
}

….
var code="";
//гдето в кушерях пользователь присваивает code="obj.doSome"

eval(code)("что нифига не пашет?");

Конечно в питоне меньше возможностей для подобных извратов, но всеже, такую ситуацию не отследить.

wfrr ★★☆
()

Найди тул для вычисления coverage при тестировании и запусти полный набор тестов. Уверен, для питона такие имеются. Далее смотришь непокрытые строчки и удаляешь их (разумеется, следует всё-таки иногда включать голову, чтобы не удалить то, что не покрыто тестами).

gaa ★★
()
Ответ на: комментарий от dimon555

>не разрешима такая задача

А кстати, почему?

Допустим, у нас есть некий безопасный диалект C (для простоты, вообще без указателей). Программа состоит из N функций. Строим граф вызовов, выкидываем всё кроме связанного подграфа с main.

Это нас не избавит от if (0==1) unused_function(), но это в задаче и не требуется.

Davidov ★★★★
()
Ответ на: комментарий от Davidov

Программа может где-нибудь впасть в цикл и будет не ясно закончит ли она когда-нибудь вычисление и вызовет следующую после цикла функцию или нет, вроде где-то в таком направлении доказывается

dimon555 ★★★★★
()
Ответ на: комментарий от dimon555

Это известно, да.

Но проблема в том, что если эту функцию выкинуть (а вызов оставить), то программа даже не слинкуется.

Речь идёт именно об удалении тех функций, которые явным образом не вызываются.

Davidov ★★★★
()
Ответ на: комментарий от Davidov

Они могут вызываться при определённых условиях, зависящих от входа, появятся ли когда-нибудь эти условия на входе? или нужно доказать, что функция не вызывается для любых входных условий. вдруг во время выполнения произойдёт ошибка и вызовется call $random, тогда теоритически любая функция вызываема.

dimon555 ★★★★★
()

выбросить ненужный код == не выбросить нужный
ищи тулзу, чтобы не выбросить нужный код ^)

dimon555 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.