Você está na página 1de 72

WBA0446_v1.

CASE: AS PRINCIPAIS
FERRAMENTAS NO CICLO DE
DESENVOLVIMENTO DE
SOFTWARES
Andre Olimpio

CASE: AS PRINCIPAIS FERRAMENTAS NO CICLO


DE DESENVOLVIMENTO DE SOFTWARES
1ª edição

Londrina
Editora e Distribuidora Educacional S.A.
2020

2
© 2020 por Editora e Distribuidora Educacional S.A.

Todos os direitos reservados. Nenhuma parte desta publicação poderá ser


reproduzida ou transmitida de qualquer modo ou por qualquer outro meio,
eletrônico ou mecânico, incluindo fotocópia, gravação ou qualquer outro tipo de
sistema de armazenamento e transmissão de informação, sem prévia autorização,
por escrito, da Editora e Distribuidora Educacional S.A.

Presidente
Rodrigo Galindo

Vice-Presidente de Pós-Graduação e Educação Continuada


Paulo de Tarso Pires de Moraes

Conselho Acadêmico
Carlos Roberto Pagani Junior
Camila Braga de Oliveira Higa
Carolina Yaly
Giani Vendramel de Oliveira
Henrique Salustiano Silva
Juliana Caramigo Gennarini
Mariana Gerardi Mello
Nirse Ruscheinsky Breternitz
Priscila Pereira Silva
Tayra Carolina Nascimento Aleixo

Coordenador
Henrique Salustiano Silva

Revisor
Marcilyanne Moreira Gois

Editorial
Alessandra Cristina Fahl
Beatriz Meloni Montefusco
Gilvânia Honório dos Santos
Mariana de Campos Barroso
Paola Andressa Machado Leal

Dados Internacionais de Catalogação na Publicação (CIP)


__________________________________________________________________________________________
Olimpio, Andre
O46c CASE: as principais ferramentas no ciclo desenvolvimento
de softwares / Andre Olimpio – Londrina: Editora e Distribuidora Educacional
S.A. 2020.
44 p.

ISBN 978-65-87806-09-9

1. Ferramentas. 2. Desenvolvimento I. Olimpio, Andre. II. ,Título.

CDD 005
____________________________________________________________________________________________
Jorge Eduardo de Almeida CRB: 8/8753

2020
Editora e Distribuidora Educacional S.A.
Avenida Paris, 675 – Parque Residencial João Piza
CEP: 86041-100 — Londrina — PR
e-mail: editora.educacional@kroton.com.br
Homepage: http://www.kroton.com.br/

3
CASE: AS PRINCIPAIS FERRAMENTAS NO CICLO DE
DESENVOLVIMENTO DE SOFTWARES

SUMÁRIO
Ferramentas para o desenvolvimento de softwares__________________ 05

Ferramentas para modelagem de um Sistema de Software__________ 22

Ferramentas CASE para gerenciamento de projeto de desenvolvimento


de software__________________________________________________________ 40

Ferramentas para automação de testes de software_________________ 56

4
Ferramentas para o
desenvolvimento de softwares
Autoria: André Olímpio
Leitura crítica: Marcilyanne Gois

Objetivos
• Identificar os diferentes tipos de ferramentas
existentes no mercado atual para desenvolvimento
de sistemas de software.

• Entender o conceito de levantamento de requisitos


de software e aplicá-los por meio de ferramentas
específicas.

• Identificar uma ferramenta de desenvolvimento de


interfaces gráficas com os usuários de um sistema
de software.

• Constatar a necessidade de se utilizar ferramentas


específicas no gerenciamento de um sistema de
banco de dado.

5
1. Introdução

Um software é um conjunto de funcionalidades distintas que foram


escritas através de uma linguagem de programação, apoiado em uma
estrutura lógica muito bem definida, que tem como principal objetivo
resolver uma situação do mundo real. Tanto que nos dias atuais é muito
comum utilizar-se da palavra solução para definir um software.

Nesse sentido, os softwares atuais são bastante complexos, seja em


sua estrutura de programação ou no conjunto de variáveis que este
administra, pois, os problemas a serem resolvidos, em sua grande
maioria, requerem conceitos interdisciplinares, ou seja, as variáveis
são provenientes de diferentes áreas, cabendo ao software identificar,
processar e manipular cada uma delas, com o intuito de atingir um
objetivo comum. É claro que, devido a toda essa complexidade e a
quantidade de itens a serem gerenciados paralelamente, fica impossível
para um ser humano dar conta de tudo sem ajuda. Assim, surgiram
ferramentas específicas para auxiliar os profissionais de Tecnologia
da Informação no desenvolvimento de sistemas de software das quais
se utilizam de técnicas e recursos avançados que proporcionam o
alcance dos melhores resultados possíveis. Essas ferramentas são
chamadas de CASE, uma sigla em inglês que significa Computer Aided
Software Engineering, em português, Engenharia de Software Auxiliada
por Computador. Logo, são softwares que, como o próprio nome diz,
ajudarão esses profissionais na estruturação e documentação de todos
os ativos por ele desenvolvidos.

Com base nos argumentos apresentados, é importante ressaltar que


essas ferramentas foram criadas para facilitar o trabalho do profissional
de TI, criando um ambiente no qual o software a ser desenvolvido é
definido e estruturado em pontos de vistas diferentes antes do processo
de sua codificação, com intuito de garantir a qualidade, minimizar
o esforço, aumentar a produtividade, permitir a reutilização de

6
componentes, gerando documentos robustos e completos, necessários
para compreensão e estruturação de todo esse processo.

1.1 As ferramentas CASE no processo de


desenvolvimento de software

Uma ferramenta CASE pode ser classificada em três tipos: upper case,
lower case e integrated case.

Upper CASE é um conjunto de aplicações utilizadas na fase de concepção


do software, ou seja, durante a análise e especificação ou modelação
de requisitos. Lower CASE seria uma ou mais aplicações que são
utilizadas nas fases de implementação (criação, edição e compilação do
código-fonte) e de testes. Por fim, a Integrated CASE, também chamado
de I-CASE, refere-se à utilização conjunta dos outros dois conceitos
(WERLICH, 2018, p. 37).

A programação de computadores, por sua vez, é definida como a


escrita de um código-fonte de uma aplicação, utilizando uma linguagem
específica, de maneira lógica e ordenada, com o objetivo de resolver
um problema do mundo real. Esse código poderá ser testado, reescrito,
manipulado e mantido por profissionais denominados programadores
ou desenvolvedores de software. Esse programa, no entanto, deverá
passar por um processo de compilação, transformando o código-fonte
em algo legível para o computador, conhecido como linguagem de
máquina. Após esse processo, ele será exibido na tela para o usuário
em ambiente de execução. Além disso, é possível que esse código seja
escrito por duas ou mais linguagens de programação diferentes.

Uma linguagem de programação é como se fosse um idioma, pois


possui características próprias, sendo direcionadas para ambientes
e objetivos distintos. Isso acontece, por exemplo, em uma linguagem
desenvolvida para aplicações executadas em ambiente web como
um sistema de loja virtual ou então para ambiente mobile, como um

7
aplicativo de gerenciamento de arquivos multimídia (áudio e vídeo). Em
outras palavras, atualmente, existem estruturas voltadas para resolução
de problemas de diferentes naturezas. Nesse cenário, é permitido aos
desenvolvedores utilizar a criatividade para gerar programas cada vez
mais robustos e eficientes. Porém, segundo Sommerville (2019), mesmo
tendo particularidades, as linguagens são iguais em sua essência, já que
a estrutura lógica é a mesma para todas. Desse modo, fazem parte desta
estrutura conceitos como: verificação condicional, laços de repetição,
rotinas e sub-rotinas, comandos de entrada e saída de dados, além de
armazenamento não permanente de dados (variáveis).

Ao longo do tempo, os problemas a serem resolvidos por um software


ficaram mais amplos e mais complexos. Segundo Neto (2016), os
primeiros programas criados resolviam problemas simples como efetuar
um cálculo matemático de uma expressão de primeiro grau ou ordenar
uma sequência numérica finita. Com a evolução tecnológica, por sua
vez, as exigências dos usuários aumentaram de forma exponencial e,
consequentemente, a complexidade dos problemas acompanharam
esta evolução se tornando extremamente complexos e desafiadores.
Um desenvolvedor nos dias atuais deve criar um sistema que esteja
integrado a outros via uma API (Application Programming Interface ou
Interface de Programação de Aplicação) tendo que gerenciar terabytes
de dados em tempo real e com centenas de usuários acessando o
sistema simultaneamente. Além disso, o software precisa oferecer
confiabilidade nas informações exibidas na tela, ser seguro nos
cumprimentos dos requisitos funcionais e não funcionais, e apresentar
alta performance nas respostas às solicitações do usuário.

Porém, nada disso seria possível se não houvesse uma tecnologia


robusta para sustentar essa demanda. Segundo Artero (2016), as
ferramentas de desenvolvimento foram obrigadas a acompanhar
esta evolução, deixando de ser meros digitadores de código-fonte e
se tornando verdadeiros ambientes integrados de desenvolvimento,
unindo diversas tecnologias e linguagens em uma única arquitetura.

8
Em programação existem dois ambientes: design mode e runtime
mode. O design mode, é conhecido como modo de desenvolvimento
ou lado do desenvolvedor, trata-se de um ambiente onde o código-
fonte e toda estruturação interna do software são produzidos. Somente
os responsáveis pela programação deste sistema tem acesso a este
modo, ou seja, o usuário final da aplicação não o visualiza e tampouco
o manipula. Já o runtime mode, conhecido como modo de execução ou
lado do usuário, refere-se ao ambiente no qual corresponde a todos os
elementos que são visualizados na tela do computador após a execução
do código-fonte da aplicação inicializada no design mode. Assim, toda
ferramenta de desenvolvimento, por mais simples que seja, apresenta
uma funcionalidade da qual realiza o processo de execução dessa
aplicação.

1.2 Arquitetura de um sistema de software

Uma aplicação é permeada por itens que são essenciais para atender
a todos os requisitos do sistema. A Figura 1 ilustra a arquitetura que é
composta pela aplicação propriamente dita, computadores, dispositivos
móveis, servidores, software de gerenciamento de banco de dados, o
usuário final e profissionais de TI:

9
Figura 1– Componentes da arquitetura de um sistema de software

Aplicação
(Desktop / Web / SGBD
Mobile)
Usuário
Final
Servidor de
Banco de Dados

Desenvolvedor / DBA
Programador Administrador do
Banco de Dados

Fonte: elaborada pelo autor.

O usuário final é aquele que irá acessar o conteúdo disponibilizado


