Todo sobre el tuning de coches

Descripción de procedimientos, funciones y módulos. Diagrama de bloques del programa y medios para cambiarlo Cálculo según el diagrama de bloques del programa

Diagrama funcional o diagrama de datos (GOST 19.701-90): un diagrama de interacción de componentes de software con una descripción de los flujos de información, la composición de los datos en los flujos y una indicación de los archivos y dispositivos utilizados. Para representar diagramas funcionales se utilizan símbolos especiales establecidos por la norma.

Los diagramas funcionales son más informativos que los diagramas estructurales. A modo de comparación, la Figura 12 muestra diagramas funcionales de complejos y sistemas de software.

Figura - 12. Ejemplos de diagramas funcionales: a - un conjunto de programas, b - un sistema de software.

Se deben describir todos los componentes de los diagramas estructurales y funcionales. Con un enfoque estructural, es especialmente necesario elaborar las especificaciones de las interfaces entre programas, ya que el número de errores más costosos depende de la calidad de su descripción. Los errores más costosos son los que se descubren durante pruebas exhaustivas, ya que su eliminación puede requerir cambios importantes en los textos ya depurados.

Aplicación de un enfoque orientado a objetos y el lenguaje de modelado visual UML en el análisis de requisitos de software para una empresa u organización: construcción de diagramas de varios tipos.

Enfoque orientado a objetos y lenguaje de modelado visual UML en el análisis de requisitos de software para una empresa (organización).

El Lenguaje Unificado de Modelado (UML) fue un medio para lograr un compromiso entre estos enfoques. Existe una cantidad suficiente de herramientas que respaldan el ciclo de vida de los sistemas de información que utilizan UML y, al mismo tiempo, UML es lo suficientemente flexible como para configurar y respaldar las actividades específicas de varios equipos de desarrollo.

UML es un lenguaje de modelado orientado a objetos con las siguientes características principales:

· es un lenguaje de modelado visual que garantiza el desarrollo de modelos representativos para organizar la interacción entre el cliente y el desarrollador de SI, y varios grupos de desarrolladores de SI;

· contiene mecanismos para ampliar y especializar los conceptos básicos de la lengua.

· UML es una notación estándar para el modelado visual de sistemas de software, adoptada por el consorcio Object Management Group (OMG) en el otoño de 1997, y hoy en día es compatible con muchos productos CASE orientados a objetos.

· UML incluye un conjunto interno de herramientas de modelado (¿módulos?) ("núcleo") que ahora se adoptan en muchos métodos y herramientas de modelado. Estos conceptos son necesarios en la mayoría de las aplicaciones, aunque no todos los conceptos son necesarios en cada parte de cada aplicación. Los usuarios de idiomas cuentan con las siguientes opciones:

· construir modelos basados ​​en herramientas del kernel, sin utilizar mecanismos de extensión para la mayoría de las aplicaciones típicas;

· agregar nuevos elementos y convenciones si es necesario si no están incluidos en el núcleo, o especializar componentes, notación y restricciones para áreas temáticas específicas.

3. DIAGRAMA ESTRUCTURAL DEL PROGRAMA

Las principales funciones que deben implementarse en nuestro programa se derivan de la formulación y análisis del problema:

1)Mostrar los datos del usuario en forma de tabla y trabajar con ellos.

2) Agregar y eliminar tipos de objetos.

3)Representación gráfica del plano con capacidad de escalar.

4)Trabajar con archivos e imprimir resultados.

5) Interfaz de usuario conveniente.

A continuación se muestra un diagrama de bloques funcional del programa, representado en forma de módulos principales y conexiones entre ellos. Representa claramente la implementación de los requisitos anteriores en el programa.

Arroz. 3.1. Estructura funcional del programa.

La parte principal del programa es el módulo de generación de interfaz y control. Representa el formulario principal en el que hay controles que permiten realizar otras funciones y también forman la interfaz de usuario.


4. ALGORITMOS BÁSICOS

El principal es el algoritmo para construir una imagen basada en datos de la tabla principal, implementado en forma del método plandraw().

A continuación se muestra su diagrama de bloques y descripción.

4.1 Descripción del algoritmo

Si la pestaña que contiene la imagen de nuestro plan no está activada, la activaremos.

Elaboramos una tabla de distancias, limpiándola de entradas anteriores.

Configuramos los parámetros de fondo (color) y lo dibujamos, luego configuramos los parámetros del lápiz (grosor de línea y estilo), que determinarán la visualización de las líneas de ruta en el dibujo. Al principio, el grosor de la línea es igual a uno, para dibujar una cuadrícula de coordenadas.

Usando la propiedad de la tabla RecordCount, encontramos el número de filas en la tabla principal.

Establecemos el puntero del registro actual en el primero y organizamos un ciclo de revisión de todos los registros de la tabla, en el que contamos el número de rutas.

Al comienzo del ciclo, nos preparamos para mostrar la escala: asignamos un factor de aumento (en unidades enteras) a la variable de escala y para ambas barras de desplazamiento determinamos el valor máximo, que depende del grado de aumento y de la tamaño de la imagen.

Si el número de ruta es cero, entonces se cumple la condición para dibujar una cuadrícula de coordenadas (meridianos y paralelos). Primero, se realiza un ciclo de dibujo de meridianos: pasamos de 0 a 360 grados en pasos dependiendo del grado de aumento (15, 6, 3 o 1 grados), y cerca de cada meridiano se firma el grado de longitud correspondiente (este longitud - con un signo "+") , oeste - con un signo "-"). El primer meridiano está representado en negro. Se llevan a cabo acciones similares en el ciclo de trazar paralelas, la única diferencia es que el ciclo va de 0 a 180 grados. El signo "+" indica latitud norte y el signo "-" indica latitud sur.

Cambie el grosor de la línea a 2 para mostrar las líneas de ruta.

Creamos tres matrices en las que ingresaremos los índices de los registros y coordenadas de la ruta actual. A continuación, organizamos un bucle en el que revisamos las entradas de la tabla y completamos estas matrices para la ruta actual. Además, los valores ya escalados se ingresan en las matrices de coordenadas. En el mismo ciclo contamos el número de puntos de ruta.

En el siguiente ciclo, ordenamos el contenido de la matriz de índice para luego poder dibujar los puntos de referencia en el orden en que aparecen en la tabla.

Establezca el color de la línea según el número de ruta. Y organizamos un bucle que dibuja líneas.

En el ciclo de dibujo lineal hacemos lo siguiente: teniendo en cuenta las posiciones de las barras de desplazamiento, se calcula la posición de la ventana con respecto al mapa y las coordenadas del punto en la ventana se calculan con respecto a esta posición. Si esta es nuestra primera pasada, simplemente movemos el cursor al punto con las coordenadas calculadas; si no, y la bandera de dibujo lineal está activada, dibujamos una línea desde el punto anterior hasta este. Si la casilla de verificación está desactivada, solo se colocan puntos en el mapa.

Luego se calcula la distancia entre puntos ubicados en el globo, cuyas proyecciones acabamos de representar en nuestro mapa. Las distancias se calculan en kilómetros, el radio de la Tierra se considera 6371 km. La distancia se calcula si i no es igual a 0 y este no es el primer paso por el ciclo. Esta condición es necesaria porque estamos usando las coordenadas del punto anterior para encontrar la distancia al actual.

Como la superficie de la Tierra es esférica, necesitamos calcular la longitud del arco. El principal problema aquí es encontrar el ángulo en el que descansa el arco.

Se consideran tres casos:

1) si los puntos están en la misma longitud, el ángulo es fácil de determinar: será igual a la diferencia entre los valores de latitud mayores y menores.

2) si los puntos están en la misma latitud, entonces su determinación tampoco es difícil: es igual a la diferencia entre los valores de longitud mayor y menor, multiplicada por la corrección cos(f), donde f es la latitud actual.

3) si los puntos están ubicados en diferentes latitudes y longitudes, este caso de encontrar el ángulo es más complejo. Veámoslo en detalle.

Primero, encontramos la diferencia de longitud de los puntos, como si estuvieran en la misma latitud, multiplicamos por la corrección cos(f), y calculamos la distancia lineal entre ellos usando el teorema del coseno (los otros dos lados del triángulo son los radios de la Tierra). De la misma forma calculamos la distancia entre puntos, como si estuvieran en la misma longitud. Denotamos estas distancias como l1 y l2.

Ahora tenemos un triángulo rectángulo con catetos l1, l2, cuya hipotenusa es la distancia l3. Lo calculamos usando el teorema de Pitágoras. Nuestro objetivo es encontrar el ángulo a. Usando el teorema del coseno, encontramos el coseno de este ángulo. Habiendo calculado el arco coseno a partir de él, ¡obtenemos el ángulo! A continuación se muestra un dibujo explicativo.


Arroz. 4.1. Explicación de los cálculos de distancias en diferentes latitudes y longitudes.

Después de encontrar el ángulo, calculamos la longitud del arco e ingresamos la distancia resultante en la tabla de distancias junto con el número de la ruta actual.

Nota: dado que las funciones coseno y arcocoseno operan con ángulos especificados en radianes, el programa convierte radianes a grados y viceversa. Todos estos cálculos conducen a la acumulación de errores.

Todas las fórmulas mencionadas se dan en el Apéndice E.

Habiendo calculado la distancia, la mostramos en el plano junto al punto actual, si la bandera correspondiente está encendida. Además, debido a la condición para estimar la longitud de la ruta, la figura no muestra la longitud de un segmento, sino la suma de las longitudes de los segmentos que preceden a este punto. El usuario puede consultar las longitudes de los segmentos individuales en la tabla de distancias.

El mapa también muestra el tipo de objeto para un punto determinado si la casilla de verificación "mostrar tipo de objeto" está marcada.

Si la casilla de verificación "no mostrar tabla de distancias" está desactivada, hágala visible.

Una vez dibujadas todas las rutas, liberamos la memoria asignada para los conjuntos de índices y coordenadas.


4.2 Diagrama de flujo del algoritmo

Arroz. 4.2. Diagrama de flujo del algoritmo de dibujo del plano.


5. IMPLEMENTACIÓN DEL SOFTWARE 5.1 ​​Selección de un entorno de desarrollo del programa

Como ya se mencionó en el “Declaración del problema”, para crear este programa se eligió el entorno de desarrollo Borland C++Builder 5. Esta decisión se debe a que en él el proceso de creación de una interfaz no es difícil incluso para un programador que He encontrado Builder por primera vez y funcionan bien con bases de datos y gráficos, que es exactamente lo que necesitamos para desarrollar nuestro programa.

La desventaja, en mi opinión, es el gran código ejecutable del programa: para que funcione en una máquina donde no está instalado Builder, es necesario incluir todas las bibliotecas utilizadas en él, razón por la cual el tamaño del El programa se vuelve varias veces más grande.

Además, lo bueno de Builder es que los componentes tienen muchas propiedades que se pueden cambiar no sólo durante la construcción, sino también durante la ejecución del programa, lo que hace que trabajar con ellos sea más flexible.

5.2 Trabajar con tablas

Usamos Paradox como controlador de base de datos. Este tipo de base de datos se eligió en primer lugar porque Builder tiene herramientas integradas para trabajar con tablas Paradox, como Borland Database Engine, y también viene con el programa Database Desktop. En segundo lugar, la ventaja de Paradox es que el nombre de la base de datos se puede especificar como la ruta al directorio donde se encuentra el archivo de la tabla y todas las tablas se almacenan en archivos separados. En tercer lugar, ocupan poco espacio y son las más sencillas de las mesas locales. En cuarto lugar, las tablas Paradox le permiten crear campos clave.

