Какие инструменты для нарезки программ существуют на самом деле?

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

Теперь срок составляет 20 лет, и я вижу, что есть много публикаций, научных работ и т.д. Но где же реальные инструменты? Действительно ли люди применяют эту концепцию на практике или просто изучают ее в академическом плане?

Что там и для каких языков?

Изменить: Я предполагаю, что то, что я ищу, то, что я бы наградил в качестве принятого ответа, является ссылкой на некоторые публикации/организации/и т.д., которые особенно ориентированы на нарезку программ и содержат список инструментов/методов/и т.д..

Ответ 1

[РЕДАКТИРОВАТЬ] (в ответ на вопрос, который был изменен в ОП)

Я довольно долго слежу за литературой. Я не думаю, что там есть "программный срез", в котором есть список, который вы хотите. Большинство программных слайсеров, которые были построены, были своего рода университетским экспериментом (означает, что они не работали в производстве и недоступны для практических целей). Вы можете узнать о них, выполнив поиск на странице scholar.google.com с термином "угадай, что", "нарезка программ"; Я подозреваю, что вы уже это знаете. "Biggies", я думаю, вы уже здесь.

Это исследование немного устарело, но сделано звездным исследователем: http://www.cse.buffalo.edu/LRG/CSE605/Papers/slicing-survey-tip.pdf. Это последнее: http://dl.acm.org/citation.cfm?id=1050865.

CodeSurfer - это коммерческий инструмент для выполнения статической нарезки на C-программах. Я считаю, что они также обрабатывают С++. Значительным плюсом, недоступным для других инструментов, является пользовательский интерфейс для интерактивного просмотра фрагментов кода.

Indus - это инструмент для исследований в университете, предназначенный для статического наложения кода на Java. Я не уверен, что это все еще активно развивается.

Кажется, существует множество "динамических" программных инструментов для среза Java, созданных университетами. Ни один из них не находится в стадии активного развития или использования, о котором я знаю.

Моя компания предлагает DMS Software Reengineering Toolkit, который содержит общую технику для управления программой и анализа потока данных, включая создание специализированных статических кодовых слайсеров. DMS используется для создания фрагментов больших программ C, а также программ управления промышленными процессами. (Я бы предоставил ссылку, но люди SO, похоже, ненавидят ее, когда я это делаю).

Ответ 2

платформа Frama-C, которая посвящена анализу кода C, имеет полноценную межпроцедурную нарезку плагин. См. Например эту страницу, где пользователь использует этот плагин для упрощения программы, которую он анализировал.

Ответ 3

Пожалуйста, посмотрите Giri.

Динамическая резка программ - это метод, который может точно определять, какие команды влияют на конкретное значение в одном выполнении программы. Giri реализует динамическую обратную сортировку в компиляторе LLVM.

Этот проект был впервые разработан Swarup Kumar Sahoo, John Criswell и Dr. Vikram S. Adve из UIUC. Он был выбран Google Summer of Code (GSoC) 2013 года под его зонтичным проектом LLVM. Mingliang Liu из Университета Цинхуа присоединился к улучшению Giri в июне 2013 года. Его постоянно оценивают проект и запросы на тягу.

Ответ 4

Посмотрите Wala для Java. WALA включает в себя слайсер, основанный на контекстно-зависимом табулировании достижимости в графике зависимости системы.