pela aplicação através de um componente físico, podendo ser
um computador pessoal, um smartphone ou um notebook. Esses
componentes recebem o nome de dispositivos de acesso, pois é por eles
que o usuário poderá manipular e interagir diretamente com o software.

O código-fonte de uma aplicação é escrito por meio de uma ou mais


linguagens de programação, dependendo do grau de complexidade e,
principalmente, sua aplicabilidade. Nos dias atuais, no entanto, é muito
comum que um software esteja integrado a outros sistemas, pois para
resolver um problema é necessário que haja essa conectividade. Essa
aplicação pode estar direcionada para ser executada em diferentes
ambientes como web, mobile ou desktop. As ferramentas do tipo Lower
CASE são utilizadas para estruturar o código da aplicação.

Por sua vez, uma aplicação para ambiente web é acessada através
de um browser (navegador), que é uma ferramenta requisitada para
acessar sites disponibilizados na Internet. Os browsers mais conhecidos
atualmente são: Microsoft Internet Explorer, Mozilla Firefox, Apple Safari
e Google Chrome. As linguagens de programação mais utilizadas para

10
desenvolver aplicações para esse tipo de ambiente são: JavaScript, PHP,
ASP, Java, Python e Ruby.

Uma aplicação para ambiente desktop é aquela na qual o usuário


precisa instalar fisicamente o software em seu equipamento através de
um programa instalador, que pode ser acessado em uma mídia digital
como um CD, um dispositivo de armazenamento de dados como um
pen drive ou efetuando um download. As linguagens mais conhecidas
para desenvolvimento desse tipo de aplicação são: Java, C#, C++, Python,
Delphi e Visual Basic.

Já uma aplicação para ambiente mobile é executada em dispositivos


móveis como smartphones e tablets. Esse tipo de software precisa ser
instalado diretamente no dispositivo e, ainda, levando em consideração
o sistema operacional do aparelho. A maneira mais comum de fazer esta
instalação é através do download em lojas virtuais disponibilizadas pelas
empresas que administram seus sistemas operacionais, sendo que as
mais famosas são: a Google Play Store, do Android e a Apple Store, do
iOS. As linguagens mais conhecidas para desenvolvimento de aplicações
para esse tipo de ambiente são: Java, C#, Swift e Python.

Um SGBD (Sistema de Gerenciamento de Banco de Dados) é o software


responsável por fazer a administração de um banco de dados,
estando fisicamente alocado em um servidor. Esse software será o
intermediário entre o banco e a aplicação, garantindo, entre outros
fatores, a segurança dos dados. Assim, a aplicação acessará os dados
armazenados no servidor de forma remota, já que ambos farão parte
de uma rede. Segundo Werlich (2018), as ferramentas do tipo Upper
CASE são utilizadas para fazer a modelagem de um banco de dados e,
também, toda estruturação do código-fonte da aplicação.

Entre os profissionais envolvidos nesta arquitetura, está o desenvolvedor


ou programador, sendo fundamental que esse profissional conheça os
conceitos que formam o ciclo de desenvolvimento de software para

11
conseguir implementá-lo em sua essência, já que cada etapa apresenta
características e conhecimentos específicos que interligados formam a
solução do problema identificado no início deste ciclo.

O DBA (Database Administrator) é o administrador do sistema de banco


de dados, um profissional fundamental para a arquitetura, pois é o
responsável por gerenciar, manter e estruturar os dados, que são o
bem mais importante nesse contexto. Afinal de contas, é a partir deles
que a informação será disponibilizada para o usuário da aplicação. Vale
lembrar que toda e qualquer informação é definida como um conjunto
organizado de dados que apresente um significado inerente (ELMASRI;
NAVATHE, 2019).

1.3 Levantamento de requisitos

O ciclo de desenvolvimento de um sistema de software é dividido em


etapas que estão interligadas entre si. De acordo com Artero (2016),
elas são sequenciais e seus resultados podem influenciar nas atividades
realizadas nas etapas subsequentes, ou seja, um erro cometido pode ter
consequências e efeitos refletidos em todo o processo a partir da etapa
onde ocorre.

Esse ciclo permite, inclusive, que uma etapa possa ter suas atividades
refeitas ou, até mesmo, voltar às etapas anteriores, possibilitando que
correções sejam realizadas, mudanças sejam agregadas, garantindo um
bom nível de qualidade do produto final entregue. Após a conclusão
de cada etapa, é fundamental que alguma entrega do sistema seja
realizada. Essa entrega pode ser uma funcionalidade, uma interface,
um documento, algo que possa ser mensurado e apresentado para o
solicitante desse sistema. A figura a seguir representa as etapas desse
ciclo.

12
Figura 2 – Etapas do ciclo de desenvolvimento de software

Fonte: elaborada pelo autor.

A etapa de levantamento e análise de requisitos é considerada, por


muitos profissionais, a etapa mais importante do ciclo. Nela são
realizadas todas as definições necessárias para o cumprimento do
objetivo do software. Essas definições, por sua vez, são chamadas
de requisitos, que são todas as especificações abstraídas durante a
interpretação do problema. Um requisito precisa ser claramente descrito
para não causar ambiguidades ou interpretações diferentes das quais
ele realmente representa.

O levantamento e análise de requisitos é fundamental para o sucesso


de um software. Logo, cabe ao desenvolvedor fazer uma pesquisa
detalhada para identificar e classificar todos os itens necessários para
definir os pontos a serem alcançados, pois cada ponto deste será

13
uma funcionalidade do sistema. De acordo com Pressman (2016), um
requisito pode ser conceituado como toda e qualquer característica
desejada para que um sistema computacional venha resolver com base
em problemas do mundo real, sendo divididos em duas categorias:
funcional e não funcional.

Requisito funcional: corresponde as funções que o software deverá


executar para solucionar um problema específico, por exemplo: efetuar
o cálculo de uma expressão matemática, gerar um relatório em formato
PDF contendo o gráfico de crescimento mensal de uma organização
ou uma autenticação de acesso de um usuário ao sistema através do
método de validação de senha.

Requisitos não funcional: corresponde as estruturas de recursos,


ambientes e demais informações que incidem no desempenho,
usabilidade, confiabilidade, segurança, disponibilidade, manutenção e
tecnologias envolvidas no desenvolvimento do software, por exemplo:
o ambiente físico adequado para instalação de computadores, as
atualizações realizadas no sistema operacional e nas ferramentas
de desenvolvimento ou uma norma técnica utilizada para garantir a
confiabilidade do processo de teste de software (PRESSMAN, 2016, p.
141).

Segundo Sommerville (2019), é importante também ressaltar que


um requisito é a principal referência para se aferir qualidade de um
software, pois cada requisito precisa ser mensurado e, a partir disso,
o desenvolvedor consegue identificar se o mesmo foi devidamente
atendido. Assim, a qualidade pode ser conceituada em conformidade
com os requisitos.

Para garantir está conformidade e mensurar se uma especificação


foi devidamente atendida, há diversas ferramentas CASE que são
facilitadoras e ajudam o desenvolvedor a cumprir o processo de
levantamento de requisitos. Entre elas, no mercado atual, destacam-

14
se Utdalls RE-Tools (2016), Atlassian Jira (2017) e Visure Requirements
Management Tool (2018).

O Utdalls RE-Tools (2016) é uma ferramenta que permite efetuar a


captura de requisitos através de um conjunto de funcionalidades
baseadas em múltiplas referências, como: modelagem para requisitos
não funcionais, modelagem de software orientada a agentes (conceitos,
notações, técnicas e diretrizes metodológicas), modelagem de processos
de negócios e modelagem formal de objetivos. Ele oferece suporte
para UML (Unified Modeling Language em português Linguagem de
Modelagem Unificada), permitindo a geração de códigos em linguagem
JAVA a partir de diagramas de classes, casos de uso, sequência e
máquina de estados.

O Atlassian Jira (2017) é uma ferramenta que identifica e mapeia


os requisitos de negócios, com a finalidade de colaborar com os
stakeholders (todas as partes envolvidas e impactadas direta ou
indiretamente por um projeto), garantir que as tarefas estejam
conectadas a qualquer requisito de captura de dados, fornecendo
entregas de alta qualidade. Além disso, essa ferramenta facilita a
visualização a ligação entre requisitos de negócios e os problemas
do mundo real, fazendo um rastreio de todas as tarefas que estejam
relacionadas diretamente a esses requisitos. Assim, é possível também
criar e visualizar uma estrutura de hierarquia de requisitos.

O Visure Requirements Management Tool (2018) é uma ferramenta


robusta para gerenciamento do ciclo de vida de um software, e é muito
utilizada em ambientes regulamentados como o setor aeroespacial,
gerência de energia elétrica, dispositivos médicos e setor automotivo.
Ela tem como principais características: a padronização de processos,
a formalização de uma estrutura de especificação de requisitos
comuns, a gerência de alterações durante o ciclo de vida do software
e uma possível reutilização desses requisitos. Além disso, ela permite
integração com outras ferramentas deste segmento, como o Atlassian

15
Jira (2017) e com aplicativos do Microsoft Office. No entanto, ela não
possui versão gratuita, porém é possível fazer o download de uma
versão de testes disponível no site oficial da empresa Visure Solutions.

Todas essas ferramentas utilizam o conceito de ALM (Application Lifecycle


Management), que é o gerenciamento do ciclo de vida de um sistema
de software, desde a sua concepção até o momento em que houver a
descontinuidade do mesmo, conforme o Quadro 1.

Quadro 1 – Ferramentas ALM

Ferramenta Licença Plataforma Versão de testes


Utdalls RE-Tools Opensource Multiplataforma Não

Atlassian Jira Proprietária Multiplataforma Sim


Visure
Requirements Proprietária Windows Sim
Management Tool

Fonte: elaborada pelo autor.

1.4 Interfaces com o usuário final

A modelagem de interfaces com usuário final também é conhecida como


prototipagem UX, sendo um processo de criação de um protótipo da
estrutura visual do sistema, baseando-se nos requisitos definidos. Esse
protótipo simula a aparência e a funcionalidade do software, permitindo
que clientes e desenvolvedores pré-visualizem os componentes da
interface. O termo UX significa User eXperience, ou experiência do usuário,
o protótipo também é chamado de wireframe. Entre as ferramentas
CASE de prototipagem, por sua vez, destacam-se o Axure RP (2019) e o
Sketch (2020), conforme o Quadro 2.

A ferramenta Axure RP (2019) é muito popular neste segmento. Ela


permite a criação de wireframes clicáveis e interativos que possibilitam

16
uma abstração muito clara e bem abrangente de como será a versão
final da interface. Assim, ela permite a criação de protótipos de baixa
ou de alta fidelidade com os requisitos do sistema, variando de
acordo com a necessidade do desenvolvedor, sendo possível modelar
tipos diferentes de interfaces, desde websites mais simples até
estruturas mais robustas como um game. Além disso, ela possibilita o
compartilhamento do projeto para que haja uma colaboração remota
em tempo real.