Para garantizar el trabajo con la mesa, instalamos los siguientes componentes en el formulario:

Un DBGrid con el que podemos insertar, eliminar o editar datos de una tabla, o simplemente mostrarlos.

Una lista DBComboBox con la que podemos insertar datos de la tabla de objetos al registro actual de la tabla principal. Antes de utilizar esta lista, se debe completar con valores de la tabla de objetos. Para ello, al iniciar el programa, revisamos todos sus registros e ingresamos su contenido en el campo Elementos de esta lista.

Navigator DBNavigator: con él puede eliminar, agregar, editar registros en la tabla y también navegar a través de ellos. Lo conectamos a la grilla en la que se mostrará nuestra tabla.

Todos estos componentes están conectados a la tabla a través del DataSourse, en cuyas propiedades indicamos su nombre. Además, la propia tabla también se representa como un componente, Tabla, en el que se debe prestar la mayor atención a tres propiedades:

1)Activo: muestra si la tabla está activa. Si intenta acceder a él si esta propiedad está deshabilitada, el programa generará el error "No se puede realizar esta operación en un conjunto de datos cerrado". Durante las pruebas, se rastrearon y manejaron todas las situaciones posibles que podrían provocar este error.

2) Nombre de la base de datos: el nombre de la base de datos; se toma como ruta al directorio desde el cual se abrió o creó la tabla.

3) TableName: el nombre de la tabla, un archivo con la extensión .db en el que se almacena la tabla.

Todas estas propiedades cambian durante la ejecución del programa.

Necesitamos el componente Tabla para deshacernos de la especificación. Podemos, bajo la apariencia de Tabla, abrir cualquier tabla específica y cambiar solo las propiedades de la Tabla sin afectar a otros componentes. Por ejemplo, al abrir una tabla, cerramos y desactivamos la anterior, mientras que el nombre de la base de datos y el nombre de la tabla en las propiedades del componente Tabla se eliminan, y abrimos y activamos una nueva, escribiendo nuevos nombres de directorio y archivo en DatabaseName. y TableName al abrir. (Consulte los métodos TBOpenFileClick y TBCloseFileClick en el Apéndice A).

Los componentes DataSourse y Table están ubicados en el formulario, pero solo son visibles cuando se trabaja con el programa en Builder.

5.3 Trabajar con gráficos

Para dibujar el plano utilizamos el componente Imagen. Este objeto tiene dos propiedades importantes:

1)Imagen: es un objeto de la clase TPicture, que es un contenedor para gráficos de cualquier tipo. Aquellos. este componente puede almacenar gráficos de mapa de bits, iconos u otros gráficos definidos por el usuario. La imagen es donde se encuentra nuestro dibujo. Con su ayuda guardamos el dibujo resultante en un archivo. (Consulte el Apéndice A, método TBSaveFileClick). Tenga en cuenta también que los tamaños de Imagen e Imagen pueden no ser los mismos. Este problema se discutirá con más detalle a continuación.

2) Lienzo - lienzo. Todo el proceso de dibujo se lleva a cabo en el lienzo del componente Imagen. Canvas le permite configurar los parámetros del lápiz, el pincel, la fuente, dibujar objetos como líneas, rectángulos, elipses y también mostrar texto.

En nuestro programa, usamos el dibujo lineal usando los métodos de contorno MoveTo y LineTo, dibujando puntos usando Ellipse y generando texto usando el método TextOut. (Ver Apéndice A, plandraw).

Aquellos. canvas nos permite trabajar con funciones GDI de Windows sin acceder a ellas directamente, lo que facilita mucho el trabajo con gráficos.


5.4 Desarrollo de interfaz

También se debe prestar especial atención al desarrollo de la interfaz, ya que es necesario hacerla fácil de usar. Las herramientas Builder facilitan la implementación de la interfaz en los estándares de Windows.

Los elementos principales de la interfaz estándar del programa de Windows:

1) Menús: proporciona una forma sencilla para que los usuarios ejecuten comandos agrupados lógicamente.

El menú principal se crea utilizando el componente MainMenu y es muy conveniente editarlo al crear un programa, ya que no es necesario ejecutarlo para verificarlo: todo su contenido ya se muestra en el formulario.

2) Barra de herramientas: contiene botones de herramientas que corresponden a elementos del menú del programa y brindan al usuario un acceso más directo a sus comandos.

La barra de herramientas se implementa mediante el componente ToolBar, que le permite agregar y colocar botones rápidamente. Todos los botones de herramientas de la barra de herramientas tienen el mismo ancho y alto.

Para cada botón, puede configurar un ícono que muestre la acción que implementa seleccionando el número del ícono de las imágenes almacenadas en el componente ImageList. Esto es conveniente porque puede cambiar fácilmente el ícono sin cargar un ícono de un archivo cada vez.

De acuerdo con el estándar de Windows, creé botones en el panel correspondientes a los elementos del menú "Nuevo", "Abrir", "Guardar", "Imprimir".

3) Botones: con su ayuda el usuario inicia la ejecución de la acción asignada a este botón.

Normalmente, según el estándar de interfaz de Windows, los botones casi nunca se utilizan para no saturar la ventana del programa. En su lugar, se utilizan barras de herramientas y menús.

Pero como nuestro programa no realiza una gran cantidad de acciones, también podemos utilizar botones. Esto es conveniente porque, a diferencia de los menús, están ubicados al lado del elemento en relación con el cual se realiza la acción que llaman (por ejemplo, los botones para agregar y eliminar objetos están ubicados al lado de la lista de objetos, y los botones de zoom están al lado a la imagen ), lo que por supuesto será conveniente para el usuario.

Además, puedes ponerles firmas explicando su finalidad, lo cual también resulta conveniente.

Un botón se crea colocando un componente Botón en un formulario. Al desarrollar un programa, se utiliza su propiedad Caption, la inscripción en el botón, y en tiempo de ejecución, la propiedad Enabled se utiliza para inactivar el botón o, por el contrario, activarlo. (Consulte el Apéndice A, HideButtons() y ShowButtons()). Por ejemplo, al abrir una mesa activamos los botones para dibujar un plano, y al cerrarla los inactivamos.

4) Listas desplegables: se utilizan para permitir al usuario seleccionar un elemento de una lista. Esto es mucho más conveniente que ingresarlo manualmente.

En este programa, se utiliza un cuadro combinado para ingresar un tipo de objeto en la tabla (DBComboBox, discutido anteriormente) y para eliminar un tipo de objeto de la tabla de objetos (ComboBox).

La diferencia entre DBComboBox y ComboBox es que el primero está asociado a un campo de tabla y el segundo es una lista simple. El uso de una lista ComboBox simple le permite resolver los problemas de interacción con la tabla y DBComboBox que surgen al eliminar un objeto de la tabla.

5) Barras de desplazamiento: implementadas mediante el componente ScrollBox; en nuestro caso, son necesarias para desplazar la imagen del plano cuando se amplía. El programa cambia el parámetro Max, que determina la cantidad máxima de desplazamiento, dependiendo de la escala.

6) Casillas de verificación (interruptores): determinan si la opción que representan está habilitada o deshabilitada.

En Builder, este es el componente CheckBox.

En el programa, las casillas de verificación determinan si las siguientes funciones están habilitadas o deshabilitadas:

Dibujar líneas de ruta;

Mostrar la distancia en el plano;

Mostrar el tipo de objeto en el plano;

Mostrar tabla de distancias.

Las casillas de verificación generalmente se encuentran en el menú de configuración. Pero debido a la simplicidad de nuestro programa, se muestran en el panel al lado del campo de dibujo, lo cual es muy conveniente para el usuario.

7) Pestañas: en este programa, la tabla y el plano se encuentran en pestañas diferentes. Creo que esto será más conveniente para el usuario, ya que todo el programa está contenido en una ventana y, al mismo tiempo, tanto el área de la tabla como el área de dibujo no están ubicados en detrimento del otro.

Hay dos tipos de pestañas en Builder: TabControl y PageControl.

El programa utiliza PageControl, ya que, a diferencia del primero, este componente puede contener controles heterogéneos en pestañas. En TabControl, todas las páginas son iguales.

8) Los diálogos son una herramienta muy conveniente que ayuda a implementar diálogos con el usuario como guardar, abrir un archivo, imprimir y elegir un color utilizado en este programa.

Todos los cuadros de diálogo necesarios se colocan en el formulario, pero permanecen invisibles para el usuario. Son llamados por el programa e implementan la interfaz estándar del Explorador.

Utilizando los cuadros de diálogo OpenDialog y SaveDialog, el programa recibe el nombre del archivo y directorio que selecciona el usuario. Mediante PrintDialog se accede a los ajustes de impresión. Y ColorDialog te ayuda a elegir un color (se utiliza para seleccionar el color de fondo de la imagen).

El propósito de cada componente de la interfaz visible para el usuario se describe en el manual del usuario.

Vale la pena señalar que cada objeto de la interfaz tiene una propiedad llamada Alinear. Le permite alinear un control a la derecha, izquierda, arriba o abajo de un formulario y panel, y el control permanece allí incluso si se cambia el tamaño del formulario. Por ejemplo, el panel con botones cerca de la imagen está alineado a la derecha, la tabla de distancias está alineada a la izquierda y el campo de la imagen está alineado con alClient, que ocupa todo el espacio libre entre la tabla y el panel. . A medida que estira el formulario, estos controles también se estirarán mientras permanecen en su lugar.

Usar la propiedad Alinear es conveniente porque en la etapa de diseño puede organizar los componentes según sea necesario y luego no tiene que configurar manualmente sus tamaños cada vez que cambia la forma.

5.5 Algunas características de los algoritmos

Algoritmo de dibujo

Como ya se ha descrito con cierto detalle, añadiré sólo una nota sobre su desarrollo: dibuja un mapa en una proyección conforme. Mantienen la igualdad de ángulos entre las direcciones en el mapa y en la naturaleza. Al mismo tiempo, se distorsionan las dimensiones de los territorios.

Se eligió este tipo de proyección porque es más fácil dibujarle una cuadrícula de coordenadas, ya que consta de líneas rectas. (Consulte el Apéndice E para obtener más información sobre proyecciones de mapas y coordenadas de cuadrícula).

Las distancias se calculan en tamaños reales.

Algoritmo para calcular la distancia.

También se describe detalladamente en la "Descripción del Algoritmo". Es parte del algoritmo de dibujo.

Fue deducido por el autor del programa, ya que sus análogos no se encontraron en ninguna parte. Su peculiaridad es que es necesario tener en cuenta la curvatura de la superficie terrestre y calcular la longitud del arco. Esto es especialmente difícil si los puntos están ubicados en la misma latitud y longitud.

Se toma una esfera como la forma de la superficie terrestre. Esto puede dar lugar a errores, ya que la forma de la Tierra es en realidad un elipsoide, pero simplifica enormemente los cálculos. El radio medio de la Tierra se considera de 6371 km. Esto da un error de aproximadamente el 0,3%.

