2009-04-17 24 views
14

Tan anticuado y doloroso como es, trabajo en una empresa que continúa utilizando activamente VB6 para un proyecto grande. De hecho, hace 18 meses nos enfrentamos al límite de identificador de 32k.Acceder con precisión a las limitaciones de VB6

No estamos dispuestos a renunciar a la gran base de código y reescribir todo en .NET rompimos nuestra aplicación en un ejecutable principal y varios archivos DLL de apoyo. Esta semana encontramos nuevamente el límite de 32k.

El problema que tenemos es que ninguna herramienta que podamos encontrar nos dirá cuántos identificadores únicos está utilizando nuestra fuente. No tenemos una forma precisa de medir cómo nuestros esfuerzos están reduciendo el número de identificadores o qué tan cerca estamos del límite antes de llegar a él.

¿Alguien sabe de una herramienta que escaneará la fuente de un proyecto y devolverá algunas métricas y estadísticas precisas?

Respuesta

2

OK. El Project Metrics Viewer que forma parte de la herramienta Project Analyzer de Aivosto hará exactamente lo que usted desea. He incluido una captura de pantalla y también el enlace a la lista de métricas que incluye números de variables, etc.

Metrics List

alt text http://www.aivosto.com/project/help/pm-main.gif

+0

Deseo que esta herramienta funcione ... Muestra el número de declaraciones de variables (como lo hace CodeSMART) pero aún no muestra el número de identificadores únicos. Si tiene tres subs que contienen la misma variable "myvar", entonces cuenta como tres declaraciones de variables pero solo un identificador único. El analizador de proyectos solo muestra el recuento de declaraciones ... –

1
+1

Sí, pero el asker necesita contar el número de declaraciones de variables, y no puedo ver dónde CodeSmart muestra esa cifra. ¿Puedes decirnos dónde debería estar? Gracias. –

+0

Está allí, pero no tengo alojamiento de imágenes para corregir la captura de pantalla del sitio web del fabricante. Si descarga la versión de prueba e instálela, puede ejecutarla y verla usted mismo. – MaSuGaNa

+0

He instalado CodeSMART pero no puedo encontrarlo. ¿Puedes decir la "ruta" del árbol donde se muestra este valor? –

-1

Parece que Compuware's DevPartner tenían ese tipo de análisis de código. No sé si la versión actual aún es compatible con Visual Basic 6.0. (Pero al menos hay una versión de prueba de 14 días disponible)

0

Se puede obtener esta información de una herramienta que extrae los identificadores de código de Visual Basic 6. Entonces, todo lo que tendría que hacer es ordenar la lista, eliminar duplicados y medir el tamaño de la lista. Tenemos un source code search engine que divide el código fuente en tokens de idioma ("lexes"), y algunos de esos tokens son exactamente esos identificadores. Eso contendría exactamente los datos que desea.

Pero quizás haya otra manera de resolver su problema: descubra qué nombres de variables ocurren rara vez y reemplácelos por un conjunto de nombres estándar (por ejemplo, "temperatura"). Entonces, lo que realmente quiere es contar el número de cada nombre de variable para que pueda ordenar "pequeños números de referencias". Los mismos datos lexer pueden proporcionar esta información.

Entonces todo lo que necesita es una herramienta para cambiar el nombre de los identificadores de baja aparición a algo del conjunto estándar. Ofrecemos ofuscadores que reemplazan un nombre por otro que probablemente podría hacer esto.

[Actualización de octubre de 2014]. Acabo de tener una larga conversación con alguien con este problema. Resulta que hay una bonita respuesta conceptual sobre la cual basar una herramienta, y que se llama register coloring, que asigna un número fijo de registros a un número arbitrario de operandos. Esto funciona al calcular un "gráfico de interferencia" sobre los operandos; y dos operandos que no "interfieren" pueden asignarse al mismo registro. Uno podría usar eso para asignar 2^16 nombres de nombres de variables disponibles a un número arbitrario de identificadores, si el gráfico de interferencia no es suficientemente malo. Yo creo que no es así. YMMV, y alguien todavía tiene que construir una herramienta de este tipo, que probablemente necesite un analizador VB6 y maquinaria para calcular dicho gráfico. [Mira mi biografía]

0

Truco: crea una clase no utilizada con #### variables únicas en ella. Use Excel o algo para generar nombres de variables únicos alfabéticos. Elimine la clase del proyecto cuando llegue al límite o comente bloques de 100 variables únicas.

Prefiero apoyarme en el compilador (define define cuántas variables son demasiadas) que en cualquier herramienta de terceros de todos modos.

(oh crud, siento necro - no se dio cuenta de las fechas)

1

La empresa donde trabajo también tiene un proyecto de VB6 grande que se encontró con el límite de identificador. Desarrollé una forma de contar con precisión la cantidad de identificadores restantes, y esto se ha incorporado a nuestro proceso de compilación para este proyecto.

Después de probar varias herramientas sin éxito, finalmente me di cuenta de que el VB6 IDE mismo sabe exactamente cuántos identificadores le quedan. De hecho, el IDE VB6 arroja un error de "falta de memoria" cuando agrega una variable más allá de su límite.

Aprovechando este hecho, escribí un proyecto de complemento VB6 que primero compila el proyecto cargado actualmente en el IDE, luego agrega variables con nombre único al proyecto hasta que arroja un error. Cuando se produce un error, registra el número de identificadores agregados antes del error como el número de identificadores restantes.

Este número se almacena en un archivo en una ubicación conocida por nuestro proceso de compilación automatizado, que luego lee este número y lo informa al equipo de desarrollo. Cuando se encuentra por debajo de un valor con el que nos sentimos cómodos, programamos un poco de tiempo de refactorización y sacamos más código de este proyecto a proyectos DLL. Hemos estado usando esto en producción desde hace varios años y hemos demostrado que es un proceso confiable.

Para responder directamente a la pregunta, usar un complemento es la única forma que conozco para medir con precisión el número de identificadores restantes. Aunque no puedo compartir el código de complemento que está usando nuestro proyecto, puedo decir que no hay mucho código involucrado, y no tardó mucho en desarrollarse.

Microsoft tiene una guía decente para cómo crear un complemento, que puede empezar: https://support.microsoft.com/en-us/kb/189468

Éstos son algunos detalles importantes específicos a los identificadores de conteo:

  • El IDE de VB6 no arrojará sistemáticamente un error cuando esté fuera de los identificadores hasta que se haya compilado el proyecto cargado actual. Nuestro complemento programáticamente hace esto antes de agregar identificadores para garantizar un conteo preciso. Si el proyecto no se puede compilar, no se puede obtener un conteo preciso.
  • Hay 32.500 identificadores disponibles para un nuevo proyecto VB6 vacío.
  • Solo los nombres únicos de identificadores cuentan. Dos variables locales con el mismo nombre en dos rutinas diferentes solo cuentan como un identificador.
Cuestiones relacionadas