O Sketch (2020), no entanto, é uma ferramenta bastante interessante


por ser bem simples de ser utilizada, sendo muito popular entre os
desenvolvedores, mesmo que direcionada para usuários do Mac OS.
Além da facilidade de uso, esse software apresenta uma interface muito
intuitiva e uma lista de plug-ins que o deixam bem robusto. Entre estes
plug-ins é possível destacar o Sketch Mirror, que permite visualizar uma
prévia bem completa de uma aplicação para ambiente de dispositivos
móveis.

O quadro as seguir ilustra a diferenças entre as ferramentas CASE para


interface com usuário:

Quadro 2 –Ferramentas de prototipagem UX


Ferramenta Licença Plataforma Versão de testes
Sim
Windows,
Axure RP Proprietária
MacOS Trial para 30 dias
de uso.
Sim
Sketch Proprietária MacOS
Trial para 30 dias
de uso.
Fonte: elaborada pelo autor.

17
1.5 Banco de dados

A modelagem de um banco de dados, porém, é um dos processos mais


fundamentais no desenvolvimento de um sistema de software, pois
trata-se de uma estrutura na qual todos os dados serão armazenados
para serem gerenciados e manipulados através da aplicação. Segundo
Elmasri e Navathe (2019), diferentemente do que muitas pessoas
possam pensar, não se codifica primeiro a aplicação, mas o banco de
dados. Além disso, antes de implementar este banco, é necessário
fazer sua estruturação através de modelos específicos, como o modelo
entidade-relacionamento. Entre as principais ferramentas CASE para
esse tipo de modelagem destacam-se: o DB-Main (2017), o DBDesign
(2016) e ERwin (2017).

O DB-Main (2017) é uma ferramenta de modelagem que gerencia os


processos existentes em um projeto de banco de dados, como: análise
de requisitos, modelo entidade-relacionamento (conceitual, lógico e
físico), normalização, integração e otimização de esquemas de dados
e, também, a geração de códigos escritos em SQL (Structure Query
Language), linguagem padrão para gerenciamento de banco de dados, a
partir dos modelos.

O DB Design (2016) é uma ferramenta que permite modelar, criar e


fazer a manutenção de um sistema de banco de dados em um único
ambiente. Ele permite a compatibilidade direta com SGBD, como o
MySQL, um dos mais populares e utilizados no mercado atual neste
segmento. Por ser de código aberto, ele pois possui uma comunidade
bastante ativa na qual permite compartilhamento de experiências
entre os desenvolvedores, sendo que eles podem relatar bugs e sugerir
atualizações/correções de funcionalidades.

O ERwin (2017), por fim, é uma ferramenta CASE para modelagem que
simplifica bastante o processo de estruturação de um banco de dados.

18
Além de permitir que o desenvolvedor defina as necessidades e normas
corporativas de um modelo, ele gera um modelo prático a ser facilmente
implementado no SGBD do qual estiver conectado. Sendo, também,
utilizado para modelar bancos de dados de grande porte que são
chamados de data warehouse.

Com isso, é importante ressaltar que essas ferramentas listadas


são para modelagem de banco de dados do tipo relacional, que são
utilizadas para armazenamento de dados formatados e estruturados.
O quadro a seguir ilustra a diferenças entre as ferramentas CASE para
modelagem de dados:

Quadro 3 – Ferramentas para modelagem de banco de dados


Ferramenta Licença Plataforma Versão de testes
DB Main Proprietária Windows, MacOS Freeware
DB Design Opensource Multiplataforma Não
Sim
ERwin Proprietária Windows
Trial para 30 dias
de uso.
Fonte: elaborada pelo autor.

1.6 Programação orientada a objetos

A programação orientada a objetos (POO) é uma maneira robusta,


elegante e altamente eficiente de se escrever o código-fonte de uma
aplicação. Esse processo consiste em fazer com que unidades básicas,
chamadas objetos, sejam programados com base em ações internas
(métodos) e externas (eventos) das quais compõem uma estrutura
primitiva (classe), que é a referência da qual um objeto é criado.
Atualmente, muitas linguagens de programação utilizam o conceito de
POO, como Java, C#, PHP e C++.

19
Para se fazer uma modelagem de sistemas utilizando conceitos de
orientação a objetos, portanto, utiliza-se ferramentas com suporte
a UML (Unified Modeling Language, em português, Linguagem de
Modelagem Unificada), que é o padrão internacional para modelagem
de software, no qual apresenta diversos diagramas que representam
um sistema através de diversas perspectivas. Entre eles, há o diagrama
de classes, que é apontado como o principal da UML e, também, é a
base para a criação e manipulação de um objeto. Logo, nesse cenário,
destacam-se as seguintes ferramentas: o Visual Paradigm (2018), o
LucidChart (2008) e o Poseidon.

O Visual Paradigm (2018) é uma ferramenta CASE para modelagem de


sistemas baseada em UML, que permite a criação de diagramas e a
geração de códigos automaticamente a partir do diagrama de classes,
além de fornecer a possibilidade de se fazer engenharia reserva. Há
duas versões dessa ferramenta, uma gratuita mais enxuta, que é
chamada de community, e outra mais completa, que é paga. Ambas
estão disponíveis para download no site oficial do projeto.

O LucidChart (2008) é uma plataforma proprietária baseada na Web,


usada para permitir que os usuários colaborem no desenho, revisão
e compartilhamento de gráficos e diagramas. Por ser um website, é
executado em navegadores compatíveis com HTML5, uma linguagem
de marcação de hipertexto que é a base de código dos sites da Internet
atual. 

O Poseidon, por sua vez, é uma ferramenta bem interessante, leve e


com interface bem intuitiva, geração de documentação e exportação de
diagramas para arquivos externos. Ele oferece, também, a engenharia
reversa para JAVA e a integração com interface de desenvolvimento de
código-fonte.

O quadro a seguir ilustra as diferenças entre as ferramentas CASE para


modelagem de sistemas de software utilizando a UML:

20
Quadro 4 – Ferramentas para modelagem de código orientado a
objetos
Versão de
Ferramenta Licença Plataforma
testes
Não.
Visual Paradigm Proprietária Multiplataforma
Versão
community
Browsers
LucidChart Proprietária compatíveis com Não
HTML5
Poseidon Opensource Multiplataforma Não

Fonte: elaborada pelo autor.

Referências Bibliográficas
ARTERO, M. A. Gestão de projetos de software. Londrina: Editora e Distribuidora
Educacional S.A., 2016.
ELMASRI, R.; NAVATHE, S. B. Sistemas de banco de dados. 7. ed. São Paulo:
Pearson Education do Brasil, 2019.
FABRIS, P. P. G.; PERINI, L. C. Processos de software. Londrina: Editora e
Distribuidora Educacional S.A., 2014.
NETO, R. M. Engenharia de software. Londrina: Editora e Distribuidora Educacional
S.A., 2016.
SOMMERVILLE, I. Engenharia de software. 10. ed. São Paulo: Pearson Education do
Brasil, 2018.
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 8. ed.
Porto Alegre: AMGH, 2016.
WERLICH, C. Modelagem de dados. Londrina: Editora e Distribuidora Educacional
S.A., 2018.

21
Ferramentas para modelagem de
um Sistema de Software
Autoria: André Olímpio
Leitura crítica: Marcilyanne Gois

Objetivos
• Identificar os diferentes tipos de ferramentas
existentes no mercado atual para modelagem de
softwares.

• Entender o conceito de modelagem de softwares e


aplicá-lo através de ferramentas específicas.

• Compreender a importância e a relevância de


se modelar um sistema de software antes de
implementá-lo.

• Entender o funcionamento das seguintes


ferramentas CASE: Microsoft Visio, Astah, IDE Eclipse
e Netbeans.

22
1. Introdução

O processo de desenvolvimento de um sistema de software é composto


por seis etapas: levantamento e análise de requisitos, modelagem,
implementação, testes, implantação e manutenção. Para atingir o sucesso
neste processo e, consequentemente, alcançar o objetivo de obter um
produto de software, é fundamental que todas essas etapas sejam
cumpridas de forma íntegra e completa. Porém, infelizmente, é possível
encontrar profissionais que tendem a não cumprir alguns desses
passos em sua essência, negligenciando algumas etapas, o que pode
comprometer diretamente as entregas do processo.

Segundo Okuyama, Gonsales e Miletto (2014), provavelmente a etapa


mais negligenciada é a modelagem. Isso se explica por dois motivos:
primeiro, devido à complexidade das ações realizadas nesta etapa,
pois modelar um sistema de software requer a utilização de conceitos
de complexos, a criação de diagramas específicos, a representação do
sistema em diferentes pontos de vista e abstrações, tudo isso sem levar
em consideração que é um processo muito trabalhoso de ser realizado,
exigindo muito esforço da equipe de desenvolvimento; o segundo
motivo é focado no tempo, de acordo com Sommerville (2018), alguns
profissionais acreditam que é muito mais vantajoso empregar mais
esforço e tempo na implementação do que na modelagem, ou seja, na
codificação do que na estruturação. Nesse sentido, é importante frisar
que esta etapa é fundamental para o ciclo, pois é nela em que todas
as métricas, diretrizes e parametrização são feitas, em uma abstração
bem ampla do software, podendo inclusive antecipar situações de
risco, evitar situações de erro e identificar possíveis problemas lógicos,
como diferenças de tipos entre componentes codificados na aplicação e
atributos do banco de dados.

23
1.1 O processo de modelagem

O processo de modelagem, por sua vez, consiste em estruturar


um software através de diretrizes específicas, permitindo uma
ampla abstração a partir de diversas perspectivas. Além disso,
esse processo pode ser conceituado como um processo de criação
de modelos abstratos para auxiliar na extração dos requisitos do
sistema, na sua descrição para os profissionais envolvidos em seu
ciclo de desenvolvimento, para documentação da estrutura e das
funcionalidades desse sistema.

Assim, segundo Fabris e Perini (2014), a partir de perspectivas diferentes,


é possível criar diversos modelos padronizados para representar o
sistema a ser implementado, levando em consideração o ambiente que
este será executado após a conclusão do processo de implantação,
conforme a figura a seguir:

Figura 1 – Perspectivas para criação de modelos de software

Fonte: elaborada pelo autor.

24
Desse modo, a modelagem está relacionada aos aspectos externos de
um software e não somente à sua visão interna. O desenvolvimento de
diagramas permite aos profissionais de TI obter uma ampla abstração
do sistema antes mesmo de implementá-lo, o que permite a criação de
uma espécie de roteiro para a programação do software, traçando uma
linha de raciocínio, um direcionamento na forma de codificar.