También cabe señalar que para calcular la distancia, especialmente en el caso más complejo, se utilizan varios cálculos secuenciales, por lo que se acumula el error. La magnitud del error también se ve afectada por la conversión de la medida en grados de un ángulo a radianes y viceversa. Pero con la precisión moderna de los cálculos informáticos, este error será pequeño y, además, la tarea no indicaba que la estimación de la ruta deba ser precisa.

Creando una tabla

Aquí hay que decir que no he encontrado un algoritmo para crear una tabla mediante programación en ningún libro que tenga. Toda la literatura hablaba de la creación de tablas en DatabaseDesktop, lo que sería inconveniente para el usuario instalar un programa aún más grande solo para resolver el problema de crear nuevas tablas.

Pero aún así, este algoritmo se encontró en la ayuda del Builder, aunque contenía errores allí.

El programa también presenta un ejemplo práctico (consulte el Apéndice A, TBNewFileClick).

Como característica de este algoritmo, cabe señalar que antes de llamar al procedimiento de creación de tablas CreateTable(), es necesario inicializar todos los campos, indicando su nombre, tipo, longitud (si es necesario) y el valor requerido (si es necesario). o no). Después de inicializar los campos, declaramos un campo clave y solo entonces llamamos al procedimiento de creación de la tabla. Después de esto, debe vincular la nueva tabla al componente Tabla para poder trabajar con ella usando la cuadrícula y el navegador. El nombre del archivo de la nueva tabla se solicita mediante SaveDialog.

Problema de tamaño de gráficos

Durante el desarrollo del programa, surgió un problema bastante grave al hacer un dibujo: al cambiar el tamaño del formulario, el tamaño de la imagen debería haber cambiado, pero esto no sucedió.

La razón fue que el tamaño del componente Imagen aún cambiaba, pero el tamaño de la Imagen seguía siendo el mismo. En este sentido, se creó el procedimiento ResizeForm (ver Apéndice A), que respondió a los cambios en el tamaño del formulario y cambió el tamaño de la imagen de acuerdo con el tamaño modificado del componente Imagen.

5.6 Pruebas

Durante todo el diseño del programa, se probó y depuró. Se prestó especial atención a dos puntos: la corrección de trabajar con tablas y la corrección de dibujar un plano.

Al trabajar con tablas, el primer paso fue detectar cualquier problema asociado con la apertura, la creación de tablas y el dibujo. Por ejemplo, si no desactiva los botones de dibujo, hacer clic en ellos mientras la tabla no está abierta podría provocar un error. Para eliminar este error, si no hay una mesa abierta, los botones se desactivan.

Otro error importante que se ha solucionado es el problema del tamaño de los gráficos (ver arriba).

También era necesario garantizar que al deshabilitar/habilitar casillas de verificación y cambiar el tamaño del formulario, no se dibujaría una imagen si el usuario aún no había hecho clic en el botón "dibujar". Este seguimiento en el programa se realiza mediante la bandera de sorteo, que se establece cuando el usuario hace clic en el botón de dibujar y se borra cuando se hace clic en el botón de borrar. Durante el proceso de prueba, se monitorearon y depuraron todas las situaciones en las que era necesario verificar este indicador.

El aspecto más importante de la prueba fue verificar la funcionalidad del programa en una computadora que no tiene Builder instalado. Esto ayudó a determinar lo siguiente:

1) al compilar un programa, debes incluir todas las bibliotecas utilizadas. Esto se logra deshabilitando dos opciones en la configuración del compilador. Al mismo tiempo, el código ejecutable del programa se hace más grande, pero también puede funcionar en una máquina sin Builder.

2) el programa requiere Borland Database Engine. Si no está en su computadora, debe instalarlo.


6. DESCRIPCIÓN DEL PROGRAMA

El programa está destinado a proporcionar apoyo informativo para la creación de un plano del sitio. Le permite almacenar datos sobre puntos del plan en una tabla, mostrarlos gráficamente, crear una nueva tabla, agregar y eliminar tipos de objetos, calcular distancias y estimar la longitud de una ruta, dibujar varias rutas, guardar los resultados en un archivo o imprimir.

El programa fue creado para el sistema operativo Windows y tiene una interfaz estandarizada y fácil de usar. Junto a él viene un ejemplo en forma de tabla con rutas de tren.


7. INSTRUCCIONES DE INSTALACIÓN

Para instalar el programa se deben cumplir los siguientes requisitos: procesador de 233 MHz o superior, RAM de 16 MB, sistema operativo Windows98 o superior.

Para instalar el programa, debes hacer lo siguiente:

1) Cree una nueva carpeta para el programa.

2) Desde el medio en el que se encuentra el archivo del programa (disquete o disquete), cópielo a esta carpeta.

3) Desempaquete el archivo en esta carpeta.

4) Asegúrese de que los archivos object.db y rasst.db estén en la misma carpeta que el programa.

5) Asegúrese de que el atributo "Solo lectura" esté desactivado para estos archivos. Si no, retírelo.

6) Desempaquete el archivo con las bibliotecas en la carpeta de Windows.

7) Ahora puedes iniciar el programa y usarlo.


8. MANUAL DE USUARIO 8.1 Menú principal Menú "Archivo"

Para comenzar a trabajar en el programa, debe abrir un archivo con una tabla o crear uno nuevo. Esto se puede hacer usando los elementos de menú Archivo, Abrir y Nuevo.

"Abrir": abre una tabla existente. Abre un cuadro de diálogo en el que el usuario debe seleccionar un archivo con la extensión .db.

"Nuevo": crea una nueva tabla. Se abre un cuadro de diálogo en el que el usuario especifica el nombre de la nueva tabla.

"Imprimir": según la pestaña abierta, imprime una imagen o una tabla. Cuando selecciona este elemento, se abre el cuadro de diálogo de configuración de impresión; después de hacer clic en el botón "Aceptar", el trabajo se envía para imprimir.

Menú de mesa

"Construir plan": si la mesa está abierta, activa la pestaña "Plan" y dibuja un plano.

"Agregar tipo de objeto": llama al formulario para agregar un tipo de objeto.

"Eliminar tipo de objeto": abre el formulario para eliminar un tipo de objeto.

Menú de ayuda

"Acerca del programa": muestra el nombre del programa e información sobre el autor.


8.2 Panel de botones rápidos

Las acciones de estos botones son similares a los elementos del mismo nombre en el menú "Archivo".

- "Nuevo" - creando una nueva tabla.

- "Abrir": abre una tabla existente.

- "Imprimir": imprime una imagen o tabla.

8.3 Pestaña Tabla

Cuadrícula de tabla: la tabla se carga en ella. Usando esta cuadrícula, el usuario puede editar y ver las entradas de la tabla.

Navegador: ubicado debajo de la cuadrícula, le permite editar y ver la tabla.

Botones del navegador

- "Primer registro": pasa al primer registro de la tabla.

- "Registro anterior": pasa al registro anterior de la tabla.

- "Siguiente registro": pasa al siguiente registro de la tabla.

- "Último registro": pasa al último registro de la tabla.

- “Agregar registro”: la tabla se pone en modo de edición, se inserta un nuevo registro vacío antes del registro activo.

- “Eliminar entrada”: elimina la entrada actual, habiendo solicitado previamente confirmación.

- "Editar": edita la entrada actual.

- "Cancelar cambios": cancela los cambios en el registro actual y devuelve su valor anterior.

- "Actualizar". Actualiza una tabla en una cuadrícula.

Debajo del navegador hay una Lista de objetos y botones para eliminar y agregar objetos.

Lista de objetos: contiene una lista de tipos de objetos. Cuando selecciona un tipo de la lista, se ingresa en el registro actual de la tabla.

Agregar tipo de objeto: llama al formulario de agregar tipo. Cuando lo agrega, se agrega inmediatamente a la lista.

Eliminar tipo de objeto: llama al formulario para eliminar un tipo de objeto.

Agregar formulario de tipo de objeto

Contiene un campo de edición para ingresar texto en el que se ingresa el nombre del nuevo tipo.

"Agregar": agrega un tipo de objeto a la lista y tabla sin cerrar el formulario.

"Ok": si el objeto no se ha agregado, lo ingresa en la lista y la tabla y cierra el formulario.

"Cancelar": cierra los formularios sin agregar.

Eliminar formulario de tipo de objeto

Lista de objetos: a partir de ella, el usuario selecciona qué objeto debe eliminarse.

"Eliminar": elimina el tipo de objeto seleccionado de la tabla y la lista.

"Eliminar todo": borra completamente la tabla y las listas de objetos.

"OK" - cierra el formulario.


8.4 Pestaña "Planificar"

El campo de dibujo es el área donde se muestra el dibujo del plano.

Barras de desplazamiento: aparecen cuando amplía una imagen haciendo clic en el botón "Agrandar". Le permite desplazarse por la imagen ampliada.

Tabla de distancias: muestra para cada ruta su número y la longitud de los segmentos, en kilómetros. La tabla es visible si la casilla de verificación "Ocultar tabla de distancias" está desactivada.

"Borrar mapa": borra el campo de imagen.

"Dibujar": dibuja un plan.

"Color de fondo": le permite seleccionar el color de fondo de la imagen. Al hacer clic en este botón, aparece un cuadro de diálogo de selección de color.

"+ Ampliar": amplía la imagen en el plano.

"- Alejar": reduce la imagen en el plano. Este botón se activa cuando presiona el botón de aumento.

"Predeterminado": establece el tamaño de la imagen inicial.

“Dibujar líneas de ruta” - si está marcado, las rutas se dibujarán en el plano; si no, solo se indicarán los puntos.

"Mostrar distancias en el mapa": si la casilla de verificación está marcada, junto a cada punto de la ruta se muestra la distancia en forma de la suma de las longitudes de los segmentos que preceden a este punto. “0” se coloca cerca del primer punto de la ruta.

“Mostrar tipo de objeto en el mapa”: si la casilla de verificación está marcada, el tipo de objeto se muestra al lado de cada punto.

"Ocultar tabla de distancias": si la casilla de verificación está marcada, la tabla de distancias es invisible. Si se borra, la tabla aparecerá a la derecha del campo de dibujo.

Todas las casillas de verificación están marcadas de forma predeterminada.


9. CASO DE PRUEBA

Como ejemplo de prueba, representaremos las rutas de varios trenes del ferrocarril Gorky.

Tomemos los siguientes trenes:

N 497G Gorki-Mosk - Adler

N 471G Gorki-Mosk - Novorossiysk

N 431G Gorki-Mosk - Adler

N 367G Gorki-Mosk - Samara

N 059A Gorky-Mosk - San Petersburgo-Glavn

N 039G Gorki-Mosk - Moscú Kursk

Introduzcamos en la tabla las coordenadas de las zonas más pobladas como puntos de cada ruta. Usaremos nombres de ciudades como objetos.

Arroz. 9.1. Vista general del programa en la pestaña "Tabla", ingresando el nombre de un objeto en un registro mediante una lista.


Anteriormente, agregamos la estación Red Knot a la tabla de objetos, pero como no la necesitamos, la eliminaremos.

Arroz. 9.2. Eliminar un tipo de objeto.

Al marcar la ruta del tren 431, necesitamos a Vladimir. Como no está en la lista, debes agregarlo.

Arroz. 9.3. Agregar un tipo de objeto.


Entonces, recopilamos todas las rutas que queríamos. Como resultado, terminamos con una mesa como esta.

Arroz. 9.4. Mesa

Ahora, usando nuestra tableta, construiremos un plan.

