Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INGENIERÍA EN SOFTWARE
ASIGNATURA
CONSTRUCCIÓN DE SOFTWARE
CURSO
VI “A”
TEMA
HERRAMIENTAS DE CONSTRUCCIÓN
AUTOR
DOCENTE
2021 – 2022
Contenido
1 Introducción .............................................................................................................. 4
4.3 Cactus............................................................................................................... 15
7 Conclusión .............................................................................................................. 20
8 Bibliografía ............................................................................................................. 20
1 Introducción
El desarrollo de Software es un proceso complejo y a menudo difícil que requiere la
síntesis de muchos sistemas. Desde el modelado y diseño hasta el código, administración
del proyecto, pruebas, despliegue, administración de cambios y más.
Las herramientas para desarrollo de software pueden tener diversos propósitos como
compiladores, editores de código, diseñadores de interfaz gráfica, ensambladores,
depuradores, herramientas de análisis de rendimiento, etc.
Las soluciones ofrecidas por esas herramientas pueden aplicarse en diferentes áreas de la
programación y ayudar en el desarrollo de las tareas más complejas hasta las más simples,
en la actualidad existe múltiples herramientas para desarrollar un software, y decir que
una de ellas es la mejor es simplemente una mentira, eso va a depender de cada persona
que la esté utilizando o se sienta más cómodo.
En la presente investigación se buscó las herramientas que posiblemente sean las mas
utilizadas y con ello se define brevemente su funcionalidad y como utilizarlas, ya sean
herramientas de entornos de desarrollo, la ayuda de construir interfaces de diseño, como
realizar las pruebas unitarias en una herramienta especifica como JUnit, y como analizar
el rendimiento del software.
2 Entornos de Desarrollo
Es un conjunto de operaciones y herramientas utilizadas por los desarrolladores para
codificar, generar, depurar, actualizar, integrar, testear, validar y ejecutar programas [1].
2.1 Utilidad
El entorno de desarrollo se refiere a la creación del software[2]. Este entorno puede ser
implementado a nivel local, en la computadora del desarrollador o en un servidor local.
Este tipo de entorno comúnmente está situado en la nube. La ventaja de contar con un
servidor de pruebas es que admite a otros desarrolladores del equipo y clientes a
interactuar con el software para realizar tests de funcionalidades del sistema [2].
Además, los entornos en la nube permiten una gestión centralizada, ya que ningún código
se encuentra en el ordenador de un desarrollador, ni hay diferentes versiones sin control
pasando de una persona a otra.
Recomendar el mejor IDE para trabajar no es tarea fácil. Cada programador tiene sus
preferencias y lo que para algunos es cómodo para otros puede resultar lo contrario [2].
Es como hablar de coches. Algunos estarán encantados con coches de marcas asiáticas,
otros preferirán europeas y siempre habrá quienes prefiera un auto americano o ruso. Así
que lo mejor es enumerar aquellos IDE que son más populares para que los conozcas y
puedas probar aquel que mejor se le ajuste.
2.3.1 Eclipse
2.3.2 NetBeans
Desarrollado por Jet Brains es un IDE que cuenta con dos versiones, la Community
Edition, libre descarga, y la versión Ultimate Edition que cuesta más de 500 dólares de
suscripción anual, según el plan que se contrate, pero que se puede probar gratis durante
30 días.
Con IntelliJ se puede programar sobre diferentes lenguajes y proporciona soporte para
trabajar con JAVA, Node JS, PHP, Python, Ruby, Sass, TypeScript, AngularJS,
CoffeeScript, CSS, HTML, JavaScript, LESS, etc.
Además, ofrece integración con GIT lo que permite trabajar con diferentes versiones del
software sin afectar a la línea maestra del desarrollo.
Visual Studio es un IDE para desarrollar interfaces gráficas de usuario (GUI), formularios
de Windows, juegos, servicios y aplicaciones web.
Desde la versión 2017, este IDE propiedad de Microsoft y disponible para Windows y
Mac, permite desarrollar, por medio de sus herramientas, aplicaciones para Windows,
Linux, macOS, Android y iOS.
Además, cuenta con soporte, nativo y por medios de complementos, para un gran número
de lenguajes de programación, como JavaScript, TypeScrip, Node.js, C++, C#, Java,
Python, PHP, Go. .NET, entre otros.
Imagen 6. Nivel de tendencia que tienen cada uno de los entornos de desarrllo mencionados, según Google Trends
3 Constructores de GUI
Un constructor de GUI (Graphical User Interface / Interfaz gráfica de usuario) es una
herramienta de desarrollo de software que permite al desarrollador crear y mantener GUIs
en modo WYSIWYG (what you see is what you get / lo que ves es lo que hay) [3]. Un
constructor de GUI suele incluir un editor visual para que el desarrollador diseñe
formularios y ventanas y gestione la disposición de los widgets arrastrando, soltando y
parametrizando. Algunos constructores de GUI pueden generar automáticamente el
código fuente correspondiente al diseño visual de la GUI.
Dado que las aplicaciones GUI actuales suelen seguir el estilo "event-driven" (en el que
el flujo del programa viene determinado por los eventos y la gestión de los mismos) [3],
las herramientas de construcción de GUI suelen proporcionar asistentes de generación de
código, que automatizan las tareas más repetitivas necesarias para la gestión de eventos.
El código asistente conecta los widgets con los eventos salientes y entrantes que activan
las funciones que proporcionan la lógica de la aplicación.
3.1 Descripción
Estas herramientas generan directamente código fuente en uno o más idiomas de destino
(como el diseñador de Windows Forms en Visual Studio) o crean archivos de recursos
(generalmente basados en XML) que son independientes del idioma en el que se usarán
(como el diseñador de WPF para Visual Studio, Glade para GTK + o Interface Builder
para Mac OS X ).
3.2 Widgets
Es una "subaplicación" especial con una interfaz gráfica de usuario (GUI) que consiste
en componentes de interfaz de usuario, como campos de texto, paneles con pestañas,
ventanas de video, etc. Los widgets son buenos para construir formularios, Gráficos y
diagramas, mapas dinámicos e interfaces hombre-máquina (HMI) [5]. Estás interfaces se
pueden usar para controlar, configurar y monitorear diferentes dispositivos de hardware
o componentes del sistema.
Permite desarrollar rápidamente una interfaz Gráfica de Usuario (GUI) por medio de una
paleta de componentes con tan solo arrastrar y soltar, generando el código necesario para
su funcionamiento.
3.3.3.2 Swing
Es la evolución del AWT, la cual al igual que Swing es un conjunto de librerías enfocadas
a la construcción de interfaces, solo que con esta se presentaron algunos problemas en
cuanto a portabilidad principalmente cuando se desarrollaban aplicaciones para diferentes
sistemas operativos, pues el comportamiento de los componentes gráficos en ocasiones
podía variar [6].
Imagen 10. Algunos componentes de Swing
Con las herramientas y los marcos de pruebas unitarias, el desarrollador puede codificar
criterios en la prueba para verificar la corrección de la unidad bajo varios conjuntos de
datos [7]. Cada prueba individual se implementa como un objeto, y un corredor de
pruebas ejecuta todas las pruebas. Durante la ejecución de la prueba, los casos de prueba
fallidos se marcarán automáticamente y se informará de ellos.
4.1 JUnit
JUnit ha sido una innovación importante para la industria de las pruebas de software. Por
un lado, ha llevado a la industria de las pruebas de software a adquirir una mayor
conciencia de cómo debe llevarse a cabo el desarrollo de software [8]. Por el otro, ha
llevado también a la industria a considerar la necesidad de aplicar la programación
orientada a objetos por lo que JUnit es una gran fuente de ideas para el desarrollo de
software orientado a objetos.
4.2 Spring Test
Es un conjunto de pruebas de carga y de estrés de manera que los datos demuestren que
el producto o sistema es seguro [8]. Este proceso se lleva a cabo en un ambiente
controlado y bajo condiciones de prueba.
Spring Framework contiene un conjunto de clases pensadas para realizar Prueba Unitaria
y Prueba De Integracion, facilitando varias tareas repetitivas. En particular, estas
utilidades se integran directamente con JUnit.
4.2.1 Provee
A diferencia de las pruebas de carga, las pruebas de estado final se llevan a cabo en
ambientes reales. A continuación, se presentan las pruebas de estado final que un
fabricante debe realizar antes de aprobar el producto:
Prueba de vida útil: se realiza una prueba para valorar la vida útil del producto, para lo
que se exige que el producto pueda funcionar y operar de forma aceptable durante el
periodo de vida útil de la garantía.
4.3 Cactus
Cactus es un simple framwork de pruebas para Prueba Unitaria de código Java (Servlets,
EJB, TagLib, etc) [9]. Cactus intenta simplificar la escritura de pruebas del lado del
servidor. Usa JUnit y lo extiende.
Cliente: después de recibir la respuesta, ejecute los métodos endXXX y end para
completar el proceso de prueba.
5 Herramientas de Perfiles
En la programación las herramientas de perfiles ayudan a eliminar el trabajo repetitivo y
a concentrar el enfoque de las tareas, en las tareas realmente críticas.
Las herramientas de análisis de rendimiento suelen utilizarse para apoyar el ajuste del
código. Las herramientas de análisis de rendimiento más comunes son las de creación de
perfiles [1]. Una herramienta de perfilado de ejecución monitoriza el código mientras se
ejecuta y registra cuántas veces se ejecuta cada sentencia o cuánto tiempo pasa el
programa en cada sentencia o ruta de ejecución. El perfilado del código mientras se
ejecuta permite saber cómo funciona el programa, dónde están los puntos calientes y
dónde deben centrar los desarrolladores sus esfuerzos de ajuste del código.
• Java: la API JVMTI (JVM Tools Interface), anteriormente JVMPI (JVM Profiling
Interface), proporciona enlaces a los perfiladores, para atrapar eventos como
llamadas, class-load, unload, thread enter y dejar.
• .NET: Puede adjuntar un agente de creación de perfiles como servidor COM al
CLR mediante la API de creación de perfiles. Al igual que Java, el tiempo de
ejecución proporciona varias devoluciones de llamada al agente, para atrapar
eventos como el método JIT / entrar / salir, creación de objetos, etc.
Particularmente poderoso porque el agente de generación de perfiles puede
reescribir el código de bytes de la aplicación de destino de formas arbitrarias.
• Python: la creación de perfiles de Python incluye el módulo de perfil, hotshot (que
se basa en un gráfico de llamadas) y el uso de la función 'sys.setprofile' para
atrapar eventos como c_ {llamada, devolución, excepción}, python_ {llamada,
devolución, excepción}.
• Ruby: Ruby también usa una interfaz similar a Python para la creación de perfiles.
Se encuentran presentes flat-profiler en profile.rb, module y ruby-prof a C-
extensión.
• Con una variable que muestre el número de veces que se ejecuta cada ruta de la
ejecución del programa.
• Que registre todo lo que ocurre durante la ejecución del programa, incluyendo
todas las llamadas del sistema.
• Que registre el tiempo que está el procesador ejecutando cada ruta o sentencia.
Esta herramienta permite que la ejecución del código se detenga cada vez que se produzca
un bloqueo. El efecto de un bloqueo es que todos los procesos que dependen del bloqueo
también se detienen [1]. El perfilador de bloqueo registra cuánto tiempo pasa el
procesador en un bloqueo y cuántas veces sucede. El perfilador de bloqueo es un
programa que se encuentra dentro del código a perforar. Para ello, el perfilador debe
plantearse en cada una de las rutas que aparecen en la hoja de cálculo del programa a
perforar.
Esta herramienta permite que la ejecución del código se detenga cada vez que se
produzcan eventos de paralelismo. El efecto de un evento de paralelismo es que todos los
procesos que dependen del evento de paralelismo también se detienen [1]. El perfilador
de paralelismo registra cuánto tiempo pasa el procesador en un evento de paralelismo y
cuántas veces sucede. El perfilador de paralelismo es un programa que se encuentra
dentro del código a perforar. Para ello, el perfilador debe plantearse en cada una de las
rutas que aparecen en la hoja de cálculo del programa a perforar.
6 Análisis de rendimiento
En la programación el análisis de rendimiento consiste en la evaluación de la calidad del
producto, por lo que es importante que funcionen correctamente todos los productos y sus
funcionalidades [10]. Una vez que se ha determinado que los productos funcionan
correctamente, se puede proceder a realizar el análisis estructural.
Reside en la evaluación de tareas, de la calidad de los equipos que realizan esas tareas, de
los procesos y métodos utilizados, los controles existentes y el análisis de cambios [10].
En este análisis se consideran aspectos como: la eficiencia, el desempeño, la
productividad, la eficiencia de los procesos, la gestión de las tareas, los recursos, el
procedimiento de trabajo, los controles y la calidad, entre otros.
6.1 Características
Se pudo ver algunas buenas herramientas para el diseño de software, en su gran mayoría
herramientas Open Source. Sin embargo, en lo que respecta a las metodologías de
desarrollo de software, la primera segmentación que se desarrolló podría decirse que fue
la más importante. Así que sin importar en que esquemas o entorno trabajes o si tienes en
mente basarte en alguna de las metodologías de desarrollo de software populares, debes
saber que todas y cada una de ellas te llegarán a servir en un determinado momento.
Por último, es impórtate recalcar que no importa que entorno o herramientas utilices para
alcanzar el objetivo de desarrollar un software, si es cierto que dependiendo de la
herramientas que utilices tal vez para algunas personas no será la adecuada, pero para
otras será la perfecta, porque de seguro ya tiene experiencia en utilizarla, de todos modos
lo importante no será la herramienta sino lo que vayas implementar con ella.
8 Bibliografía
[1] P. Bourque, R. E. Fairley, and I. C. Society, Guide to the Software Engineering
Body of Knowledge (SWEBOK(R)): Version 3.0, 3rd ed. Washington, DC, USA:
IEEE Computer Society Press, 2014.
[3] “Developing GUI Applications,” in Pro NetBeansTM IDE 6 Rich Client Platform
Edition, Berkeley, CA: Apress, pp. 403–443. doi: 10.1007/978-1-4302-0439-8_15.
[5] “GUI Components,” in Learn Cocoa on the Mac, Berkeley, CA: Apress, 2010, pp.
55–90. doi: 10.1007/978-1-4302-1860-9_4.
[6] H. Böck, “NetBeans Swing GUI Builder,” in The Definitive Guide to NetBeansTM
Platform 7, Berkeley, CA: Apress, 2012, pp. 439–457. doi: 10.1007/978-1-4302-
4102-7_41.
[7] G. O’Regan, “Software Testing Tools,” 2019, pp. 181–198. doi: 10.1007/978-3-
030-28494-7_10.
[8] D. Parsons, “Unit Testing with JUnit,” in Foundational Java, London: Springer
London, 2012, pp. 219–244. doi: 10.1007/978-1-4471-2479-5_10.
[9] J. U. Pipka, “Test-Driven Web Application Development in Java,” 2003, pp. 378–
393. doi: 10.1007/3-540-36557-5_27.