Uma maneira muito eficiente de criar esses roteiros é através de


diagramas da UML (Unified Modeling Language), que é o padrão mundial
para modelagem de sistemas adotado em todas as ferramentas CASE
desse segmento. Esse padrão consiste em uma linguagem universal
de estrutura de um sistema de software, que é utilizado, identificado
e compreendido por todos os profissionais envolvido no processo de
desenvolvimento.

Segundo Pressman (2016), a principal vantagem é que, ao padronizar


a modelagem, os profissionais de tecnologia da informação do mundo
todo entenderão a estruturação de um software sem se preocupar com
idiomas, linguagens de programação ou, até mesmo, conceitos culturais
de uma determinada região, pois os diagramas seguem componentes
universais com o mesmo significado em qualquer parte do planeta. Isso
ocorre pelo fato de que esses componentes são os elementos visuais
que formam um diagrama, e por serem gráficos são representados
por cores, figuras geométricas ou polígonos matemáticos, sendo cada
um deles com significado específico. Assim, basta ao desenvolvedor
saber identificar o significado de cada elemento dentro do contexto do
diagrama e o que ele representa.

Mesmo apresentando um padrão internacionalmente reconhecido, é


permitido aos desenvolvedores ter a flexibilidade de fazer adaptações
e customizações voltadas às necessidades exigidas pelo software a ser
implementado. Os modelos gráficos são normalmente empregados
através de três formas distintas:

25
• Para facilitar a discussão e o entendimento sobre o sistema;

• Para documentar o sistema.

• Para descrever detalhadamente o sistema de forma que está


modelagem seja utilizada como base para sua implementação.

1.2 UML

A construção de diagramas exige uma linguagem de modelagem que


inclua elementos visuais que podem expressar conceitos técnicos,
por meio de uma notação simples e ao mesmo tempo poderosa
para esses elementos. Os modelos mais robustos, por sua vez, são
comprovadamente os que adotam as vantagens da orientação a objetos,
até mesmo, porque a maioria das linguagens de programação existentes
atualmente se baseiam neste conceito, o que facilita a integração entre
a modelagem e o código-fonte a ser desenvolvido, na etapa seguinte do
ciclo de desenvolvimento de um sistema de software.

     Entre os anos de 1970 e 1980, foram desenvolvidos os primeiros


métodos para modelar e especificar sistemas orientados a objetos,
criando um padrão que perdura até os dias atuais. Esse período ficou
conhecido como “a guerra dos métodos”, já que vários profissionais
apresentavam conceitos próprios nos quais conseguiam modelar
de forma abrangente um sistema. Nesse contexto, vale lembrar que
desde essa época já se argumentava a importância de se estruturar
um software antes de sua implementação. Assim, após vários estudos
realizados, ficou comprovada que um sistema precisa ser analisado e
visualizado em diferentes perspectivas antes de se iniciar o processo
de codificação, com o intuito era gastar mais tempo estruturando e
menos tempo retrabalhando um código. A ideia é extremamente válida
e aprovada por muitos profissionais da área, mas, ainda assim, ainda
sofria resistência de outros, devido à questão de produtividade e tempo,
já que se acreditava que uma equipe deixaria de ser produtiva ao se

26
dedicar tempo demais no processo de estruturação de um software
(HUMBLE; FARLEY, 2013).

O tempo provou que essa forma de pensar estaria equivocada, já que


a probabilidade de se gastar ainda mais tempo tendo que reescrever
códigos ou de não conseguir entregar uma funcionalidade por completo,
por não ter entendido corretamente o problema. Assim, na década
de 1990, iniciou um período de mudança de paradigma, pois devido
à complexidade cada vez maior dos problemas a serem resolvidos
através de sistemas computacionais, a necessidade de se fazer uma
modelagem mais robusta era mais evidente. De acordo com Pressman
(2016), haviam profissionais que estavam migrando para este conceito e
outros que ainda se mostravam relutantes, pois eles acreditavam que a
maneira “tradicional” de se programar ainda era suficiente, não havendo
motivos para mudanças.

Ainda segundo Pressman (2016), as ferramentas CASE foram as grandes


responsáveis por forçar essa mudança de paradigma, já que visam
facilitar o processo de modelagem e ampliar o poder de abstração,
gerando mais possibilidades ao software e, principalmente, de
reforçar aos desenvolvedores a necessidade de “pensar fora da caixa”,
idealizando o software de uma forma mais ampla e robusta.

Neste momento, entram em cena três personagens que são


fundamentais para a estruturação de um software, sendo eles: Grandy
Booch, Ivar Jacobson e James Rumbaugh, conhecidos como “Três amigos”.
Cada um deles possuíam seus próprios métodos de modelagem. Booch
apresentava um método que tinha seu próprio nome, o de Jacobson
chamava “OOSE” e o de Rumbaugh era o OMT. Os três modelos eram
bons, mas eles perceberam a possibilidade de uni-los, criando uma
abordagem robusta e completa, absorvendo o melhor dos modelos. A
partir deste momento, criou a UML, um modelo padrão de estruturação
de um sistema de software que se tornou referência em todo mundo e
largamente utilizado até os dias atuais (PRESSMAN, 2016).

27
O termo UML significa Unified Modeling Language, em português significa
“Linguagem de Modelagem Unificada”, que atualmente encontra-se na
versão 2.5 e apresenta 14 diagramas que representam o sistema em um
ponto de vista diferente. Porém, a primeira versão da UML foi publicada
em outubro de 1994, quando Booch e Rumbaugh, que na época
trabalhavam na mesma empresa, unificaram seus métodos que eram
aceitos mundialmente. Apenas em 1995 o modelo OOSE de Jacobson
foi incorporado aos outros dois. Assim, há ferramentas CASE que são
utilizadas para criar esses diagramas, como o Astah e o Microsoft
Visio, que são voltadas para modelagem. Além disso, existem algumas
ferramentas de desenvolvimento que tem integrado o recurso de
criação de diagramas através de plug-ins específicos, como o NetBeans e
o Eclipse.

Segundo Pressman (2016), os 14 diagramas atuais da UML são divididos


em três categorias: estruturais, comportamentais e de interação, sendo:

• Estruturais: classes, objetos, componentes, pacotes, instalação ou


implantação, perfil e estruturas compostas.

• Comportamentais: casos de uso, máquina de estados e atividade.

• De interação: sequência, interação, colaboração ou comunicação


e tempo.

28
Figura 2 – Classificação dos diagramas da UML

Fonte: https://upload.wikimedia.org/wikipedia/commons/e/e9/Uml_diagram.png. Acesso


em: 13 maio. 2020.

1.2.1 Diagrama de classes

O diagrama de classes é o principal da UML, que é uma modelagem


totalmente baseada na orientação a objetos e, de acordo esse
conceito, uma classe é a estrutura base de um objeto. Ou seja, é uma
representação do sistema no ponto de vista dele mesmo, ou seja, de
dentro para fora.

Desse modo, uma classe é formada por atributos e métodos, sendo


considerada completa quando apresentar ambos conceitos e parcial
quando apresentar apenas um. Um atributo é o termo que se refere
à todas as características existentes em uma classe, já um método é
toda e qualquer ação realizada por essa classe. Neste diagrama, ainda,

29
são utilizados alguns outros conceitos importantes, como: herança,
associação, agregação, composição e multiplicidade.

A herança é um princípio no qual uma classe pode herdar características


de uma ou mais classes ancestrais e, ainda, permite que ele possua
suas próprias características. No entanto, há duas grandes vantagens
em se utilizar esse conceito no processo de desenvolvimento de um
software. Primeiro, ele deixa a estrutura e toda codificação mais
organizada. Segundo, evita que ocorram duplicações desnecessárias
de código, otimizando todo processo e facilitando a manutenção do
sistema. As ferramentas CASE, como o Astah e o Netbeans apresentam
uma funcionalidade que permite que códigos em linguagem Java sejam
criados automaticamente a partir do diagrama de classes, assim, tudo o
que foi modelado neste diagrama é gerado integralmente na codificação
(OKUYAMA; GONSALES; MILETTO, 2014).

Quando se aplica o conceito de herança, portanto, cria-se uma espécie


de árvore genealógica de classes, em que cada nível representa uma
geração. Assim, outros dois conceitos são instituídos: generalização e
especialização. O primeiro indica visualizar está árvore de baixo para
cima, onde cada nível acima é mais geral, mais abrangente. Já o segundo
é exatamente o contrário, ou seja, a visualização da árvore de cima
para baixo, assim cada nível é mais específico e menos abrangente
que o anterior. A partir desses fatores que surgem os termos classes,
superclasses e subclasses. Uma superclasse é a mais geral de todas, não é
nenhuma outra anterior a ela. Já uma subclasse é qualquer uma que foi
originada de outra classe ancestral.

A associação é a ligação entre duas ou mais classes, relacionando-


as entre si. Já a multiplicidade se refere ao relacionamento entre os
objetos gerados a partir das classes associadas entre si. Essa ligação
é representada por valores como: 0 (zero) e 1 (um) ou por intervalos,
como: 1 para N, 0 para N, N para N ou quaisquer outros valores mais
específicos.

30
A agregação é um tipo especial de associação na qual demonstra
que as informações de uma classe (chamada de todo) precisam ser
complementadas por outras contidas em uma ou mais classes (parte).
Uma composição é semelhante, representando a relação todo-parte, no
entanto, uma classe todo é responsável por criar e destruir suas partes,
assim uma parte não pode se associar a mais de um todo.

A figura a seguir ilustra a representação gráfica destes conceitos que


compõem o diagrama de classes:

Figura 3 – Representação dos conceitos do diagrama de classes

Fonte: elaborada pelo autor.

1.2.2 Diagrama de casos de uso

O diagrama de casos de uso é o diagrama mais geral da UML. Ele


representa o sistema no ponto de vista do usuário, ou seja, de fora
para dentro. Já um caso de uso representa uma ação a ser realizada no

31
software e não ações realizadas pelo usuário, sendo a representação de
uma funcionalidade desse sistema.

Esse diagrama, portanto, é composto basicamente por três


componentes: ator, caso de uso e associação. O ator se refere à
uma pessoa, um equipamento ou um outro sistema que interagirá
diretamente com o software a ser desenvolvido. O caso de uso é toda e
qualquer ação realizada pelo sistema, que deve ser escrita no diagrama
através de um verbo no infinitivo. Já a associação é a ligação entre
ator e caso de uso. Assim, como no diagrama de classes, ferramentas
CASE como o Netbeans e o Eclipse permitem a criação de códigos em
linguagem Java a partir deste diagrama.

Mesmo sendo o diagrama mais geral dos existentes na UML, ele