Arroz. 9.5. Imagen del plano con todas las inscripciones.


De forma predeterminada, mostramos líneas, distancias y nombres de ciudades.

Veamos cómo quedarán las rutas sin firmas.

Arroz. 9.6. Imagen del plano sin todas las inscripciones.

Ahora miremos sólo las distancias.

Arroz. 9.7. Imagen del plano sólo con distancias.


De hecho, no se calcularon con mucha precisión, pero esto se debe a que no tomamos en cuenta todos los puntos de estas rutas, y además las coordenadas tomadas no eran del todo correctas: se determinaron en el mapa "a ojo".

Ahora veamos nuestro plan con solo los nombres de las ciudades.

Arroz. 9.8. Imagen del plano que muestra solo tipos de objetos.

Arroz. 9.9. Imagen del plano en forma de puntos con todas las firmas.


También puedes ver una tabla de distancias.

Arroz. 9.11. Vista general del programa en la pestaña "Plano" con tabla de distancias visible.


CONCLUSIÓN

Se cumplió con éxito la tarea planteada en el encargo del trabajo de licenciatura. El programa desarrollado satisface plenamente las condiciones iniciales descritas en el planteamiento del problema. En particular, el programa implementó el trabajo con tablas, gráficos y archivos.

El trabajo del usuario del programa se lleva a cabo mediante una interfaz sencilla creada según los estándares de interfaz de programas de Windows.

Otras mejoras y ampliación de las capacidades de este proyecto incluyen la adición del cálculo de la ruta más corta, el dibujo de iconos de objetos, imágenes en relieve y la capacidad de cargar una imagen de mapa como fondo.


BIBLIOGRAFÍA

1. P. Gustafson, M. Cashman, B. Swart, J. Holingworth. Borland C++ Builder 6. Guía del desarrollador. –Williams, 2004.

2. A. Arkhangelsky. Programación en C++ Builder 6. – Binom, 2002.

3. TA Pávlovskaya. C/C++. Programación en un lenguaje de alto nivel. – Pedro, 2001.


APÉNDICE APÉNDICE E. Proyecciones cartográficas y mapas de cuadrícula

Es imposible desplegar una superficie esférica en un plano sin roturas ni pliegues, es decir, su imagen en planta en un plano no se puede representar sin distorsiones, con total similitud geométrica de todos sus contornos. La similitud completa de los contornos de islas, continentes y diversos objetos proyectados sobre una superficie nivelada solo se puede lograr en una bola (globo). La imagen de la superficie de la Tierra en una bola (globo) es igual en escala, igual en ángulo e igual en tamaño.

Es imposible preservar simultánea y completamente estas propiedades geométricas en el mapa. Una cuadrícula geográfica construida en un plano que represente meridianos y paralelos tendrá ciertas distorsiones, por lo que las imágenes de todos los objetos en la superficie terrestre estarán distorsionadas. La naturaleza y el alcance de las distorsiones dependen del método de construcción de la cuadrícula cartográfica a partir del cual se compila el mapa.

La visualización de la superficie de un elipsoide o esfera en un plano se llama proyección cartográfica. Existen diferentes tipos de proyecciones cartográficas. Cada uno de ellos corresponde a una cuadrícula cartográfica específica y sus distorsiones inherentes. En un tipo de proyección se distorsionan las dimensiones de las áreas, en otro, los ángulos, en el tercero, las áreas y los ángulos. Al mismo tiempo, en todas las proyecciones, sin excepción, las longitudes de las líneas están distorsionadas.

Las proyecciones cartográficas se clasifican según la naturaleza de la distorsión, el tipo de imagen de meridianos y paralelos (cuadrícula geográfica) y algunas otras características. Según la naturaleza de las distorsiones, se distinguen las siguientes proyecciones cartográficas:

Equiangular, preservando la igualdad de ángulos entre direcciones en el mapa y en la naturaleza. La Figura E.1 muestra un mapa mundial en el que la cuadrícula cartográfica conserva la propiedad de equiangularidad. El mapa conserva la similitud de las esquinas, pero los tamaños de las áreas están distorsionados. Por ejemplo, las áreas de Groenlandia y África en el mapa son casi iguales, pero en realidad el área de África es aproximadamente 15 veces el área de Groenlandia.

Fig.E.1 Mapa mundial en proyección conforme.

Igual en tamaño, preservando la proporcionalidad de las áreas en el mapa con las áreas correspondientes en el elipsoide terrestre. La figura E.2 muestra un mapa del mundo elaborado en una proyección de áreas iguales. Se conserva la proporcionalidad de todas las áreas, pero se distorsiona la similitud de las figuras, es decir, no hay equiangularidad. La perpendicularidad mutua de los meridianos y paralelos en dicho mapa se conserva solo a lo largo del meridiano medio.

Equidistante, manteniendo una escala constante en cualquier dirección;

Arbitrario, sin preservar ni la igualdad de ángulos, ni la proporcionalidad de áreas, ni la constancia de escala. El objetivo de utilizar proyecciones arbitrarias es una distribución más uniforme de las distorsiones en el mapa y la conveniencia de resolver algunos problemas prácticos.


Arroz. E. 2 Mapa mundial en proyección de áreas iguales.

Según el tipo de imagen, las cuadrículas de meridianos y paralelos de una proyección cartográfica se dividen en cónicas, cilíndricas, azimutales, etc. Además, dentro de cada uno de estos grupos puede haber proyecciones de diferente naturaleza de distorsión (conformes, de igual área , etc.). La esencia geométrica de las proyecciones cónicas y cilíndricas radica en el hecho de que sobre la superficie lateral de un cono o cilindro se proyecta una cuadrícula de meridianos y paralelos, con el posterior despliegue de estas superficies en un plano. La esencia geométrica de las proyecciones azimutales radica en el hecho de que una cuadrícula de meridianos y paralelos se proyecta sobre un plano tangente a la bola en uno de los polos o secante a lo largo de algún paralelo. La proyección cartográfica más adecuada en cuanto a la naturaleza, magnitud y distribución de las distorsiones para un mapa en particular se selecciona en función del propósito, el contenido del mapa, así como el tamaño, la configuración y la ubicación geográfica del territorio cartografiado. Gracias a la cuadrícula cartográfica, todas las distorsiones, por grandes que sean, no afectan por sí solas la precisión de la determinación de la posición geográfica (coordenadas) de los objetos representados en el mapa. Al mismo tiempo, la cuadrícula cartográfica, al ser una expresión gráfica de la proyección, permite tener en cuenta la naturaleza, magnitud y distribución de las distorsiones al realizar mediciones en el mapa. Por tanto, cualquier mapa geográfico es una imagen determinada matemáticamente de la superficie terrestre.

Parcelas subsidiarias personales del Okrug autónomo de Aginsky Buryat para 2005 - 2010”, que fue preparado en una versión borrador. 4. Las principales direcciones para mejorar las actividades de los órganos gubernamentales en el apoyo a las parcelas subsidiarias personales de la población rural en el Okrug autónomo de Aginsky Buryat 4.1 Problemas y prioridades para el desarrollo de las parcelas subsidiarias personales en Aginsky...

El estudio de las familias ha llevado al desarrollo de métodos psicológicos, pedagógicos y sociológicos que profundizan y amplían las ideas sobre la familia moderna. CAPÍTULO 3. PROBLEMAS SOCIALES Y PERSPECTIVAS DEL TRABAJO SOCIAL CON FAMILIAS JÓVENES EN EL PUEBLO DE VORONOVKA 3.1 Características generales p. Voronovka, distrito de Shegarsky, región de Tomsk, el distrito de Shegarsky está situado en la parte sur de Tomsk...




Provisiones y apoyo a los niños; - actualmente en Rusia se ha desarrollado e implementado un mecanismo para financiar programas específicos de apoyo a la maternidad y la infancia. 2. Mecanismo financiero para la implementación de la política estatal de apoyo a la maternidad y la infancia 2.1 El procedimiento y las condiciones para el pago de las prestaciones sociales Hasta la fecha, Rusia ha desarrollado un sistema de prestaciones bastante desarrollado, ...

La información sobre la que operará el sistema de información se organiza en forma de una base de datos creada utilizando MySQL (Figura 16).

Figura 16 Diagrama de una base de datos creada usando MySQL

Formalización de cálculos (algoritmos de cálculo y resolución de problemas)

Para obtener la documentación de salida, los datos de entrada se convierten según un algoritmo específico.

Al calcular el costo de instalación de un techo tensado, debe completar el formulario "Costo", que contiene 3 campos y entrada de datos: ancho del techo, largo del techo y textura del material. Tras rellenar estos campos, el programa solicita de la base de datos MySQL datos sobre el coste del material con esta factura. El costo se calcula multiplicando el área del revestimiento del techo por el costo del material por 1 m2.

En el formulario “Gastos”, al hacer clic en el botón “Restos”, el módulo de software calcula la cantidad de material que queda en el almacén. Al completar dos campos en el formulario “Saldos”: la fecha de recepción de material, la fecha de consumo de material, la consulta toma datos de la base de datos MySQL sobre la cantidad de recepción de material en un mes determinado y la cantidad de consumo en este mes. El material restante se calcula por la diferencia entre la recepción y el consumo de material durante un período de tiempo específico.

Diagrama de bloques del uso del complejo de programas (árbol de diálogo)

El menú del sistema es la principal forma de diálogo en los sistemas de procesamiento de datos aplicados y contiene comandos diseñados para realizar tareas específicas.

La aplicación desarrollada cuenta con un menú intuitivo. Para trabajar con tablas de bases de datos, el módulo IS “Enterprise Management” consta de:


El desarrollo de un diagrama de bloques de un programa (arquitectura) es una de las etapas más importantes en el proceso de desarrollo de software por las siguientes razones:

  • la elección incorrecta de la arquitectura conlleva el riesgo de que todo el proyecto fracase en el futuro;

  • esta etapa es básica para todo el proceso de desarrollo;

  • una arquitectura bien pensada facilita la modificación del producto de software si cambian los requisitos.
La arquitectura se entiende como un conjunto de componentes del programa, así como las conexiones y métodos para organizar el intercambio de información entre ellos. La primera tarea que debe resolverse al desarrollar un diagrama estructural de un sistema es la tarea de identificar sus componentes.

Con base en el análisis de los requisitos del sistema, se determina un conjunto de todas las funciones que el programa debe admitir. A continuación, las funciones obtenidas se combinan en grupos lógicamente interconectados. Cada uno de estos grupos puede convertirse en uno de los componentes del sistema de software. Debe estar preparado para el hecho de que la primera versión del conjunto de componentes no estará completa. Durante el proceso de análisis de características y en las primeras etapas del diseño arquitectónico, se pueden identificar características adicionales que deben incluirse en el programa que se está desarrollando. En su mayor parte, estas funciones serán necesarias para llevar a cabo procesos tecnológicos para mantener el sistema en un estado intacto y operativo. Es bastante natural suponer que estas características funcionales no pueden ser conocidas por el cliente del sistema de software ni por los desarrolladores en las primeras etapas de desarrollo.

En primer lugar, la arquitectura del programa debe incluir una descripción general del sistema. Sin tal descripción, es bastante difícil crear una imagen coherente a partir de muchos pequeños detalles o al menos una docena de clases separadas. La arquitectura debe incluir evidencia de que se consideraron opciones alternativas durante su desarrollo y justificar la elección de la organización del sistema final.

