Функции - Степень идентичности (версия 2 от 29.09.07)

01.10.07

Разработка - Математика и алгоритмы

Степень идентичность в этой версии рассматривается в пяти разрезах.
Пока хорошо проработаны только первые три (имена, параметры, код), но их совокупность позволяет выделить некоторые значимые термины для классификации.
Данная классификация послужит методической основой для некой универсальной и автоматически пополняемой библиотеки функций из наиболее популярных конфигураций.
Рейтинг будет вычисляться просто - если одна и та же функция встречается в двух конфигурациях, то её рейтинг = 2.

Функции – Степень идентичности (версия 2 от 29.09.07)

Введение

Что стоит за словами "Эти две функции одинаковы"? Насколько одинаковы эти функции? Могут ли считаться одинаковыми функции, вся разница в которых заключается лишь в том, что в одной использованы английские ключевые слова, а в другой русские?

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

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

Необходимые ограничения

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

В данной классификации не рассматривается вопрос о видимости функции из других модулей, поэтому ключевое слово Экспорт нас не интересует.

В описания синтаксиса не включены ключевые слова, обозначающие начало функции и её завершение (Функция, Function, КонецФукнции, EndFunction). Предполагается, что все эти ключевые слова могут быть заменены на пару Функция-КонецФункции.

Качество и наличие комментариев являются предметом другой классификации.

В рамках данной классификации аналогично может быть рассмотрена идентичность процедур.

Общее представление об идентичности функций

Идентичность функций будет рассматривается в следующих относительно независимых разрезах:
  • Идентичность по наименованию

  • Идентичность по параметрам

  • Идентичность по реализации

  • Идентичность по возвращаемым значениям

  • Идентичность по результатам

Идентичность по наименованию

Функция <ИмяФункции>([<ПараметрыФункции>])

Одноименные функции – функции с совпадающими наименованиями без учета регистра.

Разноименные функции – функции с различающимися именами.

Идентичность по параметрам

ПараметрыФункции = [<Параметр>]*[,<Параметр>]

Параметр = [[Знач] <ИмяПараметра>[=<ДефЗнач>],]

Т.к. у нас нет возможности проверить тип параметра, будем ориентироваться только на имя параметра, признак передачи по значению, наличие значения по умолчанию, а также на количество параметров.

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

Пока только проработан вариант полного совпадения количества и дополнительных характеристик параметров.

Полная идентичность по параметрам – количество параметром, их название и дополнительные характеристики совпадают.

Идентичность по параметрам – количество параметров и дополнительные характеристик совпадают, а вот наименования параметров не совпадают.

Идентичность по реализации

Полная идентичность по реализации – у двух функций тело функции полностью совпадает без учета незначащих символов и комментариев.

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

Идентичность по возвращаемым значениям

Анализу подлежат все возможные значения-параметры обязательного оператора Возврат.

Идентичность по результатам

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

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

Обобщенная степень идентичности

Объединение всей совокупности классификаций по идентичности позволяет ввести обобщенные понятия степени идентичности.

Полная идентичность – две функции полностью идентичны по параметрам и по коду.

Идентичность – две функции идентичны по параметрам и по коду.

Синонимичные функции – две функции идентичны или полностью идентичны, но различаются наименованиями.

Заключение

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

Для идентичных функций (не полная идентичность) необходимо проработать такую ситуацию, когда в теле функции изменяется переменная, предполагаемая как локальная, но не закрытая от изменения оператором Перем; В результате замены одной идентичной функции на другую и наличии совпадения глобальной переменной и «незакрытой» локальной переменной, могут возникнуть проблемы.



См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

Математика и алгоритмы Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    1870    stopa85    12    

34

Алгоритм симплекс-метода для решения задачи раскроя

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    4662    user1959478    50    

34

Регулярные выражения на 1С

Математика и алгоритмы Инструментарий разработчика Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    7652    4    SpaceOfMyHead    17    

56

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    7929    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4546    fishca    13    

36

Интересная задача на Yandex cup 2021

Математика и алгоритмы Бесплатно (free)

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8934    John_d    73    

46

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Анализ и прогнозирование Бесплатно (free)

Подробный разбор, с примером использования, встроенного механизма кластеризации 1С.

31.08.2021    7957    dusha0020    8    

70
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. brr 182 01.10.07 11:02 Сейчас в теме
2. brix8x 523 01.10.07 12:33 Сейчас в теме
Нет, это не ТЗ, хотя при создании программы готовая классификация может быть полезной.
Оставьте свое сообщение