também possui recursos específicos e mais refinados. A herança,
portanto, pode ser realizada tanto para o caso de uso em si quanto para
os atores, sendo definida na representação dos atores e suas respectivas
interações com o sistema, conforme a Figura 4.

Figura 4 – Herança em um diagrama de Casos de Uso

32
Fonte: elaborada pelo autor.

Na Figura 4, podemos visualizar que o Ator 1 pode realizar duas ações


no sistema e, através do conceito da herança, o Ator 2 pode realizar três
ações, sendo que as duas primeiras são herdadas no Ator 1.

Além disso, há duas formas de identificarmos o relacionamento


entre dois ou mais casos de usos existentes no diagrama, sendo elas
denominadas como: include e extends.

Uma ação do tipo include indica que ela sempre será realizada pelo
sistema quando outra ação anterior for executada pelo sistema, como
o registro de uma venda e a emissão de comprovante dessa venda, que
sempre será realizada pelo sistema toda vez em que a ação de registro
for executada. Uma ação include é realizada de forma automática,
sem que haja a solicitação do usuário. Já uma ação do tipo extends é
semelhante a include, diferindo pelo fato de que o caso de uso somente
será realizado após a execução de uma ação anterior em situações
especiais. Por exemplo, o bloqueio de acesso de um usuário ao sistema
quando ele digitar a senha errada por três vezes consecutivas.

1.2.3 Diagrama de sequência

O diagrama de sequência é uma representação dinâmica do sistema


a ser desenvolvido, ou seja, o software em execução. Ele consiste na
visualização gráfica do passo a passo das ações executadas no sistema
e, também, os possíveis retornos de cada uma dessas ações.

Esse diagrama deve ser desenvolvido para cada caso de uso existente
na modelagem, porém somente para os que estejam vinculados
diretamente a um ator. Ou então, para cada situação do caso de uso,

33
ou seja, todas as possibilidades existentes de retorno para cada ação do
sistema. Nesse contexto, vale ressaltar que não é possível desenvolver
o diagrama de sequência sem que os de casos de uso e de classes
estejam prontos, pois ele utiliza os elementos empregados nestes dois
anteriores.

Figura 5 – Diagrama de sequência

Fonte: ribkhan/iStock.com.

1.3 ASTAH

O ASTAH se trata de uma ferramenta CASE largamente utilizada por


profissionais de TI para modelagem de sistemas de software, sendo uma
ferramenta bastante robusta que permite facilmente criar diagramas da
UML (WERLICH, 2018).

Inicialmente, ela era chamada de JUDE, que é um acrônimo de


“Java and UML Developers Environment”, que em português significa
“Ambiente para Desenvolvedores UML e Java”. Uma de suas principais

34
características é a integração total com a linguagem de programação
JAVA, o que garante a portabilidade com a JVM (máquina virtual) para
desenvolvimento de códigos fonte, permitindo inclusive a transformação
de diagramas da UML para estruturas Java de forma automática, sendo
uma ferramenta multiplataforma, que possui uma versão completa que
é paga. Além disso, há também uma versão para comunidade, voltada à
fins acadêmicos, que está disponível no site oficial do projeto.

Figura 6 – Diagrama de classes utilizando Astah

Fonte: elaborada pelo autor.

O Astah, portanto, possui uma versão chamada Community que pode ser
baixada gratuitamente do site oficial do produto (astah.net).

1.4 Microsoft Visio

Essa é uma ferramenta para ambiente Windows utilizada para criação


de vários tipos de diagramas, como organogramas, fluxogramas,

35
modelagem de dados, UML, layout de redes, plantas baixas, mapas 3D e
cartazes (FABRIS; PERINI, 2014).

Essa ferramenta está instalada como extensão do pacote Microsoft


Office, oferecendo uma biblioteca de templates e modelos para vários
tipos de gráficos, com a finalidade de ajudar o desenvolvedor no
processo de modelagem de um sistema de software. Ela tem como
principais características: simplicidade de uso através de uma interface
bastante amigável, integração total com os demais aplicativos do pacote
Office, flexibilidade de manipulação dos componentes e qualidade visual
dos objetos de tela. Essas características tornam o Visio uma excelente
ferramenta para criação de aplicações rápidas, rascunhos e também
diagramas de uso pessoal ou profissional.

Figura 7–Diagrama de classes utilizando Microsoft Visio

Fonte: elaborada pelo autor.

O Visio possui licença paga, podendo ser adquirido através do site oficial
da Microsoft.

36
1.5 NetBeans

Essa ferramenta é opensource, multiplataforma, que permite


aos desenvolvedores de sistemas de software criar códigos escritos em
linguagens, como: Java, JavaScript, HTML5, PHP, C/C++, Groovy e Ruby.

O Netbeans é uma IDE, uma sigla em inglês: Integrated Development


Environment, em português, “Ambiente de Desenvolvimento Integrado”,
que nada mais é que uma interface que permite criar códigos fontes em
diferentes linguagens de programação e modelagem de sistemas através
de diagramas da UML. Ela permite a funcionalidade de se conectar
com um SGBD, assim, o desenvolvedor poderá criar e manipular um
banco de dados sem a necessidade de se instalar softwares específicos
(BERTAGNOLLI; FRANCO; MACHADO, 2016).

O desenvolvido em linguagem JAVA e devido a máquina virtual JVM,


essa ferramenta pode ser executada em qualquer sistema operacional,
oferecendo ferramentas de primeira classe para o desenvolvimento de
aplicativos para web, desktop e dispositivos móveis, além de ambiente
corporativo utilizando recursos mais robustos como EJB (Enterprise Java
Beans – um container do lado do servidor que permite conectividade
com sistemas de grande porte), JAVA EE (Enterprise Edition – para
criação de aplicações para ambiente corporativo) e JAVAFX (plataforma
para software multimídia a serem executados em diferentes dispositivos
como aparelho de TV, Blu-ray player e console de videogame).

37
Figura 8 – Diagrama de classes utilizando Netbeans IDE

Fonte: elaborada pelo autor.

O acesso a versão completa da ferramenta pode ser feito através do


site oficial da Apache Software Foundation que a disponibiliza para
download.

1.6 Eclipse

Assim como o NetBeans, o Eclipse é uma IDE opensource,


multiplataforma, que permite a criação de códigos fontes para
diferentes linguagens de programação. Além disso, também, é possível
criar diagramas da UML através da instalação de um plug-in específico.
Ele apresenta uma estrutura de interface limpa e organizada através
de várias janelas diferentes com um elevado grau de customização.
Além disso, permite trabalhar com pré-visualizações do projeto em
desenvolvimento, para que possa ver como a aplicação será vista sem a
necessidade compilar (BERTAGNOLLI; FRANCO; MACHADO, 2016).

38
Figura 9 – Diagrama de classes utilizando Eclipse IDE

Fonte: elaborada pelo autor.

Por fim, sua versão completa está disponível para download no site
oficial da empresa Eclipse Foundation.

Referências Bibliográficas
BERTAGNOLLI, S. C.; FRANCO, M. H. I.; MACHADO, R. P. Desenvolvimento de
software III: programação de sistemas Web orientada a objetos em Java. Porto
Alegre: Bookman, 2016.
FABRIS, P. P. G.; PERINI, L. C. Processos de software. Londrina: Editora e
Distribuidora Educacional S.A., 2014.
HUMBLE, J.; FARLEY, D. Entrega contínua: somo entregar software de maneira
rápida e confiável. Porto Alegre: Bookman, 2013.
SOMMERVILLE, I. Engenharia de software. 10. ed. São Paulo: Pearson Education do
Brasil, 2018.
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 8. ed.
Porto Alegre: AMGH, 2016.
OKUYAMA, F. Y.; GONSALES, A. D.; MILETTO, E. M. Desenvolvimento de software I:
conceitos básicos. Porto Alegre: Bookman, 2014.
WERLICH, C. Modelagem de dados. Londrina: Editora e Distribuidora Educacional
S.A., 2018.

39
Ferramentas CASE para
gerenciamento de projeto de
desenvolvimento de software
Autoria: André Olímpio
Leitura crítica: Marcilyanne Gois

Objetivos
• Identificar os diferentes tipos de ferramentas
existentes no mercado atual para modelagem de
softwares.

• Entender o conceito gerenciamento de projetos de


desenvolvimento de sistema de software e aplicá-lo
através de ferramentas específicas.

• Modelar um projeto de desenvolvimento de sistema


de software.

• Entender o funcionamento das seguintes


ferramentas CASE: Microsoft Visual Studio Team
System, Github e Redmine.

40
1. Ferramentas CASE para gerenciamento de
projeto de desenvolvimento de software

A gestão de projetos é um conjunto de práticas, métodos e ferramentas


que possibilitam a organização de tarefas, identificando a sequência de
execução e as dependências existentes entre essas tarefas, apoiando
a alocação de recursos e tempo, além de permitir o rastreamento da
execução das atividades e medição do progresso relativo ao que foi
definido no plano de projeto (PÁDUA FILHO, 2019, p. 83).

Segundo Humble e Farley (2013), uma quantidade significativa


das atividades atuais é orientada às equipes e envolve múltiplas
organizações, sendo essas características determinantes de tarefas
futuras no ambiente de projeto. Assim, lidar com equipes e com
ambiente corporativo diverso, visando desenvolvimento de sistemas
de software, requer habilidades que combinam arte e ciência, sempre
visando cumprir com todas as especificações definidas na etapa inicial
do projeto.

Nesse sentido, é possível afirmar que, segundo Humble e Farley


(2013), existem três pilares nos quais a gestão de projetos se apoia e é
embasada:

• Ter foco em requisitos e na satisfação do cliente.

• Fazer com que a equipe de desenvolvimento trabalhe de forma


produtiva e colaborativa.

• Administrar os recursos de tempo, humanos e financeiros do


projeto.

A gestão de projetos de software compreende na necessidade


de gerenciar atividades que visam assegurar que o sistema a ser
desenvolvido seja entregue cumprindo o prazo pré-determinado e,

41
também, que esteja de acordo com os requisitos definidos pelo cliente.
Essa necessidade se deve ao fato de que o processo de desenvolvimento
esteja sempre sujeito às restrições de qualidade, tempo e orçamento.
Além disso, segundo Sommerville (2018), devido à natureza flexível de
um software e a tendência de mudanças, uma boa prática é adotar um
processo padronizado para administrar toda a ampla arquitetura e a
implementação das funcionalidades do sistema, com a finalidade de que
ambas sejam adequadamente tratadas.

Neste cenário, as ferramentas CASE são apontadas como componentes


essenciais para auxiliar os profissionais de Tecnologia da Informação a
realizarem o trabalho de administração e implementação do software.

Atualmente, há várias ferramentas que podem ser utilizadas na gestão