La arquitectura debe definir claramente las responsabilidades de cada componente. Un componente debe tener un área de responsabilidad y saber lo menos posible sobre las áreas de responsabilidad de otros componentes. Al minimizar la cantidad de información que los componentes conocen sobre otros componentes, puede localizar fácilmente la información de diseño de la aplicación en componentes individuales.

La arquitectura debe definir claramente las reglas de comunicación entre los componentes del programa y describir qué otros componentes un componente determinado puede usar directamente, cuáles indirectamente y cuáles no debe usar en absoluto.

La interfaz de usuario suele diseñarse durante la fase de requisitos. Si este no es el caso, se deberá determinar durante la fase de diseño de la arquitectura. La arquitectura debe describir los elementos principales del formato de la página web, la interfaz gráfica (GUI), etc. La usabilidad de la interfaz puede determinar en última instancia la popularidad o el fracaso de un programa.

La arquitectura del programa es modular para que la interfaz gráfica se pueda cambiar sin afectar la lógica central del programa.

El programa de procesamiento de cuestionarios de encuestas a estudiantes se puede dividir en dos partes con diferentes funciones y niveles de acceso para los usuarios:


  • sistema de encuestas estudiantiles;

  • sistema de procesamiento de resultados de encuestas;

  • sistema de control.
Todas las piezas están vinculadas en un único programa mediante una base de datos común.



Figura 2.1. - Estructura del sistema


El sistema de encuestas contiene las siguientes funciones:

  • emitir una pregunta del cuestionario;

  • verificación automática del tipo y exactitud de los datos ingresados;

  • guardar datos en una base de datos.
El sistema de procesamiento de resultados de encuestas le permite:

  • mostrar o imprimir informes de encuestas;

  • ver información sobre la encuesta de un estudiante específico;

  • comparar los resultados de encuestas actuales y anteriores con las mismas preguntas.
El sistema de control permite:

  • controlar la realización de la encuesta;

  • administrar datos: agregar, eliminar y cambiar;
A su vez, cada uno de los sistemas se puede dividir en dos subsistemas en función del entorno en el que se ejecutan:

  • parte del servidor, escrita en el lenguaje de programación PHP y ejecutada en el servidor;

  • la parte del cliente, escrita en el lenguaje de marcado HTML y el lenguaje de programación JavaScript utilizando la biblioteca jQuery y ejecutada en el navegador del usuario.
CON
La parte del servidor del programa en su estructura corresponde a la arquitectura MVC (Model-View-Controller) o modelo-view-controller. MVC es una arquitectura de software en la que el modelo de datos de la aplicación, la interfaz de usuario y la lógica de control se separan en tres componentes separados, de modo que la modificación de un componente tenga un impacto mínimo en los demás.
Figura 2.2. – Arquitectura Modelo-Vista-Controlador
Este enfoque le permite separar los datos, la presentación y el procesamiento de las acciones del usuario en tres componentes separados.

  • Modelo(Modelo) - un módulo responsable de calcular directamente algo en función de los datos recibidos del usuario. El resultado obtenido por este módulo debe pasarse al controlador, y no debe contener nada relacionado con salida directa (es decir, debe presentarse en el formato interno del sistema). El objetivo principal es hacer que el modelo sea completamente independiente de las otras partes y no sepa casi nada sobre su existencia, lo que permitiría cambiar tanto el controlador como la vista del modelo sin tocar el modelo en sí, e incluso permitiría el funcionamiento de varias instancias de vistas y controladores con el mismo modelo al mismo tiempo. Como consecuencia, bajo ninguna circunstancia un modelo puede contener referencias a objetos de vista o controlador.

  • Vista- módulo de salida de información. Las responsabilidades de la vista incluyen mostrar los datos recibidos del modelo. Normalmente, la vista tiene libre acceso al modelo y puede tomar datos de él, pero este es un acceso de solo lectura; la vista tiene prohibido cambiar algo en el modelo o incluso simplemente llamar a métodos que conduzcan a cambios en su estado interno. Para interactuar con un controlador, una vista generalmente implementa una interfaz conocida por el controlador, lo que permite cambiar las vistas de forma independiente y tener múltiples vistas por controlador.

  • Controlador- módulo de control de entrada y salida de datos. Las tareas del controlador incluyen responder a eventos externos y cambiar el modelo y/o vista de acuerdo con la lógica incorporada en él. Un controlador puede trabajar con varias vistas, dependiendo de la situación, interactuando con ellas a través de una determinada interfaz (preconocida) que implementan estas vistas. Un matiz importante: en la versión clásica de MVC, el controlador no transfiere datos del modelo a la vista.

    El controlador recibe datos del usuario y los pasa al modelo. Además, recibe mensajes del modelo y los pasa a la vista. Es importante tener en cuenta que tanto la vista como el controlador dependen del modelo. Sin embargo, el modelo no depende ni del controlador ni del comportamiento. Ésta es una de las principales ventajas de dicha división. Le permite construir un modelo independiente de la representación visual, así como crear varias representaciones diferentes para un modelo.
Las ventajas que presenta la arquitectura MVC sobre el modelo tradicional:

  • transparencia del sistema;

  • punto único de entrada al sistema;

  • reutilización de código;;

  • rápido desarrollo;

  • disponibilidad de soluciones listas para usar;

  • facilidad de apoyo;

  • fácil de hacer cambios.
Así, el uso de la arquitectura MVC proporciona ventajas tangibles en el diseño y desarrollo de un programa de procesamiento de cuestionarios para estudiantes del departamento, lo que tiene un efecto positivo tanto en la velocidad del desarrollo como en la calidad del resultado final.

2.Desarrollo de la estructura de la base de datos del programa.

La organización de la estructura de la base de datos se forma con base en las siguientes consideraciones:

  • adecuación al objeto descrito - a nivel de modelo conceptual y lógico;

  • facilidad de uso para contabilidad y análisis de datos, al nivel del llamado modelo físico.
Según el modelo de presentación de datos, los principales son los modelos jerárquico, de red y relacional, respectivamente, para trabajar con cada una de las bases de datos anteriores utilizan su propio DBMS.

En este caso, el modelo de datos relacional es el más adecuado, ya que toda la información se puede presentar fácilmente en forma de tablas. El modelo de datos relacionales es un modelo de datos lógico que describe el aspecto estructural, el aspecto de integridad y el aspecto de procesamiento de datos de las bases de datos relacionales.

Aspecto estructural- Los datos en una base de datos son un conjunto de relaciones.

Aspecto de integridad- las relaciones cumplen ciertas condiciones de integridad.

Aspecto de procesamiento- Se admiten operadores de manipulación de relaciones.

Un aspecto importante del diseño de una base de datos es la normalización: el proceso de convertir una base de datos a un formato que corresponda a los formatos normales. La normalización ayuda a proteger su base de datos de problemas lógicos y estructurales llamados anomalías de datos. Por ejemplo, cuando hay varios registros idénticos en una tabla, existe el riesgo de que se viole la integridad de los datos al actualizar la tabla. Una tabla que ha sido normalizada es menos susceptible a tales problemas, porque su estructura implica definir relaciones entre datos, lo que elimina la necesidad de registros con información duplicada.

Como DBMS se eligió el sistema gratuito de gestión de bases de datos MySQL. La flexibilidad del DBMS MySQL está garantizada por la compatibilidad con una gran cantidad de tipos de tablas: los usuarios pueden elegir tanto tablas MyISAM que admiten búsqueda de texto completo como tablas InnoDB que admiten transacciones a nivel de registro individual. Gracias a la arquitectura abierta y la licencia GPL (Licencia pública general GNU, una licencia de software libre cuyo objetivo es otorgar al usuario los derechos para copiar, modificar y distribuir programas, así como garantizar que los usuarios de todos los programas derivados reciban los derechos anteriores), el DBMS MySQL constantemente aparecen nuevos tipos de tablas.

Una ventaja importante del DBMS MySQL es que ha sido adaptado a una gran cantidad de plataformas, como AIX, FreeBSD, HP-UX, GNU/Linux, Mac OS X, NetBSD, OpenBSD, Solaris y Windows. Tenga en cuenta que MySQL AB ofrece descarga gratuita no sólo de los códigos fuente del DBMS, sino también de módulos ejecutables ya preparados, compilados y optimizados para sistemas operativos específicos.

MySQL tiene una interfaz de programación de aplicaciones (API) para lenguajes como Delphi, C, C++, Java, Perl, PHP, Python y Ruby, bibliotecas para lenguajes de plataforma .NET, y también brinda soporte para ODBC a través del controlador ODBC (Open DataBase Connectivity es una interfaz de programa para acceder a bases de datos) MyODBC.

Se eligió el tipo MyISAM como tipo de tabla principal. Las tablas MyISAM están idealmente optimizadas para su uso junto con aplicaciones web donde predominan las consultas de lectura. Tablas como MyISAM muestran muy buenos resultados de rendimiento en consultas SELECT. Esto se debe en gran medida a la falta de soporte para transacciones y claves externas. Sin embargo, al modificar y agregar registros, toda la tabla se bloquea brevemente, lo que puede provocar retrasos graves en condiciones de carga pesada. Pero en el caso de un programa para analizar cuestionarios de encuestas, esto no es un problema grave, ya que no está prevista una carga elevada en el sistema.

Otra ventaja de tablas como MyISAM es la independencia de la plataforma. Los archivos de tabla se pueden mover entre computadoras de diferentes arquitecturas y diferentes sistemas operativos sin ninguna conversión.

Las tablas MyISAM pueden tener registros fijos, dinámicos o comprimidos. La elección entre formato fijo y dinámico viene dictada por las definiciones de las columnas.

La estructura de la base de datos se muestra en la Figura 2.4.

R

Figura 2.3. – Estructura de la base de datos


Las relaciones entre tablas organizadas en la base de datos le permiten realizar eliminaciones y actualizaciones de datos en cascada. El uso de tablas de enlaces permitió reducir al mínimo la redundancia de datos.

La tabla it_students contiene datos sobre los estudiantes que completaron la encuesta.

Tabla 2.1 – Tabla de datos “it_students”


Campo

Tipo

Longitud

Descripción

identificación

Numérico

11

Índice

número

Numérico

11

Número de identificación del estudiante

nombre

Simbólico

100

Nombre

segundo nombre

Simbólico

100

Apellido

apellido

Simbólico

100

Apellido

nacimiento

fecha

-

Fecha de nacimiento

año_postupl

año

-

Año de admisión

DIRECCIÓN

Simbólico

500

DIRECCIÓN

teléfono_h

Simbólico

15

Teléfono de casa

teléfono_m

Simbólico

15

Teléfono móvil

correo

Simbólico

250

Dirección de correo electrónico

icq

Numérico

10

Número de ICQ

La tabla it_answers_var contiene opciones para responder preguntas de la encuesta.

Tabla 2.2 – Tabla de datos “it_answers_var”

La tabla it_questions contiene preguntas de la encuesta.

Tabla 2.3 – Tabla de datos “it_questions”

La tabla it_tests_cfg vincula las preguntas de la encuesta a un cuestionario específico.

Tabla 2.4 – Tabla de datos “it_tests_cfg”

La tabla it_tests contiene datos sobre todos los cuestionarios y las fechas de las encuestas.

Tabla 2.5 – Tabla de datos “it_tests”

La tabla it_text_answers contiene datos sobre las respuestas de los estudiantes ingresadas manualmente.