de projetos de software, que focam no gerenciamento em si, controle
de versões das funcionalidades e implementações, administração
de processo de testes, monitoramento das tarefas realizadas pelos
integrantes da equipe de desenvolvimento e garantia da qualidade das
atividades realizadas em cada etapa existente no processo (HIRAMA,
2011).

1.1 GitHub

O GitHub (2008) é uma plataforma de hospedagem de códigos


com controle de versão usando o Git (2005), ou seja, sistema distribuído
de controle de versões que permite que os dados fiquem armazenados
em repositórios que apresentam um histórico completo de todas as
revisões e alterações feitas em um arquivo. Logo, ele é amplamente
utilizado por programadores para divulgação de seus trabalhos ou
para que outros usuários contribuam com o projeto, além de facilitar a
comunicação através de recursos disponibilizados pela arquitetura.

Assim, o repositório é criado on-line e permite que o desenvolvedor


compartilhe da maneira que achar mais conveniente. Neste repositório

42
é possível criar ramificações (branch) de partes menores do código-
fonte do projeto, reagrupar (merges) as ramificações após a realização
das alterações necessárias, criar cópias (clones) para download e
serem utilizadas em diferentes estações de trabalho, fazer atualização
local (pull), enviar as alterações realizadas local para o servidor web
(push) e também fazer um clone (fork) no próprio ambiente web.
Logo, essa estrutura foi construída com a finalidade de permitir que
sejam realizadas alterações no código-fonte de um software de forma
simultânea por diferentes programadores, eliminando totalmente a
possibilidade de conflitos ou redundâncias (GIT HOW TO, 2019).

Quadro 1 – Comandos do Git


Comandos Descrição

git branch nome_branch Criar branch.

git merge nome_branch Reagrupar branch.

git pull Atualizar uma aplicação


localmente.

git push Enviar versões atualizadas


para o servidor web.

git clone local_origem:local_ Criar clone de um


destino repositório.

Fonte: elaborado pelo autor.

A Figura 1 ilustra um repositório hospedado on-line no GitHub (2008).

43
Figura 1–Tela do site do GitHub.com

Fonte: elaborada pelo autor.

Uma ferramenta CASE bastante utilizada para se trabalhar localmente


com repositórios disponibilizados on-line é o GitHub Desktop (2010),
que é uma extensão do serviço web, permitindo aos desenvolvedores
trabalhar com clones em suas máquinas e, posteriormente, fazendo
o upload, atualizando o projeto, de forma colaborativa, já que
é possível que vários profissionais trabalhem ao mesmo tempo
no desenvolvimento de software, sem a necessidade de estarem
fisicamente no mesmo ambiente, ou seja, de forma remota.

A tela inicial do GitHub Desktop mostra todos os repositórios existentes


localmente na máquina, além de visualizar todos os arquivos que foram
modificados, a fim de que eles possam ser enviados para o repositório
master presente do servidor web, conforme a Figura 2.

44
Figura 2 -Tela inicial do GitHub Desktop

Fonte: elaborada pelo autor.

A Figura 3, por sua vez, mostra o histórico de mudanças feitas no


repositório desde a clonagem, permitindo ao desenvolvedor identificar
e visualizar detalhadamente as ações realizadas e o estado do arquivo a
partir de cada uma das alterações.

Figura 3–Tela de histórico de versões do GitHub Desktop

Fonte: elaborada pelo autor.


45
A Figura 4 ilustra todos os repositórios hospedados no servidor web do
GitHub da conta a qual a ferramenta está vinculada e que podem ser
selecionados para que sejam clonados na máquina local.

Figura 4–Tela de clonagem de repositórios do GitHub Desktop

Fonte: elaborada pelo autor.

O GitHub Desktop é uma ferramenta poderosa e muito eficiente para o


controle de versionamento de um software, além da administração do
trabalho colaborativo dos profissionais envolvidos no desenvolvimento
do sistema.

1.2 Visual Studio Team System (VSTS)

Conhecido como Azure DevOps (2005), Visual Studio Team System é


uma ferramenta CASE robusta utilizada no gerenciamento do ciclo
de vida de aplicativos (ALM) e projetos de software. Administrado

46
pela Microsoft, ele permite o controle de versão de código-
fonte com portabilidade à serviços do GitHub, elaboração de
relatórios, gerenciamento de requisitos, estruturação automatizada de
código, administração de recursos de testes, além de fazer controle de
tarefas e canais de estruturas de pipeline de dados. O VSTS abrange
todo o ciclo de vida de um software, habilitando recursos do DevOps
e pipeline de dados, que no Azure são utilizados como back-end para
diversos ambientes de desenvolvimento integrado (IDE).

O termo DevOps pode ser definido como um conjunto de práticas que


combina o desenvolvimento de software (Dev) com operações realizadas
em um ambiente de tecnologia da informação (Ops), visando garantir
a automação e monitoramento em todas as etapas da construção
do software, fornecendo entregas contínuas de incrementos deste
sistema com alto padrão de qualidade (FABRIS; PERINI, 2014).

O Azure DevOps é uma plataforma que disponibiliza serviços de


gerenciamento de projetos voltados para tecnologia da informação
em ambiente on-line. Esses serviços são chamados de WebApps,
que são aplicativos semelhante aos que são instalados fisicamente
em computadores desktop, notebooks ou dispositivos móveis, com
a diferença de serem criados e entregues diretamente pela Web. De
acordo com Pressman (2016), eles são leves, rápidos e bem confiáveis,
além disso, têm a particularidade de funcionar em qualquer navegador.

O Azure DevOps cria uma estrutura na qual o projeto de software é


administrado em todas suas etapas através de uma única interface,
conforme mostra a Figura 5.

47
Figura 5 –Tela inicial do Microsoft Azure DevOps

Fonte: elaborada pelo autor.

O controle e monitoramento das tarefas existentes no projeto de


desenvolvimento do software através de quadros (boards), permite criar um
amplo panorama de cada uma dessas tarefas, conforme mostra a Figura 6.

Figura 6 –Tela de quadros (boards) do Microsoft Azure DevOps

Fonte: elaborada pelo autor.

48
A Figura 7, por sua vez, ilustra uma interface que permite vincular o
projeto atual com um repositório hospedado no GitHub (2018), além de
oferecer a possibilidade de se utilizar seus comandos principais como
pull, merge, fork e push.

Figura 7–Tela de repositórios do Microsoft Azure DevOps

Fonte: elaborada pelo autor.

O termo Pipeline de dados são canais criados para garantir o fluxo de


informações geradas a partir de entradas específicas nas quais os
dados contidos serão devidamente processados e enviados para outro
processo. O fluxo do pipeline é dividido em três etapas distintas: o data
engineering, que é responsável por fazer a coleta dos dados, remover
inconsistências e inseri-los no ambiente de armazenamento variado
(data lake); o data preparation, que é um processo de refinamento
e enriquecimento de dados, adicionando as regras de negócio
para disponibilizar uma base consistente para o próximo fluxo; e o
analytics, que é um processo onde são feitas as análises sobre todos os
dados tratados na etapa anterior (NOGUEIRA, 2018).

49
Ao criar uma estrutura de pipeline de dados neste projeto, o Azure
DevOps apresenta uma interface bastante clara e amigável para
gerenciar as entradas e saídas existentes nesta estrutura, fornecendo
inclusive a possibilidade de editar a mesma em ambientes de
programação como o Visual Studio e o Eclipse.

Além disso, o Microsoft Azure possui uma estrutura de pipeline


através de um serviço em nuvem, no qual permite criar e testar
automaticamente projetos de código e disponibilizá-los para outros
usuários. Assim, é possível fazer uma combinação entre os conceitos
de integração contínua (CI – continuous integration) e entrega contínua
(CD – continuous delivery) para testar e criar de forma constante e
consistente o código-fonte, que podem ser escritos em diferentes
linguagens de programação como Python, Java, C#, JavaScript e PHP.

Figura 8 –Tela de pipeline do Microsoft Azure DevOps

Fonte: elaborada pelo autor.

50
O Azure Boards faz um gerenciamento de projetos de software,
fornecendo um conjunto robusto de recursos, incluindo o suporte
nativo para métodos como Scrum e Kanban, além de estrutura gráfica
personalizável e integração com relatórios. Logo, ele permite iniciar
com rapidez e facilidade o rastreamento de histórias de usuários (user
stories), gerenciamento de controle de itens de lista de pendências,
tarefas, recursos e bugs associados ao projeto.

O Azure Repos é um conjunto de ferramentas de controle de versão


utilizado para projetos de software de grande ou pequeno porte, que
auxilia a rastrear as alterações feitas no código-fonte ao longo do
tempo, através de uma funcionalidade que gera um relatório gráfico
de todos os arquivos existentes no projeto. Assim, o controle de versão
salva esse screenshot de forma permanente para que seja recuperado
posteriormente, caso seja necessário.

O Azure Test Plans trata-se de um conjunto de componentes que


permitem a realização de testes em um ambiente próprio, gerando
resultados através de gráficos e relatórios de controle de código-fonte,
com objetivo de gerar qualidade e permitir colaboração em todo o
processo de desenvolvimento. 

1.3 Redmine

O EasyRedmine (2018), é uma ferramenta CASE para gerenciamento


de projetos baseados em serviços web e correção de bugs. Apresenta
módulos como calendário (schedule) para administração de
cronogramas e gráficos de Gantt para ajudar na representação visual
dos projetos e seus prazos de entrega (deadlines). Permite também o
gerenciamento simultâneo de múltiplos projetos.

O código-fonte do Redmine é escrito com base no framework Ruby


on Rails, que é um conjunto de bibliotecas utilizadas para aumentar
a velocidade e a facilidade de criação de websites orientados a banco

51
de dados, ou seja, aplicações baseadas em estruturas pré-definidas
com conectividade com a maioria dos bancos de dados existentes
no mercado. Além disso, ele apresenta total integração com serviços
disponibilizados no GitHub.

O Redmine é a combinação entre um novo design customizável e


uma estrutura de plugins e recursos que tornam a gestão de projetos
mais agradável, eficiente e produtiva, melhorando a comunicação e
a experiência do usuário, além de proporcionar economia de tempo
na obtenção de resultados. Essa ferramenta é extensível a plugins de
recursos de métodos ágeis, de finanças e serviços de CRM (Customer
Relationship Management), que são interfaces que permitem a gestão
do relacionamento com o cliente (PÁDUA FILHO, 2019).

A Figura 9 mostra a interface inicial do EasyRedmine:

Figura 9 –Tela inicial do site EasyRedmine.com

Fonte: elaborada pelo autor.

Portanto, essa ferramenta é bastante robusta, oferecendo ao


desenvolvedor uma visão ampla de todos as tarefas realizadas nas

52
diferentes etapas do processo de desenvolvimento de um sistema de
software. Segundo Humble e Farley (2013), um dos maiores desafios
existentes na gestão de projetos é o monitoramento eficiente das
tarefas realizadas e consequentemente seu controle de qualidade. O
EasyRedmine consegue, através de uma única interface, listar dados
importantes com relação a cada tarefa do processo, como os integrantes
que a acessam e que são responsáveis, a progressão de execução em
tempo real, a quantidade de tempo produtivo (billable time) e o status
atual desta tarefa, conforme é ilustrado na figura a seguir:

Figura 10 –Tela de gerenciamento de tarefas (management task) do


site EasyRedmine.com

Fonte: elaborada pelo autor.

O gerenciamento do cronograma, por sua vez, permite definir as datas


de início e fim das tarefas existentes no processo, classificar cada uma
destas tarefas em categorias específicas, definir no calendário o horário
de execução e gerar lembretes, conforme é ilustrado na Figura 11, a
seguir:

53
Figura 11 –Tela de cronograma (schedule) do site EasyRedmine.com

Fonte: elaborada pelo autor.

O desenvolvimento de um sistema de software é um projeto, é


como tal, ele apresenta um grande número de variáveis que devem
ser tratadas pelos profissionais de TI envolvidos neste processo. As
ferramentas CASE servem para auxiliar estes profissionais a monitorar
e controlar a execução de cada tarefa existente no projeto, afim de elas
estejam de acordo com os requisitos previamente definidos e que as
funcionalidades do sistema estejam de acordo com esses requisitos,
atingindo todos os objetivos estipulados.

Referências Bibliográficas
FABRIS, P. P. G.; PERINI, L. C. Processos de Software. Londrina: Editora e
Distribuidora Educacional S.A., 2014.
HIRAMA, K. Engenharia de software: qualidade e produtividade com tecnologia.
Rio de Janeiro: Elsevier, 2011.

54
HUMBLE, J.; FARLEY, D. Entrega contínua: como entregar software de maneira
rápida e confiável. Porto Alegre: Bookman, 2013.
NOGUEIRA, J. H. M. Engenharia de software: métodos orientados a objetos e ágeis.
Fortaleza, CE: Amazon KDP, 2018.
SOMMERVILLE, I. Engenharia de software. 10. ed. São Paulo: Pearson Education do
Brasil, 2018.
PÁDUA FILHO, W. P. Engenharia de software: projetos e processos. 4. ed. Rio de
Janeiro: LTC, 2019. .
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 8. ed.
Porto Alegre: AMGH, 2016.
EasyRedmine: gerenciador on-line de projetos de software. Easy Software Ltd,
2018. Disponível em: http://www.easyredmine.com. Acesso em: 5 maio 2020.
Git How to: Tutorial guiado de GIT. 2019. Disponível em: http://www.githowto.
com/pt-Br. Acesso em: 12 maio 2020.
GITHUB: Controle de versionamento de software. GitHub Inc., 2008. Disponível
em: http://www.github.com. Acesso em: 3 maio 2020.
Visual Studio Team System: Gerenciador de projetos de software. Microsoft,
2005. Disponível em: http://azure.microsoft.com. Acesso em: 3 maio 2020.

55
Ferramentas para automação de
testes de software
Autoria: André Olímpio
Leitura crítica: Marcilyanne Gois

Objetivos
• Identificar os diferentes tipos de ferramentas
existentes no mercado atual para modelagem de
softwares.

• Entender o conceito gerenciamento de projetos de


desenvolvimento de sistema de software e aplicá-lo
através de ferramentas específicas.

• Compreender a estrutura do ciclo de liberação de


um sistema de software.

• Entender o funcionamento das seguintes


ferramentas CASE: Selenium IDE, Apache JMeter,
Appium, Cucumber e Robotium.

56
1. Ciclo de liberação e automação de testes de
software

O processo de efetuar testes em um sistema de software se refere à


investigação de cada componente e sua funcionalidade existente, a fim
de fornecer informações sobre qualidade, em relação ao contexto do
qual esse software deve operar, tendo relação direta com os conceitos
de verificação e validação.

Segundo Pressman (2016), testar um software é a ação de varrer o


sistema no intuito de encontrar possíveis falhas e corrigi-las. Em geral,
os testes devem ser realizados por profissionais ou por um grupo
específico de usuários finais, devendo englobar as etapas do processo
de desenvolvimento do software, envolvendo ações que vão desde o
levantamento de requisitos até a execução dos testes.

Segundo Sommerville (2018), no gerenciamento de software os testes


são necessários para verificação de que todos os requisitos foram
implementados e se as necessidades do cliente foram devidamente
atendidas. Por sua vez, esses testes podem apontar que alterações
corretivas são necessárias de ser realizadas, propondo à equipe de
desenvolvimento a atualização do código-fonte da aplicação. Após isso, o
software estaria apto a ser entregue aos usuários do mesmo, conforme
ilustra a figura a seguir:

57
Figura 1 – Representação das etapas finais do ciclo de
desenvolvimento de software

Fonte: elaborada pelo autor.

A implementação é o momento no qual o código-fonte da aplicação


é construído por meio de uma ou mais linguagens de programação.
Em seguida, testes pontuais são realizados em todo este processo,
como verificar se uma rotina está funcionando corretamente. Após
a conclusão da implementação, testes mais robustos são realizados,
principalmente no ponto de vista do usuário final da aplicação. E, por
fim, o software é entregue para ser implantado no ambiente do usuário.

58
Durante a realização dos testes, as tarefas realizadas são focadas
no cumprimento dos requisitos realizados nas funcionalidades do
sistema. Após concluídos os testes, o software se encontra liberado
para que possa ser instalado no ambiente do usuário. Essa liberação,
também conhecida como release, é o momento de lançamento de uma
nova versão oficial do produto de software. Cada vez que um produto
de software é criado ou modificado, a equipe de desenvolvimento
decide sobre como distribui-lo a seus usuários. O sistema é produzido,
identificado e liberado sob uma versão de programa, que é a
identificação que garante que este sistema seja diferente a qualquer
outra versão anterior ou posterior.

Além disso, há um processo chamado controle de versionamento,


que tem por característica principal fazer o gerenciamento de ações
corretivas e de atualizações realizadas em um sistema de software. Por
sua vez, essas ações são classificadas em duas categorias: corretiva e de
agregação de novos recursos, sendo que cada tipo indica a nomenclatura
utilizada para definir a versão do software (HUMBLE; FARLEY, 2013).

Mesmo após a realização dos testes, um software poderá sofrer


alterações quando forem necessárias. As versões de testes são
classificadas como alfa e beta, conforme o ambiente no qual estes são
executados durante o processo de desenvolvimento do sistema de
software.

Durante a execução de teste de versão alfa, os desenvolvedores


verificam o código-fonte construído, os componentes da interface
com o usuário, conectividade com outros sistemas e banco de dados.
O objetivo é fazer uma verificação completa do software em dois
ambientes: front-end e back-end.

Já o teste beta é realizado por um grupo específico, que analisa o


software através do ponto de vista do usuário final, com o objetivo de
analisar as funcionalidades do sistema e cumprimento dos requisitos.

59
Além disso, há, ainda, outros tipos de testes que são realizados em um
sistema de software, entre os quais destacam-se: funcional e gama. O
teste funcional se refere às ações nas quais tem por objetivo identificar
se a aplicação consegue atender plenamente os requisitos funcionais
definidos no início do processo de desenvolvimento. Já o teste gama é
uma verificação de uma aplicação considerada como mal testada em
ambiente de desenvolvimento, cabendo ao usuário final realizar os
devidos testes e oferecer feedback ao fabricante do software.

1. Selenium

O Selenium se trata de uma ferramenta CASE que apresenta um


ambiente integrado de desenvolvimento para scripts de testes
automatizados, que permite gravar, editar e depurar os testes para
aplicações desenvolvidas para plataforma Web. Esse ambiente inclui
o Selenium Core, que gera uma arquitetura para gravar e reproduzir
os testes, reproduzindo situações reais nas quais os testes serão
executados. Ele permite automatizar os testes de sistema, sendo que a
ferramenta também simplifica os testes de regressão, já que a qualquer
momento pode-se realizar um mesmo teste nas novas versões do
sistema.

O Selenium (2004) apresenta uma interface gráfica bastante simplificada


e de fácil entendimento pelo usuário, que permite a escrita de scripts de
maneira gráfica com apenas um clique do mouse sobre o elemento e
adicionar o evento. Originalmente, o script é gerado em HTML, podendo
ser exportado para linguagens como C#, PHP e Java. Veja na figura a
seguir a interface do Selenium:

60
Figura 2 – Interface do Selenium IDE

Fonte: elaborada pelo autor.

Essa ferramenta apresenta três versões distintas: Selenium WebDriver,


Selenium IDE e Selenium Grid.

Com o WebDriver é possível criar suítes de testes para automação de


regressão robustos e baseados em navegador, dimensionar e distribuir
scripts em aplicações web, criar uma coleção de ligações específicas do
idioma para acionar um navegador do jeito que deve ser dirigido. Essa
versão é indicada para testes mais elaborados e para usuários que sejam
familiarizados com a ferramenta.

O Selenium IDE é utilizado para criar scripts para reprodução de erros,


ajudar em testes exploratórios auxiliados pela automação de recursos
e fazer testes básicos, permitindo exportar os scripts e editá-los

61
posteriormente para se realizar testes mais elaborados. Ele apresenta
também um complemento para os navegadores Google Chrome (2008)
e Mozilla Firefox (2004), que fará a gravação e reprodução simples de
interações com o navegador.

O Selenium Grid, por fim, permite distribuir e executar testes em várias


máquinas, além de gerenciar vários ambientes a partir de um ponto central,
facilitando a execução de testes em uma vasta combinação de navegadores
e sistemas operacionais.

1.1 Apache JMeter

Apache JMeter é uma ferramenta CASE que realiza testes de carga e de


estresse em recursos estáticos ou dinâmicos existentes em um sistema
de software. O JMeter (1999) é desenvolvido pela empresa Apache e faz
parte do projeto Jakarta, que é um “guarda-chuva” para diversas aplicações
criadas em linguagem Java.

Segundo a Apache Foundation, empresa fabricante da ferramenta, ele


foi originalmente projetado para realizar testes em aplicações voltadas
para ambiente Web, mas desde então passou a cobrir diversas outras
tecnologias de software cliente/servidor, como conexões de bancos de
dados JDBC (Java DataBase Connectivity), serviços de mensagens JMS (Java
Message Service) e serviços de diretórios LDAP (Lightweight Directory Access
Protocol).

Para a realização de testes, o JMeter disponibiliza diversos tipos