Tabla 2.6 – Tabla de datos “it_text_answers”

La tabla it_students_answers contiene datos sobre las respuestas de los estudiantes.

Tabla 2.6 – Tabla de datos “it_students_answers”

3.Desarrollo de un modelo de flujo de información de base de datos.

Dado que el programa para analizar los cuestionarios de las encuestas de los estudiantes se basa en el principio MVC, los flujos de información se pueden representar de la siguiente manera. Cuando se recibe una solicitud de un usuario que envía un navegador al servidor web, el controlador, siguiendo algoritmos programados, califica la solicitud recibida, la modifica y la transmite al modelo. El modelo, que es el enlace entre el controlador y el DBMS, interpreta la solicitud y realiza la llamada apropiada al DBMS MySQL, devolviendo los resultados al controlador.

Es de destacar que para el controlador permanece oculto con qué tipo o implementación de DBMS trabaja, todas las llamadas a la base de datos ocurren a través del modelo, cuya tarea principal es abstraer el trabajo con datos. En lugar de una base de datos, incluso puede utilizar un archivo de texto o XML; esto no le importará al controlador. En paralelo, el controlador envía una solicitud al componente de vista, que compone la plantilla final y la devuelve al controlador. También es posible que el intercambio de datos se produzca directamente entre el modelo y la vista. El controlador combina la selección de la base de datos y la plantilla de vista y la pasa al navegador del usuario.



Figura 2.4. - Esquema de flujos de información de la arquitectura MVC.

4.Desarrollo de soporte algorítmico

El soporte algorítmico para todos los componentes del programa tiene diferencias significativas, ya que tienen diferentes funcionalidades.

Cuando un estudiante inicia sesión por primera vez en el sistema de encuestas, se crea una nueva ID de sesión. Una sesión, o sesión, permite al servidor identificar a un usuario utilizando un número especial que es único y se asigna cuando el usuario interactúa con el servidor. Además, las sesiones le permiten vincular variables a ese usuario y almacenar esas variables en el servidor. En otras palabras, las sesiones le permiten hacer variables globales para todos los componentes del programa. De este modo, el sistema de encuestas puede determinar claramente de qué usuario que trabaja con el programa proceden determinados datos.

D
A continuación, el estudiante responde una serie de preguntas de la encuesta y solo después de completarla, todos los datos se guardan en la base de datos. El algoritmo para operar el sistema de encuesta se muestra en la Figura 2.5.

Figura 2.5. – Algoritmo para el funcionamiento del sistema de encuestas.

Uno de los puntos de seguridad más importantes para una aplicación web es verificar todos los datos entrantes, por lo que siempre se deben verificar los datos ingresados ​​por el usuario en los formularios de búsqueda, al completar los campos de registro, etc., para detectar la presencia de datos "peligrosos". Esto podría ser código JavaScript malicioso, comandos PHP o PERL o (lo más peligroso) comandos al servidor.

Siempre debes recordar que absolutamente cualquier usuario es un peligro para una aplicación web desprotegida, por lo que siempre vale la pena verificar las solicitudes y variables provenientes del usuario.


  • análisis de variables POST y GET y matrices superglobales;

  • separación de variables;

  • Filtrar variables de cadena.
Es imperativo verificar las variables entrantes desde el comienzo del programa, evitando que datos no verificados y potencialmente peligrosos de los usuarios trabajen con funciones y consultas a la base de datos. Así, todas las funciones necesarias para la protección estarán ubicadas en un lugar o incluso archivo específico. En el caso del programa para procesar cuestionarios de encuestas a estudiantes, el filtrado de datos se realiza a nivel del framework CodeIgniter en modo automático, desde la línea $config["global_xss_filtering"] = VERDADERO.

Absolutamente cada variable de un programa debe tener su propio tipo en la etapa de diseño, ya sea un número o una cadena. Este problema es especialmente grave para los lenguajes de programación con escritura débil o ausente, que incluyen PHP y JavaScript. Por lo tanto, en las áreas más críticas del programa, se verifica el cumplimiento del tipo de variables.

Las variables de texto son especialmente peligrosas, por ejemplo, un campo para ingresar una respuesta a una pregunta de encuesta. Simplemente es necesario comprobarlos en busca de códigos maliciosos. Para eliminar el peligro, algunos elementos se eliminan del texto o se reemplazan con otros símbolos. El algoritmo para procesar datos entrantes en el marco CodeIgniter se muestra en la Figura 2.6.

R
Figura 2.6. – Algoritmo para procesar datos entrantes en el marco CodeIgniter

2.5 Desarrollo de la interfaz del programa.

Una de las cuestiones más importantes en el desarrollo de un sistema de software es el desarrollo de una interfaz de usuario. Cualquier sistema que utilice medios técnicos en su funcionamiento pertenece a la clase de sistemas “hombre-máquina”. Sería correcto proponer los siguientes requisitos para la interfaz de los sistemas de prueba:


  • la interfaz debe ser clara, simple y fácil de usar

  • el usuario no debe distraerse con acciones no relacionadas con la tarea que está realizando.
La interfaz de usuario está realizada en lenguaje de marcado HTML utilizando JavaScript y la biblioteca jQuery, lo que hizo posible crear una interfaz de usuario interactiva para el programa.

A

Por ejemplo, un campo de texto para ingresar una fecha usando jQuery se convirtió en un calendario compacto que tiene la función de verificar automáticamente la exactitud de la fecha ingresada (ver Figura 2.7).

Figura 2.7. – Interfaz de calendario para seleccionar la fecha de nacimiento
La interfaz de usuario disponible para los estudiantes que realizan la encuesta es algo minimalista. Como resultado, los estudiantes no se distraen con hermosos gráficos y se concentran en pensar en la respuesta a la pregunta. Interfaz con uno de los

encuestas se muestra en la Figura 2.8.

Figura 2.8. – Interfaz para responder una pregunta de encuesta


Si por alguna razón un estudiante no selecciona ninguna de las respuestas a una pregunta, pero intenta pasar a la siguiente pregunta, el sistema de encuesta mostrará automáticamente un mensaje de error y le ofrecerá responder la pregunta actual nuevamente (consulte la Figura 2.9).

Figura 2.9. - Mensaje de error de entrada de datos



El sistema para procesar los resultados de la encuesta puede mostrar los resultados en varios modos: texto, gráfico e impresión. La interfaz para mostrar los resultados de la encuesta en forma gráfica se muestra en la Figura 2.10.

Figura 2.10. – Interfaz para mostrar los resultados de la encuesta.



Un navegador, que es un cliente con respecto al servidor y le envía una solicitud para procesar una página web, puede ser una implementación de los llamados clientes ligeros. El navegador es capaz de mostrar páginas web y, por regla general, forma parte del sistema operativo, y las funciones de actualización y mantenimiento recaen en el proveedor del sistema operativo. La lógica de la aplicación se centra en el servidor y la función del navegador es principalmente mostrar información descargada a través de la red desde el servidor y transmitir datos del usuario. Una ventaja de este enfoque es el hecho de que los clientes son independientes del sistema operativo específico del usuario y, por tanto, las aplicaciones web son servicios multiplataforma.

Una ventaja significativa de crear aplicaciones web que admitan la funcionalidad estándar del navegador es que la funcionalidad debe ejecutarse independientemente del sistema operativo del cliente. En lugar de escribir diferentes versiones para Microsoft Windows, Mac OS X, GNU/Linux y otros sistemas operativos, la aplicación se crea una vez y se implementa en cualquier plataforma.

3. Apartado tecnológico

3.1 Tecnología de desarrollo de programas

3.1.1 Conceptos básicos del servidor web

Cómo funciona un servidor web: Se sabe que los servidores web almacenan información en forma de archivos de texto, también llamados páginas. Además de texto, dichas páginas pueden contener enlaces a otras páginas (ubicadas en el mismo servidor o en uno diferente), enlaces a imágenes gráficas, información de audio y video, diversos objetos de entrada de datos (campos, botones, formularios, etc.) y así como otros objetos y programas ejecutados en el servidor. De hecho, las páginas representan una especie de vínculo de conexión entre objetos de varios tipos. Están diseñados utilizando un lenguaje de marcado de hipertexto especial, lenguaje de marcado de hipertexto o HTML para abreviar. Para acceder a la información ubicada en los servidores web, los usuarios utilizan programas cliente especiales: navegadores. Actualmente existen decenas de navegadores diferentes, pero sólo unos pocos de ellos son los más populares actualmente:


  • Microsoft Internet Explorer;

  • Ópera;

  • Mozilla Firefox

  • Google Chrome.
Cada página del servidor web tiene su propia dirección de recursos universal: el Localizador universal de recursos (URL). Para acceder a una página en particular, el usuario debe proporcionar su URL al navegador. Como regla general, cualquier servidor web tiene una página principal que contiene enlaces a todas las demás páginas de este servidor. Por lo tanto, la visualización del contenido de un servidor web suele comenzar con su página principal (índice).

3.1.2 Servidores web pasivos y activos

Hay servidores web pasivos y activos. Si las páginas del servidor contienen solo texto estático e información multimedia, así como enlaces de hipertexto a otras páginas, entonces el servidor se denomina pasivo. Cuando las páginas del servidor se comportan de manera similar a las ventanas de aplicaciones interactivas ordinarias, entablando un diálogo con el usuario, estamos ante un servidor activo.


3.1.3 Enfoque orientado a objetos

Actualmente, el uso de un enfoque orientado a objetos al desarrollar aplicaciones web se está volviendo cada vez más popular. Y aunque las ventajas de este enfoque no son tan obvias como, por ejemplo, en lenguajes de programación como C++ o Java, un número cada vez mayor de bibliotecas y programas de libre distribución escritos en el lenguaje de programación PHP se están moviendo hacia una interfaz orientada a objetos. . Al hacer esto, obligan a los desarrolladores que los utilizan a recurrir a las capacidades orientadas a objetos de PHP. La introducción de soporte total para el modelo orientado a objetos en la quinta versión del intérprete PHP alimenta aún más el interés en esta metodología.

A menudo, utilizar un enfoque orientado a objetos para ubicar y no colocar hará que un proyecto sea exitoso. Programar como principiante en el estilo de programación orientada a objetos a menudo se siente como navegar por un campo minado: si no sabes dónde están las minas, es imposible llegar al final del proyecto. La programación orientada a objetos en sí misma no es una panacea: es una tecnología funcional que le permite:


  • aumentar el porcentaje de código fuente reutilizado;

  • al programar, opere con conceptos y objetos del mundo real (estudiante, grupo, curso, etc.), en lugar de términos informáticos de bajo nivel (archivo, línea, etc.), lo que le permite crear proyectos más grandes con menos errores y más eficiente en poco tiempo.
El desarrollo de las tecnologías de programación, como señaló Dijkstra, está dictado por la tesis de "Divide y vencerás". Cualquier tecnología exitosa supone que cuanto más corto sea el código fuente de un programa, más fácil será crearlo, depurarlo y mantenerlo, y un programa simple es mucho menos propenso a errores que uno complejo.

En los albores de la era de las computadoras, un programa era un único hilo que procesaba una serie de datos. Con el tiempo, la complejidad de los programas y los requisitos que se les imponen aumentaron, y esta forma de organizar los datos resultó inaceptable. Se propuso un enfoque estructural, en el que se podía acceder a la matriz de datos desde cualquier parte del programa, pero el flujo principal del programa se dividía en varios procedimientos. Un pequeño procedimiento separado, incluso si utiliza datos comunes, es mucho más fácil de desarrollar que una gran cantidad de código fuente.

Cada procedimiento tiene una variable local, cuya vida útil está determinada por la duración del procedimiento. Algunos procedimientos pueden llamar a otros, pero la matriz de datos del programa sigue siendo común y accesible para todos los procedimientos. Este enfoque se utiliza en la programación procedimental en PHP y le permite crear grandes complejos de software. Pero el desarrollo, la depuración y el soporte de programas que operan con grandes volúmenes de datos (como una base de datos departamental) sigue siendo complejo y requiere habilidades y experiencia significativas.

La respuesta a la creciente complejidad fue el surgimiento de un enfoque de programación orientado a objetos: un programa se divide en varias matrices de datos, cada una de las cuales tiene sus propios procedimientos, así como procedimientos que interactúan con otras matrices de datos.

Como resultado, una tarea compleja se divide en una serie de subtareas más simples y los desarrolladores obtienen una forma más flexible de administrar el proyecto: editar un enorme bloque monolítico de código es mucho más difícil que una colección de bloques pequeños y poco conectados.

Independientemente de la conexión con un lenguaje de programación, el enfoque orientado a objetos tiene una serie de principios generales, a saber:


  • la capacidad de crear tipos de datos abstractos, lo que permite, junto con tipos de datos predefinidos (como enteros, cadenas, etc.), introducir sus propios tipos de datos (clases) y declarar "variables" de dichos tipos de datos (objetos). Al crear sus propios tipos de datos, el programador opera no con términos de máquina (variable, función), sino con objetos del mundo real, elevando así a un nuevo nivel de abstracción;

  • encapsulación, que limita la interacción del usuario con tipos de datos abstractos únicamente a su interfaz y oculta la implementación interna del objeto, evitando la influencia en su estado interno. La memoria humana es limitada y no puede contener todos los detalles de un gran proyecto, mientras que el uso de la encapsulación le permite diseñar un objeto y usarlo sin preocuparse por la implementación interna y recurrir solo a una pequeña cantidad de métodos de interfaz;

  • herencia, que le permite desarrollar un tipo de datos abstracto existente: una clase, creando una nueva clase basada en ella. En este caso, la nueva clase obtiene automáticamente las capacidades de un tipo de datos abstracto existente. A menudo, los tipos de datos abstractos son demasiado complejos, por lo que recurren a su desarrollo secuencial, construyendo una jerarquía de clases de lo general a lo específico;

  • polimorfismo, que permite la construcción de cadenas enteras y árboles ramificados que heredan tipos de datos abstractos (clases) entre sí. En este caso, todo el conjunto de clases tendrá varios métodos con los mismos nombres: se garantiza que cualquiera de las clases en este árbol tendrá un método con el mismo nombre. Este principio ayuda a procesar automáticamente conjuntos de datos de varios tipos.

3.1.4 Características del marco CodeIgniter

El marco CodeIgniter utilizado está escrito utilizando un enfoque orientado a objetos. Todas las clases de controladores, vistas y modelos introducidos por el programador heredan las clases originales introducidas en el propio marco. Esto hace posible escribir código fuente más pequeño, ya que todas las funciones básicas necesarias están disponibles inmediatamente.

Además de las clases, vistas y modelos de controlador disponibles para el programador, el marco CodeIgniter también tiene complementos y funciones auxiliares disponibles para el programador. Los ayudantes, como sugiere el nombre, están diseñados para ayudar a realizar alguna función menor. Por ejemplo, existen ayudas para crear formularios web, descargar archivos o trabajar con sesiones. A diferencia de todos los demás elementos principales del marco, los ayudantes son conjuntos de funciones elementales, escritas incluso sin utilizar un enfoque orientado a objetos. Cada función realiza una tarea pequeña y estrictamente limitada. Sin embargo, el conjunto es bastante grande y esa "bagatela" resulta muy útil en el trabajo.

Los complementos son casi lo mismo que los ayudantes, excepto por la principal diferencia: no son un conjunto de funciones, son una función. Además, puede prestar atención al hecho de que los asistentes son más una parte del núcleo del sistema, mientras que los complementos son algo externo, desarrollado por programadores externos. En realidad, así es como resulta. Incluso los complementos que vienen con el kit principal están escritos por usuarios de CodeIgniter de la comunidad.


3.1.5 IDE de Eclipse

Al desarrollar un programa para procesar cuestionarios de encuestas para estudiantes del departamento, también utilizamos una herramienta de programación tan importante y útil como un entorno de desarrollo integrado (IDE - Integrated Development Environment), a saber, Eclipse. Eclipse es un marco gratuito para desarrollar aplicaciones modulares multiplataforma. Desarrollado y mantenido por la Fundación Eclipse.

Las aplicaciones más conocidas basadas en la plataforma Eclipse son los distintos "Eclipse IDE" para el desarrollo de software en una variedad de lenguajes (por ejemplo, el más popular "Java IDE", que fue compatible inicialmente). En este caso se utilizaron extensiones para la programación en los lenguajes de programación PHP (módulo PDT) y JavaScript (módulo JSEclipse), así como maquetación mediante el lenguaje de marcado HTML.

3.2 Tecnología de prueba de programas

La prueba de programas es el proceso de identificar errores en el software. Actualmente existen muchos métodos para probar programas, pero no garantizan identificar y eliminar todos los defectos y errores, ni establecer el correcto funcionamiento del programa analizado. Por lo tanto, todos los métodos de prueba existentes operan dentro del marco de un proceso de verificación formal del software que se está investigando o desarrollando.

Este proceso de verificación formal puede demostrar que no hay errores sólo en términos del método utilizado, pero no garantiza su ausencia total.

Una prueba es información que consta de datos iniciales especialmente seleccionados para el programa que se está depurando y los resultados de referencia correspondientes utilizados para monitorear el funcionamiento correcto del programa.

El control del programa se reduce a seleccionar pruebas cuya obtención de resultados correctos garantizaría el funcionamiento correcto del programa para el resto de los datos de entrada de todo el rango de valores permitidos.

El sistema fue probado utilizando varios métodos:


  • Pruebas de estrés;

  • depuración manual y seguimiento de programas utilizando la extensión XDebug;

  • Pruebas unitarias con phpUnit.
Al probar programas escritos en PHP, debe verificar si los datos que se muestran en la pantalla del usuario cumplen con las expectativas. Son posibles los siguientes problemas principales:

  • no se muestra nada en la pantalla o se muestra un error del sistema con el código correspondiente (error de autorización, falla del servidor web, etc.);

  • se produjo una falla al trabajar con la base de datos y se genera un informe de error;

  • falla del servidor debido a una alta carga en la aplicación o base de datos;

  • Se ha producido un error de ejecución del programa, lo que ha provocado que se muestren datos incorrectos o un informe de errores.

3.2.1 Prueba de carga del programa

Una de las pruebas más importantes es la prueba de carga, que permite encontrar cuellos de botella en el código fuente o en las llamadas a la base de datos.

Existen muchas herramientas que simplifican la tarea de aumentar la cantidad de solicitudes y llamar a múltiples operaciones en el servidor. La prueba de límite de carga debe diseñarse para replicar con precisión la carga de trabajo esperada de la aplicación.

Para las pruebas de carga del programa para procesar cuestionarios de encuestas para estudiantes del departamento, se utilizó el programa curl-loader. Curl-loader es una utilidad de prueba de rendimiento de aplicaciones web de distribución gratuita escrita en el lenguaje de programación C. Es capaz de simular cientos e incluso miles de llamadas al servidor a través de protocolos HTTP y HTTPS y utiliza la biblioteca libcurl, que le permite probar fácilmente aplicaciones que requieren autorización. Y la compatibilidad con el protocolo HTTPS le permite utilizar la utilidad curl-loader para realizar pruebas de carga de aplicaciones web que funcionan a través de mecanismos de transporte cifrados SSL (Secure Sockets Layer) y TLS (Transport Layer Security).

3.2.2 Depuración utilizando herramientas PHP integradas

El comportamiento estándar de una aplicación escrita en PHP cuando se produce un error en el código depende en gran medida de los ajustes de configuración. Como regla general, se configuran en el archivo de configuración php.ini:

  • el parámetro display_errors, activado o desactivado, especifica si los mensajes de error deben mostrarse al usuario o dejarse ocultos;

  • el parámetro log_errors, activado o desactivado, hace que el intérprete PHP escriba mensajes en el archivo de registro de eventos;

  • La directiva error_reporting determina en qué casos se debe generar una advertencia y en qué casos se puede ignorar.
Al desarrollar y depurar un programa en un servidor de prueba, debe habilitar el parámetro display_errors y deshabilitar el parámetro log_errors. Esto permite al programador reaccionar lo más rápido posible ante la aparición de una situación de error, minimizando el número de "cambios entre ventanas".

En una versión funcional del programa, por el contrario, debe deshabilitar el parámetro display_errors, pero habilitar log_errors. Por un lado, esto hará la vida más difícil a los atacantes que ya no podrán ver la información de depuración. Por otro lado, en una situación crítica, le ayudará a comprender qué sucedió exactamente y corregir el error, incluso si no es reproducible en el entorno de prueba.

En ambos casos, es conveniente configurar el parámetro error_reporting en el estado más detallado: E_ALL, lo que obliga a PHP a informar los errores más pequeños en el código.

3.2.3 Depurar un programa usando XDebug

Si bien el lenguaje de programación PHP se puede utilizar para crear secuencias de comandos de línea de comandos para tareas como la administración de sistemas y el procesamiento de datos tradicional, el poder del lenguaje es particularmente evidente en las aplicaciones web.

Dada la corta duración de las aplicaciones web y su diseño en capas (aplicación cliente, red, servidor web, código de aplicación y base de datos subyacente), puede resultar difícil detectar errores en el código fuente. Incluso si asumimos que todas las capas excepto el código PHP funcionan perfectamente, rastrear hasta un error del programa puede ser difícil, especialmente si la aplicación utiliza una gran cantidad de clases.

La expresión de eco de PHP y funciones como var_dump(), debug_zval_dump() y print_r() son herramientas de depuración comunes y muy populares que pueden ayudar a resolver varios problemas menores. Sin embargo, como herramientas de prueba y depuración, estas expresiones (e incluso herramientas más confiables, por ejemplo, el paquete PEAR Log) son de poca ayuda y no siempre.

Además, este tipo de depuración es un enfoque de fuerza bruta. Si falta la información necesaria, deberá rehacer el código fuente, repetir los pasos anteriores y comenzar a buscar el error nuevamente. Una estrategia mucho más eficaz es probar la aplicación mientras se está ejecutando. Puede catalogar parámetros de consulta, ver la pila de llamadas a procedimientos y averiguar el valor de cualquier variable u objeto. Puede interrumpir temporalmente la ejecución de la aplicación y recibir notificaciones de cambios en el valor de una variable

Esta exploración "en vivo" o interactiva la proporciona una aplicación especial llamada depurador. Un depurador ejecuta o se adjunta a un proceso para manipularlo y examinar su memoria. O, en el caso de lenguajes interpretados, el depurador puede interpretar directamente el código. Un depurador moderno típico puede indexar y ver el código fuente, mostrar estructuras de datos complejas en un formato legible y mostrar simultáneamente el estado del programa, la pila de llamadas, la salida del programa y los valores de todas las variables. Por ejemplo, es común que un depurador catalogue y muestre las propiedades y métodos de una clase.