de requisições e seus respectivos resultados. Além de apresentar
controladores lógicos, como ciclos e controles condicionais que são
utilizados na construção de planos de testes funcionais. Ele disponibiliza,
também, um controle de threads (processos de um sistema operacional
que é dividido em duas ou mais partes que são executadas paralelamente)
para configurar a quantidade de vezes que cada thread será executado

62
e o intervalo entre cada execução. Essa configuração é muito utilizada na
realização de testes de estresse.

Os componentes no JMeter são recursos que podem ser utilizados para


criar rotinas de testes para aplicações e de performance. Segundo Fabris
e Perini (2014), testar a performance de um software objetiva encontrar
o limite de processamento de dados no melhor desempenho deste
sistema. Neste teste, portanto, é avaliada a capacidade de resposta em
determinados cenários e configurações, sendo uma ferramenta opensource
que permite desenvolver melhorias e customizações para atender melhor
o projeto a ser testado, como criar plug-ins para gerar relatórios, além
daqueles que a ferramenta já oferece. Além disso, ele oferece um processo
de instalação bem simples, podendo ser configurado para qualquer sistema
operacional. Por ser desenvolvido em linguagem Java, o JMeter requer que
o JRE (Java Runtime Environment) para ser executado.

A interface com o usuário é bastante simples, intuitiva e disponibilizada em


diferentes idiomas, inclusive em português. A figura a seguir demonstra
está interface:

63
Figura 3 – Interface do Apache JMeter

Fonte: elaborada pelo autor.

Mesmo sendo gratuito, o JMeter apresenta muitos recursos para efetuar


testes completos em projetos de software, como:

• Componentes que auxiliam na gestão dos scripts de teste e no


controle de cenários aplicados, facilitando sua manutenção.

• Componentes para configurações de ambientes de testes para


execução em servidores e em outros terminais.

• Componentes para auxiliar nas avaliações das respostas recebidas


para as requisições enviadas aos servidores.

Além disso, essa ferramenta apresenta também controles de gravação


de scripts que ajudam a economizar tempo no desenvolvimento do
projeto de software; componentes para extrair a expressão regular
que auxilia a coleta de dados dos resultados retornados para realizar

64
validações durante o processo de testes; variáveis de script de teste
para deixar o teste o mais próximo do cenário real onde o sistema será
implantado; objetos para criar e executar testes funcionais e em banco
de dados.

1.2 Appium

É uma ferramenta CASE opensource utilizada para executar scripts de


automação e testar aplicativos nativos, aplicações Web para dispositivos
móveis e sistemas híbridos para sistemas operacionais Android (2008)
ou Apple iOS (2007) utilizando drivers de conectividade em ambiente
web.

O Appium (2011) é uma multiplataforma que permite escrever testes


em diferentes sistemas operacionais utilizando a mesma API (Application
Programming Interface), uma rotina que permite conectividade do
software com diferentes tecnologias. Essa característica garante a
reutilização de código entre os testes realizados nestas plataformas.

Além disso, ele apresenta uma interface simples, visualizando a


estrutura de comandos de prompt (estilo MS-DOS e Linux), na qual
permite a criação de um servidor (local ou remoto) no qual serão
executados os planos de testes, que poderão ser compartilhados em um
ambiente de rede, distribuindo os resultados em máquinas diferentes. A
Figura 4 ilustra a interface do Appium:

65
Figura 4 – Interface do Appium

Fonte: elaborada pelo autor.

Essa ferramenta, por sua vez, foi projetada para atender às necessidades
de automação mobile, fazendo testes de desempenho em aplicações
desenvolvidas para dispositivos móveis, respeitando uma filosofia
descrita por quatro princípios:

1. Não há necessidade de recompilar o aplicativo ou modificá-lo para


automatizar recursos e processos.
2. Não se deve ficar preso a uma linguagem ou estrutura específica
para escrever e executar os testes.
3. Uma estrutura de automação móvel não deve reinventar a roda
quando se trata de API’s a serem utilizados na integração com
outras tecnologias.
4. Uma estrutura de automação móvel deve ser de código aberto.

66
1.3 Cucumber

De acordo com Hirama (2011), é uma ferramenta CASE que foi


originalmente criada para apoiar o desenvolvimento de testes de
aceitação automatizado, utilizando o conceito de BDD (Behavior
Driven Development, em português, “Desenvolvimento Guiado por
Comportamento”), que é uma técnica de desenvolvimento ágil que
estimula colaboração entre desenvolvedores, departamentos de
qualidade e pessoas não técnicas ou de negócios num projeto de
software.

O Cucumber (2014) já foi desenvolvido em linguagem Ruby e traduzido


em outras estruturas, como o Java, permitindo a integração de
diferentes tecnologias. Para se utilizar este framework, é necessário
seguir os passos:

• Descrever o comportamento do software através de um texto


simples.

• Escrever/carregar os códigos a serem testados.

• Executar os passos e visualizar os resultados que gerarem falhas.

• Reescrever o código para fazer os passos avançar.

• Se necessário, refatorar o código ou o comportamento descrito.

A Figura 5 ilustra uma interface de saídas de dados, exibindo o resultado


gerado a partir da execução do plano de testes:

67
Figura 5 – Interface do Cucumber

Fonte: elaborada pelo autor.

Segundo Nogueira (2018), cada trecho de código, começando com


a interface de usuário, pode ser considerado como um cliente de
outros módulos de código no qual a interface é utilizada. Assim, cada
elemento deste código provê algum tipo de comportamento no qual, em
colaboração com outros componentes, define a estrutura da aplicação.

A primeira parte de código do BDD a ser implementada é a interface de


usuário, pois, dessa maneira, os desenvolvedores podem se beneficiar
com um feedback rápido se a interface está adequada ou não. Assim,
por meio do código, utilizando princípios de design e refatoração, é
possível criar agentes colaboradores para a interface de usuário e,
posteriormente, para cada unidade ou sub-rotinas existentes neste
código.

1.4 Robotium

É uma ferramenta CASE opensource utilizada para criar estruturas


de teste para escrever casos de teste automáticos para aplicativos

68
Android, permitindo a escrita de cenários de teste de função, sistema e
aceitação, abrangendo várias atividades para aplicações mobile.

O Robotium (2014) é um framework de código aberto de testes


funcionais automatizados para plataforma Android e tem foco em testes
a nível de usuário, no ambiente de front-end. Esses testes são escritos
em linguagem Java, sendo instalados em um dispositivo e executado
como um aplicativo separado, assim, ele simula a interação entre
usuário e o software.

Essa ferramenta é semelhante ao Selenium, com o diferencial de ser


voltado para plataforma mobile. Ele tem como característica o suporte
à vários recursos do Android, como atividades de gerenciamento de
entrada e saída de dados, touchscreen, menus suspensos, menus de
contexto, instruções multimídia e alocação de memória utilizando a
máquina virtual Dalvik.

Com a realização de testes automatizados, o desenvolvedor consegue


garantir maior segurança para realizar manutenções evolutivas
(agregação de novos recursos) ou corretivas no software. O Robotium
permite a verificação instantânea de qualquer modificação que tenha
impactado de forma negativa em outro ponto do sistema.

Segundo Hirama (2011), os testes de interface gráfica conseguem


poupar horas de trabalho repetido da equipe de analistas de teste,
principalmente no momento de realizar os testes de regressão. Se
esse processo for manual, ele pode ser muito custoso e perigoso para
a organização, pois o profissional é um ser humano e nem sempre
conseguirá realizar a mesma tarefa da mesma forma diversas vezes,
como é preciso.

A interface com o usuário é bastante simples, com vários recursos


visuais e encadeamento de ambientes de aplicativos mobile. A figura a
seguir, por sua vez, demonstra a interface do Robotium:

69
Figura 6 – Interface do Robotium

Fonte: elaborada pelo autor.

O Robotium apresenta algumas vantagens, como: efetuar testes nativos


e híbridos bem robustos dos aplicativos executados em ambiente
Android; não requer conhecimentos profundos sobre testabilidade
de software, pois é bem prático e os resultados são bem completos;
gerenciar várias atividades do Android automaticamente em uma única
arquitetura e controlá-las paralelamente; fazer execução rápida de
casos de teste; integrar com outras tecnologias como banco de dados e
aplicações Web.

De acordo com Nogueira (2018), ele também apresenta desvantagens,


como: dificuldade em interagir com componentes Web; impossibilidade
de interação com componentes visuais importantes da interface mobile
como barra de status de notificações e visualizador de widgets externos.

Os testes de interface gráfica são de mais alto nível do que os


tradicionais testes unitários. O Robotium, nesse sentido, permite
a simulação de eventos com um clique de um botão do mouse ou
pressionando de uma tecla, assim, testando as respostas geradas a
partir de um determinado trecho de código. Segundo Pádua Filho
(2019), a grande vantagem é a possibilidade de evitar a necessidade de

70
repetição de teste a determinada funcionalidade todas as vezes que ela
sofrer alguma alteração. Como o procedimento está automatizado, o
esforço é minimizado sempre que necessário, poupando horas e horas
de trabalho de uma equipe inteira de analistas de teste.

Referências Bibliográficas
FABRIS, P. P. G.; PERINI, L. C. Processos de software. Londrina: Editora e
Distribuidora Educacional S.A., 2014.
HIRAMA, K. Engenharia de software: qualidade e produtividade com tecnologia.
Rio de Janeiro: Elsevier, 2011.
HUMBLE, J.; FARLEY, D. Entrega contínua: como entregar software de maneira
rápida e confiável. Porto Alegre: Bookman, 2013.
NOGUEIRA, J. H. M. Engenharia de software: métodos orientados a objetos e ágeis.
Fortaleza, CE: Amazon KDP, 2018.
SOMMERVILLE, I. Engenharia de software. 10. ed. São Paulo: Pearson Education do
Brasil, 2018.
PÁDUA FILHO, W. P. Engenharia de software: projetos e processos. 4. ed. Rio de
Janeiro: LTC, 2019. PRESSMAN, R. S. Engenharia de software: uma abordagem
profissional. 8. ed. Porto Alegre: AMGH, 2016.
Apache JMeter: Suite de teste de software
Apache Foundation, 1999. Disponível em: http://jmeter.apache.org. Acesso em: 11
maio 2020.
APPIUM: software para automação de testes
Appium JS Foundation, 2011. Disponível em: http://appium.io. Acesso em: 11 maio
2020.
Cucumber: ferramenta de automação de testes de software
Cucumber SmartBear Software, 2014. Disponível em: http://cucumber.io. Acesso
em: 11 maio 2020.
Robotium: suite de teste para aplicações mobile
Robotium Tech., 2014. Disponível em: http://robotiumtech.com. Acesso em: 11 maio
2020.

71
Bons estudos!

72

Você também pode gostar