En lugar de agregar manualmente varias funciones de salida de depuración, puede usar XDebug para crear un registro de seguimiento. El registro de seguimiento es una lista de llamadas a funciones y métodos de una clase durante la ejecución del programa. Su ventaja es que absolutamente todas las llamadas quedarán reflejadas en el registro.

El registro de seguimiento normalmente varía de una ejecución a otra porque depende de los datos entrantes, que varían de una solicitud a otra.

El seguimiento del registro le ayuda a comprender cómo se ejecuta un programa, pero es muy difícil visualizar todas las ramas posibles a menos que el programa sea muy simple. Es por esto que probar programas grandes es bastante difícil: hay demasiadas rutas de desarrollo diferentes y es necesario probar cada una de ellas.

La herramienta de depuración de aplicaciones XDebug, como su nombre indica, proporciona varias funcionalidades para mostrar el estado del programa y es una herramienta de investigación muy valiosa. Una vez instalado, XDebug interviene para evitar recursiones infinitas, agrega información de seguimiento de funciones y pilas a los mensajes de error, monitorea la asignación de memoria y realiza varias otras funciones. Xdebug también contiene un conjunto de funciones que se pueden agregar al código fuente para obtener datos de diagnóstico en tiempo de ejecución.

Los resultados del módulo XDebug se pueden ver utilizando el programa KCachegrind, que le permite visualizar los procesos que ocurren en el código fuente (ver Figura 3.1).

En resumen, XDebug es una herramienta pequeña pero muy útil para el desarrollador de PHP y debe instalarse en todos los intérpretes de PHP utilizados para el desarrollo. Pero no deberías usar XDebug en servidores de producción, ya que esto reducirá en gran medida el rendimiento.
R

Figura 2.1. – Interfaz del programa KCachegrind

3.2.4 Pruebas unitarias usando Unidad php

Las pruebas unitarias son un proceso de programación que le permite verificar la corrección de módulos individuales del código fuente de un programa. La idea es escribir pruebas de validación para cada función o método no trivial. Esto le permite comprobar rápidamente si el siguiente cambio de código ha provocado la aparición de errores en partes del programa ya escritas y probadas, y también facilita la detección y eliminación de dichos errores. El propósito de las pruebas unitarias es aislar partes individuales de un programa y mostrar que estas partes funcionan individualmente.

Al depurar y probar el programa para procesar cuestionarios de encuestas para estudiantes del departamento, se utilizó el sistema phpUnit, que permite realizar pruebas unitarias de aplicaciones web escritas en el lenguaje de programación PHP.

Para escribir un conjunto mínimo de pruebas usando phpUnit, necesita:


  • incluir la biblioteca PHPUnit.php;

  • crear una subclase de la clase base TestCase;

  • agréguele un número arbitrario de métodos de prueba cuyos nombres comiencen con "prueba". Se proporcionarán como entrada parámetros conocidos previamente y el resultado se comparará con el de referencia utilizando la familia de funciones Assert, heredada por la clase de prueba de la clase base TestCase;

  • cree la clase PHPUnit_TestSuite, pasándole el nombre de la clase con un conjunto de pruebas como parámetro;

  • Ejecute un conjunto de pruebas y verifique el resultado de la ejecución.

6 (?). Lista de material gráfico

6.1 Planteamiento del problema

6.2 Diagrama de bloques del programa


Un conjunto de programas diseñados para resolver problemas en una PC se llama software. La composición del software para PC se llama configuración de software. El software se puede dividir en tres categorías (Fig. 1):

Figura 1. Clasificación de software

    software del sistema (programas de uso general) que realizan diversas funciones auxiliares, como crear copias de información usada, proporcionar información de ayuda sobre la computadora, verificar la funcionalidad de los dispositivos informáticos, etc.

    software de aplicación que proporciona el trabajo necesario en una PC: editar documentos de texto, crear dibujos o imágenes, procesar matrices de información, etc.

    herramienta software (sistemas de programación) que asegura el desarrollo de nuevos programas informáticos en un lenguaje de programación.

Software del sistema es un conjunto de programas que proporcionan una gestión eficaz de los componentes del sistema informático, como procesador, RAM, dispositivos de entrada/salida, equipos de red, actuando como una "interfaz intermedia", de un lado de la cual está el hardware y del otro, aplicaciones de usuario. A diferencia del software de aplicación, el software del sistema no resuelve problemas específicos de la aplicación, solo asegura el funcionamiento de otros programas, gestiona los recursos de hardware del sistema informático, etc.

Estos programas de uso general no están asociados a una aplicación de PC específica y realizan funciones tradicionales: programación y gestión de tareas, gestión de E/S, etc. En otras palabras, los programas del sistema realizan diversas funciones auxiliares, por ejemplo, crear copias de la información usada, proporcionar información de ayuda sobre la computadora, verificar la funcionalidad de los dispositivos informáticos, etc. El software del sistema incluye:

    sistemas operativos (este programa se carga en la RAM cuando la computadora está encendida)

    programas de shell (proporcionan una forma más conveniente y visual de comunicarse con una computadora que usar la línea de comando de DOS, por ejemplo, Norton Commander)

    Los shells operativos son sistemas de interfaz que se utilizan para crear interfaces gráficas, multiprogramación, etc.

    Controladores (programas diseñados para controlar los puertos de dispositivos periféricos, generalmente cargados en la RAM cuando se inicia la computadora)

    utilidades (programas auxiliares o de utilidad que brindan al usuario una serie de servicios adicionales)

Los servicios públicos incluyen:

    administradores de archivos o administradores de archivos

    herramientas de compresión dinámica de datos (le permiten aumentar la cantidad de información en el disco debido a su compresión dinámica)

    herramientas de visualización y reproducción

    herramientas diagnosticas; Las herramientas de control le permiten verificar la configuración de la computadora y verificar la funcionalidad de los dispositivos informáticos, principalmente discos duros.

    Las herramientas de comunicación (programas de comunicación) están diseñadas para organizar el intercambio de información entre computadoras.

    Herramientas de seguridad informática (copia de seguridad, software antivirus).

Las utilidades son programas diseñados para resolver una gama limitada de tareas auxiliares.

A veces las utilidades se clasifican como software de servicio.

Las utilidades se utilizan para:

    Monitorear los indicadores de los sensores y el rendimiento del equipo: monitorear las temperaturas del procesador y del adaptador de video; leyendo INTELIGENTE unidades de disco duro;

    Gestionar los parámetros del equipo: limitar la velocidad máxima de rotación de la unidad de CD; cambiando la velocidad del ventilador.

    Indicadores de seguimiento: verificación de la integridad referencial; exactitud del registro de datos.

    Capacidades ampliadas: formatear y/o volver a particionar el disco mientras se guardan los datos, eliminándolos sin posibilidad de recuperación.

Tipos de utilidades:

Utilidades de disco

      Desfragmentadores

      Escaneo de disco: búsqueda de archivos y áreas de disco que se registraron incorrectamente o se dañaron de diversas maneras y su posterior eliminación para un uso eficiente del espacio en disco.

      Liberador de espacio en disco: eliminar archivos temporales, archivos innecesarios, vaciar la Papelera de reciclaje.

      La partición de disco es la división de un disco en discos lógicos, que pueden tener diferentes sistemas de archivos y ser percibidos por el sistema operativo como varios discos diferentes.

      Copia de seguridad: creación de copias de seguridad de discos completos y archivos individuales, así como restauración a partir de estas copias.

      Compresión de disco: compresión de información en discos para aumentar la capacidad de los discos duros.

      • Utilidades de registro

        Utilidades de monitoreo de equipos

        Pruebas de equipos

Figura 2. Lugar del software de código abierto en la estructura multinivel de una computadora

Cabe señalar que algunas de las utilidades están incluidas en el sistema operativo, mientras que la otra parte funciona de forma autónoma. La mayor parte del software general (del sistema) está incluido en el sistema operativo (Fig. 2). Parte del software general está incluido en la propia computadora (algunos de los programas del sistema operativo y las pruebas de control están escritos en ROM o PROM instalados en la placa base). Algunos de los programas comunes son programas independientes y se suministran por separado.

          Software de la aplicacion. Los programas de aplicación se pueden utilizar de forma independiente o como parte de sistemas o paquetes de software. Software de aplicación: programas que apoyan directamente la realización del trabajo necesario en una PC: editar documentos de texto, crear dibujos o imágenes, crear hojas de cálculo, etc. Los paquetes de software de aplicación son un sistema de programas que, según su ámbito de aplicación, se dividen en Orientado a problemas, paquetes generales de citas y paquetes integrados. Los paquetes integrados modernos contienen hasta cinco componentes funcionales: procesador de hojas de cálculo y pruebas, DBMS, editor gráfico y herramientas de telecomunicaciones. El software de aplicación, por ejemplo, incluye:

    Paquete de aplicaciones de oficina MS OFFICE

    Sistemas contables

    Sistemas analíticos financieros

    Paquetes integrados de gestión de oficina.

    CAD – sistemas (sistemas de diseño asistido por ordenador)

    Editores HTML o web

    Navegadores: medios para ver páginas web

    editor gráfico

    Sistemas expertos.

          Software de herramientas. El software de herramientas o sistemas de programación son sistemas para automatizar el desarrollo de nuevos programas en un lenguaje de programación. En el caso más general, para crear un programa en el lenguaje de programación seleccionado (lenguaje de programación del sistema), es necesario contar con los siguientes componentes: 1. Editor de texto para crear un archivo con el texto fuente del programa. 2. Compilador o intérprete. El texto fuente se traduce a código objeto intermedio mediante un programa compilador. El código fuente de un programa grande consta de varios módulos(archivos fuente). Cada módulo se compila en un archivo separado con código objeto, que luego debe combinarse en un todo.3. Un editor de enlaces o ensamblador que realiza enlaces de módulos de objetos y genera una aplicación funcional como salida: código ejecutable. El código ejecutable es un programa completo que se puede ejecutar en cualquier computadora que tenga el sistema operativo para el cual fue creado el programa. Como regla general, el archivo resultante tiene la extensión .EXE o .COM.4. Recientemente, se han generalizado los métodos de programación visual (que utilizan lenguajes de scripting) destinados a crear aplicaciones para Windows. Este proceso está automatizado en entornos de diseño rápido. En este caso, se utilizan componentes visuales ya preparados, que se configuran mediante editores especiales. Los editores (sistemas de programación de programas que utilizan herramientas visuales) más populares para el diseño visual:

    Borland Delphi: diseñado para resolver casi cualquier problema de programación de aplicaciones

    Borland C++ Builder es una excelente herramienta para desarrollar aplicaciones DOS y Windows

    Microsoft Visual Basic es una herramienta popular para crear programas de Windows

    Microsoft Visual C++: esta herramienta le permite desarrollar cualquier aplicación que se ejecute en un entorno de sistema operativo como Microsoft Windows.

Preguntas de control:

    Definir sistema operativo.

    ¿Qué software se considera software de sistema?

    Nombra el software de utilidad.

    ¿Qué software se considera software de aplicación?

    ¿Cuál es el propósito del software?

    ¿Cuáles son las principales clases de programas? Dar ejemplos de programas de cada clase según su finalidad.