0
ORGANIZAÇÃO SETE DE SETEMBRO DE CULTURA E ENSINO
FACULDADE SETE DE SETEMBRO - FASETE
CURSO DE BACHARELADO EM SISTEMAS DE INFORMAÇÃO
CLEILSON SANTANA GOMES
UM ESTUDO COMPARATIVO SOBRE A
EFICÁCIA DA PROGRAMAÇÃO INTUITIVA
PAULO AFONSO – BAHIA
JULHO - 2008
1
CLEILSON SANTANA GOMES
UM ESTUDO COMPARATIVO SOBRE A
EFICÁCIA DA PROGRAMAÇÃO INTUITIVA
Monografia apresentada ao curso
de graduação em Sistemas de
Informação da Faculdade Sete de
Setembro
–
FASETE,
como
requisito para obtenção do título de
Bacharel
em
Sistemas
de
Informação, sob a orientação do
professor Alberto César C. França.
PAULO AFONSO – BAHIA
JULHO - 2008
2
DEDICATÓRIA
Dedico este trabalho primeiramente a Deus, pois sem
ele, nada seria possível.
Em especial aos meus pais, irmãs e sobrinhos, ao meu
amor, Nayane Santos, pelo esforço, dedicação e
compreensão, em todos os momentos desta e de outras
caminhadas.
3
AGRADECIMENTOS
A Deus, aos meus pais, Marlene Santana Gomes e João Batista Gomes, a
minha família e a minha noiva Nayane Santos e sua família, agradeço
eternamente com todo amor possível.
Ao professor César França, pelo apoio, orientação, incentivo, confiança,
paciência, compreensão, deste trabalho o que me levou a um grande
enriquecimento profissional e intelectual. Bem como, aos professores: Igor
Medeiros, Juliana Motta, Ricardo Azevedo, Ryan, Leobson, Síllas Félix,
Marcília, Wendell Veras, entre tantos, que agradeço por estarem comigo
nesses 4(quatro) anos, onde puderam me dar um melhor encaminhamento no
curso.
Aos colegas de trabalho, Rodrigo Fonseca, Mardo David, Kennedy Noia,
Fabiano Vaz, Marcus Carneiro, Emmanuel Monteiro e toda equipe da
Assessoria de informática, em especial Verlânio Gallindo, por terem colaborado
neste processo.
Agradecimentos especiais aos amigos e colegas (alunos) do curso de Sistemas
de Informação que contribuíram direta ou indiretamente com a minha formação.
Não poderia deixar de agradecer a todos que fazem a Freire Informática LTDA
e Softwell Solutions, em especial à: Wellington Freire, Wedson Freire, Cláudio
Oliveira,Thiago Costa, Iuri Souza e Silvia Uchoa.
4
RESUMO
Com o crescimento do mercado de desenvolvimento de software e o alto grau
de competitividade entre as empresas, procura-se maneiras de entregar
produtos de qualidade no mínimo tempo possível, e para se obter isto existem
diversos fatores que podem influênciar, tendo como um dos principais a
tecnologia adotada. O que quando não há a escolha certa, pode gerar dentre
outros problemas, altos custos de manutenção e barreiras para atender ao
cronograma de desenvolvimento. Software é um dos principais componentes
de muitas organizações, sendo assim, é importante que sejam confiáveis,
seguros e flexíveis. Esse estudo visa levantar informações que possam
despertar o interesse dos profissionais de TIC, buscando meios de tornar o
desenvolvimento de software mais intuitivo (de alto nível). Por fim, é realizado
experimento comparativo entre os paradigmas Procedural, Orientado a Objetos
e Programação Intuitiva, a fim de verificar a produtividade e as vantagens
competitivas em termos de custo de tempo do desenvolvimento de soluções.
Categorias: Paradigmas de Programação, engenharia de software,
produtividade de software.
Palavras-chave: Programação Intuitiva, desenvolvimento de software.
5
ABSTRACT
With the growth of the market for software development and high degree of
competition between companies, is looking for ways to deliver quality products
of the least time possible, and to achieve this there are several factors that can
influence, and as one of the main technology adopted. What if there is the right
choice, can generate among other problems, high maintenance costs and
barriers to meet the schedule of development. Software is a key component of
many organizations, so it should be reliable, secure and flexible. The study aims
to raise information that may arouse the interest of the TIC professionals,
seeking ways to make software development more intuitive (high level). Finally,
comparative experiment is performed between the paradigms Procedural, the
Object Oriented Programming and Intuitiva to verify the performance and
competitive advantages in terms of time cost of the development of solutions.
Category: Paradigms of programming, software engineering, productivity
software.
Keywords: Intuitive programming, software development.
6
SUMÁRIO
CAPÍTULO 1 .................................................................................................... 12
INTRODUÇÃO ................................................................................................. 12
1.1 CONSIDERAÇÕES INICIAIS ................................................................. 13
1.2 OBJETIVOS............................................................................................ 15
1.2.1 GERAL ............................................................................................. 16
1.2.2 ESPECÍFICOS ................................................................................. 16
1.3 ESTRUTURA DO TRABALHO ............................................................... 16
CAPÍTULO 2 .................................................................................................... 17
REFERENCIAL TEÓRICO............................................................................... 17
2.1 PARADIGMAS DE PROGRAMAÇÃO .................................................... 18
2.1.1 DEFINIÇÃO...................................................................................... 18
2.1.2 PARADIGMA PROCEDURAL OU IMPERATIVO............................. 19
2.1.3 PARADIGMA ORIENTADO A OBJETOS ........................................ 19
2.1.4 COMPARAÇÃO ENTRE OS PARADIGMAS ................................... 21
2.2 PROGRAMAÇÃO INTUITIVA................................................................. 25
2.2.1 DEFINIÇÃO...................................................................................... 25
2.2.2 USO DE FLUXOGRAMAS PARA TORNAR A PROGRAMAÇÃO
MAIS INTUITIVA ....................................................................................... 26
2.3 OUTROS ESTILOS DE PROGRAMAÇÃO............................................. 31
2.3.1 LINGUAGEM DE DOMÍNIO ESPECÍFICO ...................................... 31
2.3.2 LINGUAGEM NATURAL CONTROLADA ........................................ 33
2.4 PRODUTIVIDADE DE SOFTWARE ....................................................... 34
2.5 FRAMEWORK PARA PRODUTIVIDADE ............................................... 37
2.5.1 CAKEPHP ........................................................................................ 37
2.5.2 JPA/NETBEANS .............................................................................. 38
2.5.3 MAKER ............................................................................................ 38
CAPÍTULO 3 .................................................................................................... 40
ASPECTOS METODOLÓGICOS .................................................................... 40
3. METODOLOGIA ....................................................................................... 41
3.1 DELIMITAÇÃO DA PESQUISA........................................................... 42
7
3.2 COLETA DE DADOS .......................................................................... 42
3.3 FERRAMENTAS UTILIZADAS NO DESENVOLVIMENTO DOS
SOFTWARES ........................................................................................... 42
3.4 HARDWARE E SISTEMA OPERACIONAL UTILIZADO..................... 43
CAPÍTULO 4 .................................................................................................... 44
APRESENTAÇÃO E INTERPRETAÇÃO DOS DADOS ................................. 44
4.1 RESULTADO DO EXPERIMENTO REALIZADO COMPARANDO AS
LINGUAGENS DE PROGRAMAÇÃO PROPOSTAS ATRAVÉS DE UMA
ANÁLISE QUALITATIVA .............................................................................. 45
4.2 ANÁLISE DAS APLICAÇÕES ................................................................ 46
4.2.1 COM O CAKEPHP, UTILIZANDO O PARADIGMA PROCEDURAL 46
4.2.2 NO JPA/NETBEANS, UTILIZANDO O PARADIGMA ORIENTADO A
OBJETOS ................................................................................................. 48
4.2.3 NO MAKER, UTILIZANDO A PROGRAMAÇÃO INTUITIVA............ 49
4.3 RESULTADO GERAL............................................................................. 50
CONSIDERAÇÕES FINAIS ............................................................................. 52
CONCLUSÃO ............................................................................................... 53
TRABALHOS FUTUROS.............................................................................. 54
REFERÊNCIAS BIBLIOGRÁFICAS ............................................................. 55
APÊNDICE....................................................................................................... 60
APÊNDICE A – CASO DE USO DO SISTEMA DESENVOLVIDO ............... 61
APÊNDICE B – ROTEIRO DE ANÁLISE DOS SOFTWARES
DESENVOLVIDOS ....................................................................................... 65
APÊNDICE C – FORMULÁRIO COM OS TEMPOS DE DURAÇÃO DE CADA
APLICAÇÃO ................................................................................................. 66
8
LISTA DE ILUSTRAÇÕES
1. Ilustração 1 Programa em pascal para calcular a área e o perímetro de
um Retângulo ........................................................................................ 22
2. Ilustração 2 Programa em Java para calcular a área e o perímetro de um
Retângulo, utilizando o paradigma procedural ...................................... 23
3. Ilustração 3 Objeto Retangulo, que servirá para calcular a área e o
perímetro de um Retângulo, quando invocado pelo objeto Janela, no
paradigma orientado a objetos .............................................................. 24
4. Ilustração 4 Objeto Janela, servirá para ler os dados e se comunicar com
o objeto Retangulo, quando invocado pelo objeto Janela, no paradigma
orientado a objetos ................................................................................ 24
9
LISTA DE FIGURAS
1. Figura 1 Abstração em camadas........................................................... 26
2. Figura 2 Exemplo de uma árvore de expressão .................................... 27
3. Figura 3 Outra representação para uma expressão .............................. 28
4. Figura 4 Fluxograma de uma rotina bancária ........................................ 30
5. Figura 5 Tela de cadastro da aplicação desenvolvida em CAKE .......... 47
6. Figura 6 Tela de cadastro da aplicação desenvolvida em JAVA ........... 49
7. Figura 7 Tela de cadastro de cliente no Maker...................................... 64
10
LISTA DE GRÁFICOS
1. Gráfico 1 Tempos de desenvolvimento dos softwares .......................... 46
2. Gráfico 2 Bugs da aplicação em CAKEPHP.......................................... 47
3. Gráfico 3 Bugs da aplicação em JPA/NETBEANS ............................... .48
4. Gráfico 4 Bugs das aplicações desenvolvidas...................................... .51
11
LISTA DE TABELAS
1. Tabela 1 Vantagens e Desvantagens da Programação Intuitiva ........... 30
2. Tabela 2 Vantagens e Desvantagens da Linguagem de domínio
específico .............................................................................................. 32
3. Tabela 3 Vantagens e Desvantagens da Linguagem Natural Controlada
.............................................................................................................. 34
4. Tabela 4 Ferramentas/Framework utilizado em cada paradigma.......... 42
5. Tabela 5 Hardware e Software utilizando no desenvolvimentos dos
softwares ............................................................................................... 43
12
CAPÍTULO 1
INTRODUÇÃO
13
1.1 CONSIDERAÇÕES INICIAIS
Nos últimos anos, preenciou-se um grande progresso da computação. Ele
trouxe um computador em cada residência, ferramentas para trabalho e
diversão, jogos eletrônicos e redes que as interligam com outras residências
e/ou empresas de forma a proliferar a vasta quantidade de informações e
entretenimento. Esse progresso tem sido possível devido ao fato dos
computadores terem se tornado cada vez mais baratos e mais eficientes.
Segundo a previsão de Gordon Moore, fundador da Intel, o poder de
processamento dos microships deve duplicar a cada ano (MOORE, 1965).
Porém, a flexibilidade e utilidade dos sistemas computacionais são limitados
pela vagarosa evolução dos softwares, isso não visto tanto atualmente, pois
principalmente não se há a duplicação do processamento dos microships,
como previsto. Já para Niklaus Wirth, a evolução do hardware é mais rápida do
que
a
evolução
do
software
(BOSZORMENYI
&
GUTKNECHT
&
POMBERGER, 2000).
Afirmações que justificam-se pelo motivo que desde os primórdios da
computação, a criação de software vem sendo tratada do ponto de vista do
computador,
ou
seja,
preocupou-se
em
desenvolver
funções
e/ou
procedimentos complexos a serem realizados pela máquina, mas não se estes
serão facilmente interpretados pelo desenvolvedor. Em razão disso, a principal
evolução do software se deu pela criação das linguagens de programação
(MACLENNAN & BRUCE, 1987). Uma linguagem é um conjunto de regras
ordenadas, sistemáticas e metódicas para comunicar idéias coerentemente
(ALMEIDA, 2005). Uma linguagem de programação é um conjunto de regras
que possibilita a criação de um programa, elas existem para definir os
comandos que queremos que o computador execute (JAMSA & KLANDER,
1999). Também pode ser entendida como uma linguagem para ser usada por
pessoas para expressar um processo que o computador pode entender.
Por serem voltadas para uma visão do computador, as linguagens de
programação não possuem detalhes sobre o problema proposto, ou seja, se é
14
para calcular juros, somar valores entre outros. Isso pode parecer sensato se
apenas a visão do computador for considerada, porém, evidentemente, isto não
é a realidade. Implicando com isso problema ná necessidade de mudança
(manutenção ou extensão), pois esta deve ser realizada através dos mesmos
meios utilizados em seu desenvolvimento (ex, linguagem de programação) os
quais não expressam claramente o que foi resolvido, tornando assim, qualquer
mudança um processo custoso.
Não é de hoje que muitos tentam descrever o que é um Software. Existem
vários conceitos, Segundo PRESSMAN (1995), “Software é um conjunto de
instruções que quando executadas, produzem a função e o desempenho
desejados”, já SOMMERVILLE define que “São programas de computadores e
sua documentação associada”. Este, em alguns casos, é um dos maiores
componentes
do
orçamento
das
organizações.
Segundo
BJARNE
STROUSTRUP, conhecido como o pai do C++, nossa civilização roda em
software.
Atualmente presencia-se o desenvolvimento de softwares ultrapassando
orçamentos, estourando prazos, além disso, algumas vezes os softwares: são
inseguros, desacreditados e difíceis de utilizar. Sempre que uma empresa
pretende introduzir um novo sistema ou atualizar um sistema legado1, isto se
torna um risco considerável. O THE STANDISH GROUP REPORT (1995),
afirma que dois terços dos projetos ultrapassam prazos, orçamentos ou os
dois.
Para CHARLES SIMONYI (2008), ex-arquiteto chefe da Microsoft, o
desenvolvimento de software requer recursos consideráveis de talento e tempo
de forma a barrar a inovação em algumas organizações, o que pode ser visto
também
em
ROSENBERG
(2007),
visto
que
tais
organizações têm
necessidades que somente podem ser supridas pelo processo custoso de
1
Sistema legado é o termo utilizado em referência aos sistemas computacionais de uma
organização que, apesar de serem bastante antigos, fornecem serviços essenciais. Geralmente
utilizam bancos de dados obsoletos. (CAGNIN, 1999)
15
desenvolvimento de software que, conforme dito, está com uma imagem
desgastada.
Imaginasse o cenário em que uma empresa deseja fazer uma mudança em
uma rotina de um software de um determinado domínio. Tal empresa então
teria que contatar a empresa responsável pela manutenção do seu software
que, então, faria um levantamento dos requisitos e, enfim, faria as modificações
desejadas. Tais modificações, porém, podem não condizer exatamente com o
que foi inferido na análise de requisitos e, então, parte do processo poderia ser
refeito. Esse processo envolve, em alguns casos, especialista do domínio,
arquitetos de software, programadores e engenheiros de teste.
Esta divisão de tarefas pode deixar o especialista do domínio frustrado já que
analistas de sistemas e programadores também se frustram com as constantes
mudanças nas especificações (SOFTWELL, 2008). Dessa forma, o seguinte
questionamento surge: como o especialista do domínio poderia contribuir mais
diretamente com o software? A resposta certamente seria que seus
conhecimentos nem sempre são da área técnica, assim, ficam impossibilitados
de escreverem códigos já que estes não são de fácil compreensão. Assim,
procuram-se iniciativas ou métodos de programação que possam resolver este
problema.
1.2 OBJETIVOS
A proposta da pesquisa é realizar um estudo literário sobre Programação
Intuitiva, seu conceito, como funciona, de onde surgiu entre outros aspectos.
Visando verificar o impacto desse paradigma no processo de desenvolvimento
de software e por fim, analisar como uma ferramenta que usa os conceitos da
Programação Intuitiva, pode impactar na produtividade do processo de
produção de software. Na seqüência estão descritos o objetivo geral e os
objetivos específicos, apresentando uma visão refinada dos objetivos do
projeto de pesquisa.
16
1.2.1 GERAL
Analisar se Programação Intuitiva pode impactar na produtividade do processo
de desenvolvimento de Software, utilizando de frameworks e paradigmas
diversos para realizar a pesquisa.
1.2.2 ESPECÍFICOS
•
Realizar revisão literária sobre a Programação Intuitiva;
•
Elaborar um experimento a fim de comparar a produtividade da
construção de softwares nos diferentes paradigmas e ferramentas
(Procedural, utilizando CAKEPHP; Orientado a Objetos, utilizando
JPA/Netbeans; Intuitivo utilizando o Maker), para verificar qual a mais
eficiente.
1.3 ESTRUTURA DO TRABALHO
A fim de se atingir os resultados esperados, este trabalho está estruturado
segundo os capítulos a seguir:
1. No capítulo 2 será composto do embasamento teórico, para o
esclarecimento do objeto de estudo e da pesquisa;
2. O capítulo 3 será composto da metodologia aplicada ao estudo;
3. Já no capítulo 4 será apresentado o resultado da pesquisa;
4. E por fim, será apresenta as considerações finais da pesquisa,
identificando os trabalhos futuros acerca do tema.
17
CAPÍTULO 2
REFERENCIAL TEÓRICO
18
2.1 PARADIGMAS DE PROGRAMAÇÃO
2.1.1 DEFINIÇÃO
PAPERT apud BARANAUSKAS (1994) define que paradigma de programação
como um “quadro estruturador” que é subjacente a atividade de programar,
colocando que sua escolha pode mudar notavelmente a forma de como o
programador pensa sobre a atividade de programar.
O paradigma de programação é tratado por BARANAUSKAS (1994) como um
“modelo” de representação de um problema a ser resolvido pela máquina.
Ainda segundo BARANAUSKAS (1994), o entendimento destes modelos é
fundamental no design de metodologias para desenvolvimento de programas
em uma dada linguagem.
Segundo ASCENIO & CAMPOS (2007, p. 12) “é o paradigma que permite ou
proíbe a utilização de algumas técnicas de programação. Ele é capaz, ainda,
de mostrar como o programador analisou e abstraiu o problema a resolver.”.
Uma das principais motivações para a criação das linguagens de montagem e
seus montadores, foi que em meados das décadas de 40 e 50, com a
inexistência de software e pela falta de linguagens de montagem ou mesmo
linguagens de alto nível, a programação era feita através de linguagem de
máquina o que tornava os programas ilegíveis além da grande dificuldade do
seu processo de manutenção. Não bastando, as necessidades das aplicações
numéricas da época requeriam certas facilidades não existentes nos hardwares
da época, como: números reais e acesso a elementos de um conjunto através
de índices, esta necessidade foi que fez surgir as linguagens de mais alto nível
que continham estes recursos. (BARANAUSKAS, 1994).
Existem vários paradigmas de programação, sendo eles: procedural ou
imperativo, orientado a objetos, funcional, lógico e outros (ASCENIO &
CAMPOS, 2007). Mas nesse tópico iremos analisar apenas os paradigmas
Procedural e o Orientado a objetos, visto que serão utilizados no experimento.
19
2.1.2 PARADIGMA PROCEDURAL OU IMPERATIVO
Este paradigma procura seguir os mesmos conceitos da arquitetura de von
Neumann, onde os programas contém comandos que manipulam posições de
memória por meio de variáveis, definindo assim uma seqüência de instruções
que o computador deve executar. (BARANAUSKAS, 1994).
Partilha-se a idéia de Maria Baranauskas, quando ela descreve a solução do
problema.
O conceito central para representação da solução do problema
é o conceito de “variável” como uma abstração para uma
posição de memória na máquina, para a qual se pode atribuir
um valor. O fluxo de controle da execução pela máquina é
ditado por sequenciação e por comandos de repetição.
(BARANAUSKAS, 1994, p. 4).
O paradigma procedural é considerado o que possui a maior quantidade de
linguagens, ao exemplo de Fortan, C, Pascal. Existem vários motivos que
comprovem está afirmação, voltando no tempo e vê que elas foram muito
utilizadas em aplicações numéricas e também dentro do domínio da ciência da
computação. Segundo a tabela TIOBE (2008) das 20(vinte) linguagens mais
utilizadas atualmente, 10(dez) são procedurais e, além disso, 41,5% do total
das linguagens pesquisadas são procedurais.
E não se pode esquecer que estas linguagens são desenvolvidas por
especialistas em computação focando o uso por especialistas em computação.
Pode-se afirmar ainda que a quantidade de linguagens disponíveis continuará a
crescer enquanto a arquitetura de computadores for a de von Neumann.
(BARANAUSKAS, 1994).
2.1.3 PARADIGMA ORIENTADO A OBJETOS
Para BOO apud ROCHA (2002) sistemas orientados a objetos são “um
conjunto de agentes autônomos que colaboram entre si para a realização de
um comportamento de alto-nível”.
20
Para onde quer que olhe no mundo real, vê-se objetos, eles são:
computadores, carros, motos, televisões, telefones e etc. Segundo DEITEL &
DEITEL (2004, p. 67):
Seres humanos pensam em termos de objetos. Temos a
maravilhosa habilidade da abstração, que nos permite
visualizar imagens numa tela, como pessoas, aviões, árvores
e montanhas, como objetos, em vez de ver pontos coloridos
isolados.
Por simular o mundo real, as linguagens provenientes da orientação a objetos
devem conter um modelo de objetos que possam enviar e receber mensagens
bem como reagir a mensagens recebidas. Dessa forma, procura-se fornecer
um ambiente onde objetos podem co-existir e trocar mensagens entre si.
(BARANAUSKAS, 1994).
SEBESTA (1989, p.471) explica os conceitos de troca de mensagens
demonstrando o significado da expressão 21 + 2:
In the first message, the receiver object is the number 21, to
which is sent the message + 2. So the message 21 + 2 passes
the parameter object 2 to the + method of the object 21. The
code of that method uses the object 2 to build a new object, in
this case, 23. If the system already contains the object 23, then
the result is a reference to it rather than to a new object.
Para um melhor entendimento da expressão 21 + 2, o objeto receptor é o
número 21, para o qual é enviada a mensagem “+ 2”. Essa mensagem passa o
objeto 2 para o método “+” do objeto 21. O código desse método usa o objeto 2
para construir um novo objeto, o 23 (SEBESTA, 1989) . Essa explicação nos
faz entender claramente o funcionamento de troca de mensagens dos objetos.
Considerando a Orientação a Objeto como um novo paradigma, devemos levar
em conta também uma nova maneira de pensar, pois apesar da escrita do
código continuar a ser procedural, a estrutura do modelo computacional não é
a mesma. Basicamente o que se procura é reutilização de código e
21
modularidade2 de escrita, o que torna esse paradigma imbatível em relação ao
paradigma procedural. Este paradigma se distancia da estrutura de von
Neumann, pois os conceitos de processador, memória e dispositivos de I/O
(entrada e saída), já que possui conceitos mais reais, o de objeto. (LEITE &
RAHAL, 2008)
Segundo o índice de TIOBE (2008) este paradigma é o mais utilizado
atualmente, com 56 % do total das linguagens pesquisadas, percebe-se ainda
que em 1(um) ano o crescimento da utilização desse paradigma foi de 3,9%,
enquanto o procedural teve o declínio de 2,4%.
2.1.4 COMPARAÇÃO ENTRE OS PARADIGMAS
Do ponto de vista do programador, ao analisar um problema proposto nos
paradigmas procedural e orientado a objetos, pode-se afirmar que o
programador ao desenvolver um software no paradigma procedural pensa logo
em como as ações podem ser executadas e/ou como modulá-las. Já ao
programar no paradigma orientado a objetos, o desenvolvedor procura
identificar os objetos do problema e como estes se comunicaram. (ASCENIO &
CAMPOS, 2007)
Não se pode afirmar que programas desenvolvidos em linguagens com suporte
a orientação a objetos estejam sempre utilizando o paradigma orientado a
objetos, pois como visto, o paradigma está associado a forma de pensar do
programador, dessa forma, pode-se desenvolver programas em JAVA que não
sejam considerados no paradigma orientado a objetos. Assim, pode-se afirmar
que um software desenvolvido em uma linguagem que seja essencialmente de
um paradigma, a exemplo do JAVA com Orientação a Objetos, não
necessariamente este paradigma foi utilizado no desenvolvimento do
mesmo.(ASCENIO & CAMPOS, 2007).
2
Modularidade: é o termo para o projeto de um sistema que é composto de várias partes que
podem ser trocadas. Desta forma o sistema pode ser dividido em vários subsistemas (incluindo
neste as diversas opções resultantes de trocas). Os sistemas podem ser processos ou
produtos. Cada parte que pode ser trocada é um módulo. (WIKIPEDIA, 2008)
22
Segundo ASCENIO & CAMPOS (2007, p. 14), “Alguns autores consideram que
qualquer paradigma pode ser implementado em qualquer linguagem (inclusive
assembly), pois depende apenas da forma de pensar do programador e de sua
habilidade de programar.”
Será demonstrado abaixo um exemplo de um problema (retirado de ASCENIO
& CAMPOS (2007, p. 12, 13, 14)), onde primeiramente será desenvolvido no
paradigma procedural utilizando a linguagem Pascal, depois no mesmo
paradigma, porém utilizando a linguagem JAVA e por fim no paradigma
orientado a objetos novamente com a linguagem JAVA, a fim de se comprovar
que se pode desenvolver nos dois paradigmas usando a mesma linguagem.
O problema é calcular a área e o perímetro de um retângulo. Para isso, deverá
existir uma janela, pela qual serão informadas as medidas dos lados do
retângulo e poderão ser vistos os cálculos realizados. Trata-se de um problema
simples. Como resolvê-los?
Em pascal a solução do problema ficaria como na ilustração 1 (retirado de
ASCENIO & CAMPOS (2007, p. 13):
Ilustração 1 Programa em pascal para calcular a área e o perímetro de um Retângulo
23
O programa foi desenvolvido em 3(três) módulos, uma função para calcular a
área do retângulo, outro para calcular o perímetro e o módulo principal, que é
responsável por obter os dados, calculá-los através das funções e por fim
apresentar o resultado dos cálculos.
Na ilustração 2 é mostrado o mesmo software escrito em JAVA utilizando o
paradigma procedural (retirada de ASCENIO & CAMPOS (2007, p. 13):
Ilustração 2 Programa em Java para calcular a área e o perímetro de um Retângulo,
utilizando o paradigma procedural
Ao comparar os códigos da ilustração 1 e 2, percebe-se grande semelhança
entre os mesmos, o que comprova a teoria que um software desenvolvido em
uma
linguagem
que
seja
essencialmente
orientado
a
objetos
não
necessariamente utilizará o paradigma orientado a objetos, ao exemplo da
ilustração 2. O que é questionável, pois no exemplo do ilustração 2, se vê a
utilização de objetos, a exemplo das linhas “entrada = new Scanner
(System.ini)” e “altura = entrada.nextFloat()”.
Já nas ilustrações 3 e 4, é apresentado o código do mesmo programa
desenvolvido em Java utilizando o paradigma Orientado a Objetos (retirada de
ASCENIO & CAMPOS (2007, p. 14). Onde antes do desenvolvimento, pensouse em quais objetos seriam necessários para utilização do problema,
identificando assim o Retângulo e a Janela de coleta dos dados.
24
Ilustração 3 Objeto Retangulo, que servirá para calcular a área e o perímetro de um
Retângulo, quando invocado pelo objeto Janela, no paradigma orientado a objetos
A ilustração 3, demonstra a classe (objeto) “Retangulo”, que será invocado
através do objeto Janela, que será apresentado na ilustração 4.
Ilustração 4 Objeto Janela, servirá para ler os dados e se comunicar com o objeto
Retangulo, quando invocado pelo objeto Janela, no paradigma orientado a objetos
Além de tudo, observa-se que esses paradigmas trabalham em conjunto, pois a
lógica dos objetos contém o paradigma procedural. (ASCENIO & CAMPOS,
2007, p. 14).
25
2.2 PROGRAMAÇÃO INTUITIVA
2.2.1 DEFINIÇÃO
O objetivo da Programação Intuitiva é propor uma técnica de desenvolvimento
de rotinas de software, utilizando as mesmas técnicas do WYSIWYG 3, ou seja,
abstrair a complexidade das rotinas de software em uma camada de mais alto
nível. (WIKIPEDIA, 2008)
Ao raciocinar, imagina-se o ideal de se comunicar com o computador que
chegaríamos à utilização da linguagem natural, ou seja, o programador pode
instruir o computador como ele deve se comportar através da fala natural ou da
escrita natural. Entretanto, esse é um futuro ainda remoto que depende de
diversas áreas de estudos, tais como Inteligência Artificial (RUSSELL &
NORVIG, 2005), Processamento de Linguagem Natural (BOLSHAKOV, 2004),
entre outras.
A proposta é um formato comum e intermediário entre uma camada de
abstração de alto nível e as complexas linguagens de programação. Tal
formato deve conter instruções organizadas de forma que possa ser traduzida
de maneira rápida para qualquer linguagem de programação (vide Figura 1
retirada de SOFTWELL (2008)).
3
WYSIWYG é o acrônimo de “What you see is what you get”. É um adjetivo utilizado
para se referir a processadores de textos que apresentam uma constante
representação final do texto ao editor. (WIKIPEDIA, 2008)
26
Diferentes meios de interação
(fala, textos, programação visual, entre outros)
Formato comum proposto
Diferentes linguagens de programação
Figura 1 Abstração em camadas
A vantagem disso está no fato de que camadas de alto nível estarão
disponíveis em diversos formatos e editarão um formato único em comum.
Esse formato poderá, então, ser traduzido para qualquer linguagem de
programação. Essa camada de alto nível deverá ser apresentada segundo um
contexto de um domínio ou conjunto de domínios de forma que o especialista
do domínio possa entender de maneira simples e intuitiva o seu significado.
2.2.2 USO DE FLUXOGRAMAS PARA TORNAR A PROGRAMAÇÃO MAIS
INTUITIVA
Um Fluxograma é um tipo de diagrama que procura representar um processo,
que se utiliza de gráficos para ilustrar de forma clara as informações de cada
elemento desse processo. O que pode ser resumido como a documentação de
todos os passos necessários para execução do dado processo. (WIKIPEDIA,
2008).
Como meio de interação, é proposto, inicialmente, o uso de fluxogramas
juntamente com árvores de expressões para tornar a programação do software
mais intuitiva.
Segundo UCCI citado por SANTIAGO & DAZZI (2003) “o perfil de um
fluxograma é constituído por um conjunto de estruturas de programação, cada
qual com uma representação distinta”. E para SOUZA apud SANTIAGO &
DAZZI (2003, p. 2):
27
Com a utilização de figuras geométricas, os fluxogramas
representam estruturas lógicas de seqüência, desvio
condicional e repetição condicional e o fluxo de seqüência
representado por setas direcionais, o que facilita
sensivelmente a visualização da solução.
Árvores de expressões facilitam o entendimento de complexas expressões.
Elas são compostas por funções matemáticas (ex: soma, multiplicação),
funções do domínio (ex: calcula CPMF, calcula juros), constantes (ex: 1, 2) e
variáveis (ex: A, B). Funções do domínio são funções como qualquer outra,
porém estão dentro de um contexto de um determinado domínio. Basicamente,
árvores de expressões são árvores, cujas funções, constantes e variáveis são
representadas em seus nós. Os argumentos de uma função de domínio são
filhos diretos do nó em que ela está representada que também podem ser
outras funções. O nó raiz pode ou não retornar um resultado que pode ser
utilizado de várias maneiras no sistema.
Para ilustrar uma árvore de expressão, considere a expressão matemática
abaixo:
A = B / (C + D)
Tal expressão é representada através de uma árvore de expressão, da forma
apresentada na figura 2, retirada de SOFTWELL(2008).
A
=
Divisão
B
Soma
C
D
Figura 2 Exemplo de uma árvore de expressão
28
Por ser uma expressão matemática, podemos representar como mostra a
figura 3, retirada de SOFTWELL (2008).
B
A
=
______________
C
+
D
Figura 3 Outra representação para uma expressão
O uso do fluxograma torna o programa bastante simples de manter. Junto com
utilização de funções do domínio, o especialista do domínio é capaz de manter
e evoluir um software. A prova disso podemos encontrar nos fundamentos do
aprendizado, mais especificamente no aprendizado em lógica de programação.
Partilha-se a idéia de Rafael e Rudimar Luís, quando eles relatam a facilidade
de interpretação com a utilização de fluxogramas.
Obtendo a idéia principal de estruturar a programação através
de fluxogramas e posterior detalhamento em português
estruturado, ambos utilizando as mesmas estruturas de
controle, facilita o processo de aquisição do conhecimento e
principalmente a consolidação deste. (SANTIAGO & DAZZI
,2003, p. 2)
No curso de Ciência da Computação da Universidade do Vale do Itajaí se
utiliza de fluxogramas para na disciplina de programação, esse método vem
tendo bons resultados, pois é empregado o uso de gráficos para ensinar a
lógica do problema, o que facilita o aprendizado dos estudantes. (SANTIAGO &
DAZZI, 2003). Para melhor entendimento, ler-se abaixo:
Os fluxogramas quando usados para descrever a lógica de
solução, sem levar em consideração detalhes de linguagem de
programação ou de interface, costuma gerar bons resultados,
pois os aprendizes conseguem direcionar seus esforços
apenas nos passos que levarão a solução do problema. Só
depois disso é que vem a preocupação com os demais
detalhes de refinamento para gerar o efetivo programa.
(SANTIAGO & DAZZI, 2003, p. 2)
29
Existem diversos trabalhos, tais como (REZENDE & GARCIA, (1995); JANDL&
ZUCHINI,
(1999);
BROWN,
(1988);
BROWN,
(1991)),
que
procuram
sedimentar o aprendizado de lógica de programação, utilizando elementos
visuais, tais como fluxograma. Tais trabalhos visam o fomento de conceitos
básicos, principalmente, em alunos de programação. Imaginando que todo
especialista
do
domínio
não
tem
conhecimentos
avançados
em
desenvolvimento de software, então o coloca em um nível similar de
conhecimento a um aluno iniciante de computação. Sendo assim, a mesma
técnica utilizada para compreensão de computação pode ser aplicada a ambos
os casos.
Um exemplo de uma solução em fluxograma é mostrado logo abaixo (retirada
de SOFTWELL (2008)).
Considere uma rotina fictícia de um software de um domínio bancário.
Considere também a pré-existência de algumas funções de domínio que são
descritas abaixo:
Domínio Bancário
Função 1 - Aplica Juros: função que recebe três parâmetros: um valor e uma
taxa de juros e o tempo. A função deve devolver o valor corrigido no tempo
solicitado.
Função 2 - Aplica CPMF: função que recebe um valor e aplica a taxa do
imposto CPMF.
Função 3 - Tipo da Conta: função que retorna se a conta é especial ou
normal.
Na Figura 4 é demonstrado a rotina utilizando fluxogramas.
30
Início
Conta
Saldo Base
Meses
Não
Sim
Sim
Não
Tipo da Conta é especial
Aplica Juros de 0,43%
Aplica Juros de 0,37%
Aplica CPMF
Fim
Saldo Corrigido
Figura 4 Fluxograma de uma rotina bancária
Analisando o fluxograma, é simples e direto descrever a rotina. Ela deverá
calcular o valor corrigido que poderá ser sacado pelo proprietário. Para isso, a
rotina recebe o número da conta, o saldo original e a quantidade de meses
passados. Caso a conta seja especial, a rotina aplica juros de 0,37%, caso
contrário, ela aplica juros de 0,43%. No final, ela deve aplicar o CPMF e
devolver o valor corrigido.
As características da Programação Intuitiva podem ser vistas resumidamente
na tabela 1, onde é demonstrado as suas vantagens e desvantagens.
VANTAGENS
DESVANTAGENS
•
Fácil compreensão;
•
Limitada;
•
Linguagem mais próxima
•
Específica.
do domínio;
•
Simples manutenção.
Tabela 1 Vantagens e Desvantagens da Programação Intuitiva
Baseado na tabela 1, pode-se afirmar que a programação intuitiva proporciana
ao desenvolvedor faciidados no desenvolvimento de software, o que por outro
lado faz com que o produtos desenvolvidos limitem-se a determinados
31
aspectros, pois a capacidade de transformar a linguagem de alto nível em
linguagem de programação pode esbarrar na capacidade desta metodologia.
2.3 OUTROS ESTILOS DE PROGRAMAÇÃO
2.3.1 LINGUAGEM DE DOMÍNIO ESPECÍFICO
Devido a dificuldade existente nos softwares atuais, está se tornando prática
estender linguagens de programação de grande espectro com o objetivo de
apoiar o desenvolvimento de softwares em domínios específicos. Fato este
vem acontecendo por que as linguagens atuais estão ficando cada vez mais
difíceis de se programar, do ponto de vista do apreendizado, devido a
existencia de uma grande quantidade de comandos, bibliotecas e funções.
(SILVA & PINHEIRO, 2004).
Essas linguagens são bastante úteis para se obter uma maior produtividade em
ambientes que são desenvolvidos vários software para um mesmo domínio, a
exemplo de um ambiente de uma fábrica de software4, não bastando, ela por
possuir uma linguagem de fácil entendimento faz com que a interação e
integração entre usuário e desenvolvedor seja facilitada. (C.E.S.A.R, 2008)
SILVA & PINHEIRO (2004, p. 1) define a linguagem de domínio específico ou
LDE como:
Uma linguagem de programação ou linguagem de
especificação executável que oferece, por meio de notações e
abstrações apropriadas, poder expressivo focado e
usualmente restrito a um domínio particular.
4
FABRICA DE SOFTWARE: É “Um processo estruturado, controlado e melhorado de forma
contínua, considerando abordagens de engenharia industrial, orientado para o atendimento a
múltiplas demandas de natureza e escopo distintas, visando à geração de produtos de
software, conforme os requerimentos documentados dos usuários e/ou clientes, da forma mais
produtiva e econômica possível”. (FERNANDES & TEIXEIRA, 2004, p. 117)
32
FRECHOT citado por SILVA & PINHEIRO (2004) acrescenta que “estas
linguagens são geralmente pequenas, mais declarativas do que imperativas, e
menos expressivas do que uma linguagem de propósito geral”.
As LDEs possuem várias vantagens em relação as linguagens convencionais,
estas são: permitir que as expressões sejam feitas no idioma e no nível de
abstração do problema, o que permite que os conhecedores do domínio
possam validar, modificar e até mesmo desenvolver programas; facilidade para
validar e otimizar os programas no nível do domínio; auto-documentação e
incorporação do conhecimento sobre o domínio. O que possibilita um ganho de
produtividade, confiabilidade, portabilidade e manutenibilidade dos softwares.
(DEUSEN apud SILVA & PINHEIRO, 2004)
Mas o alto custo para projetá-las, mantê-las, custo de adaptação dos usuários
e disponibilidade limitada, fazem com que a linguagem de domínio específico
se torne um problema quando implementada. (SILVA & PINHEIRO, 2004)
As características da Linguagem de Domínio Específico podem ser vistas
resumidamente na tabela 2, onde é demonstrado as suas vantagens e
desvantagens.
•
•
VANTAGENS
Incorporação de
•
DESVANTAGENS
Disponibilidade limitada;
conhecimento do domínio;
•
Dificuldade de encontrar
expressão de soluções no
•
Custo para projeta-las,
idioma e no nível de
implementa-las e mantê-
abstração de domínio do
las;
problema;
•
seu escopo próprio;
Possibilidade da
A possibilidade de validar
•
Custo de adaptação dos
usuários.
e otimizar os programas no
nível de domínio.
Tabela 2 Vantagens e Desvantagens da Linguagem de domínio específico
33
Analisando a tabela 2, percebe-se que a linguagem de domínio especifico
proporciona, principalmente aos especialistas de domínio, facilidades de
compreensão do que se esta sendo desenvolvido, especialmente por
possibiitar que seja escrita em qualquer idioma e por estar mais próxima do
domínio, porém o seu alto custo para projetá-las, aliado a dificuldade de
adaptação dos usuários, pode dificultar a sua implantação.
2.3.2 LINGUAGEM NATURAL CONTROLADA
Os principais motivos para a criação da Linguagem Natural Controlada foram: a
necessidade de se obter um alto nível de abstração que seja compatível com a
fase de projeto, ser processável pela máquina e de complementar as
especificações da UML5.(LEAL, 2006).
Para LEAL (2006, p. 34) “A utilização de linguagens naturais controladas está
vinculada ao alto nível de abstração (melhorar a legibilidade por humanos) e à
possibilidade de processamento computacional.” O principal objetivo é permitir
que especialistas do domínio especifiquem o negócio utilizando apenas seus
conhecimentos, utilizando uma metodologia compatível com a modelagem do
domínio. (LEAL, 2006)
No trabalho de SILVA & PINHEIRO (2004) a linguagem natural controlada é
utilizada para definir a linguagem específica de domínio (vide seção 2.3.1), a
regra principal é que a gramática da linguagem defina somente a formatação,
os termos que não são palavras reservadas devem ser representados como
referência aos elementos da UML (classes, atributos e operações) por meio
das suas descrições. (LEAL, 2006).
Segundo LEAL (2006) a proposta do alto nível de abstração, como uso de
conceitos
de
domínio
específico,
oferece
algumas
vantagens,
como:
especificação é mais legível, do que outras; melhoria da qualidade de código,
5
UML: “É a abreviação de Linguagem de Modelagem Unificada (Unified Modeling Language),
uma notação (principalmente diagramática) para modelagem de sistema, usando conceitos
orientados a objetos.” (LARMAN, 2000, p. 28)
34
já que o código é gerado automaticamente; concentração de esforços na
modelagem do domínio. (LEAL, 2006)
A Linguagem Natural Controlada (LNC) possibilita desenvolver um sistema em
um nível mais elevado, gerando código automaticamente, acima da
implementação, o que permite redução da diferença conceitual do código e do
problema proposto. O que se assemelha com os compiladores no processo de
transformação do código das linguagens em código de máquina. (LEAL, 2006)
As características da Linguagem Natural Controlado podem ser vistas
resumidamente na tabela 3, onde é demonstrado a sua vantagem e
desvantagem.
VANTAGENS
•
DESVANTAGENS
•
Deduz a diferença
Limitação.
conceitual entre o domínio
do problema e o código;
Tabela 3 Vantagens e Desvantagens da Linguagem Natural Controlada
Na Linguagem natural controlada, por utilizar a UML no seu desenvolvimento,
faz com que torne mais fácil a sua compreensão, porém assim como na
Programação Intuitiva e na Linguagem de Domínio Específico, a sua limitação
pode torna-la inutiizável para certos problemas.
2.4 PRODUTIVIDADE DE SOFTWARE
Economicamente, a produtividade de software está diretamente relacionada
com o total de produtos produzidos e as despesas de sua produção. (JONES
1996).
A produtividade é o melhor indicador do progresso econômico de uma
empresa, é através do aumento da produtividade que se obtêm melhores
preços,
melhor
competitividade,
melhor
prestação
de
serviços
e
35
consequentemente maiores salários, resultando em um aumento do nível de
vida dos profissionais envolvidos, aproximando-se dos países desenvolvidos.
(ZICARELLI apud BARBARÁN & FRANCISCHINI, 1998).
Segundo CHIANG & MOOKERJEE (2004) a melhoria na produtividade no
desenvolvimento de software se dá através do balanceamento de três pilares
do gerenciamento de software: tecnologia, pessoas e processo. E para
BEHRENS (1983) em estudo realizado com vinte e cinco projetos afirma que “o
tamanho do projeto, o ambiente de desenvolvimento e linguagem de
programação impactam na produtividade”.
Percebe-se que a escolha da tecnologia (linguagem) é relatada pelos dois
autores como ponto importante para se obter uma melhor produtividade de
software.
Para se medir a produtividade de software é levado em consideração o que ele
é capaz de fazer, e não a quantidade de códigos ou mesmo da sua
documentação. O que significa que o valor econômico do software não pode
ser medido da mesma forma que os bens e serviços. (SIDLER, 2002).
Existem algumas métricas para se avaliar softwares, as principais são:
•
Linha de Código (LOC)
Relacionada com o tamanho da saída sobre a quantidade de esforço
para se produzir software, onde é considerado a quantidade de
linhas codificadas, e seu esforço, o que é medido pela quantidade de
pessoas. Para JONES citado por BARBARÁN & FRANCISCHINI
(1998) essa maneira de ser medir não é considerada a melhor, pois
pode existir programas sofisticados com poucas linhas de código e
outro nem tanto sofisticado e com muitas linhas produzidas.
•
Pontos de Função (FP)
Essa métrica mede o tamanho do software através da quantidade de
funcionalidades existentes, tomando como base o projeto lógico ou o
36
modelo de dados Para se calcular os FP de um software deve ser
observado cinco pontos importantes: números de entradas; números
de saídas; números de consultas; números de arquivos e a
quantidade de interfaces externas. A cada uma é se atribuída um
grau de complexidade: simples, média e complexa. Depois se avalia
as características que avaliam a funcionalidade geral da aplicação,
atribuindo uma pontuação de 0 a 5. E por fim, multiplica-se um pelo
outro
e
se
obtém
o
Ponto
de
Função.(BARBARÁN
&
FRANCISCHINI, 1998)
•
COCOMO (Construtive Cost Model)
Segundo BOEHM citado por BARBARÁN & FRANCISCHINI (1998)
existem três modelos para se estimar esforço, prazo, custo e
tamanho da equipe para um projeto de software. Barry, criador desse
método os descreve os modelos como:
•
Básico
Esse modelo se assemelha com o LOC, pois ele leva em
consideração a quantidade de linhas de códigos existentes.
(BARBARÁN & FRANCISCHINI, 1998)
•
Intermediário
Neste modelo é considerado o tamanho do software, bem
como
os
aspectos:
avaliações
subjetivas
do
produto,
hardware, pessoal e dos atributos existentes no projeto.
(BARBARÁN & FRANCISCHINI, 1998)
•
Avançado
Engloba todos os aspectos do modelo intermediário e também
a avaliação do impacto dos custos em cada passo do
processo do desenvolvimento de software. (BARBARÁN &
FRANCISCHINI, 1998)
Para se calcular o COCOMO, deve seguir os passos: Escolher o modo do
projeto, podendo ser: orgânico, difuso e restrito; Determinar a quantidade de
instruções existentes no projeto, podendo se utilizar o modelo FP para se
37
definir as instruções; E por fim, se aplicar a equação das instruções existentes
e o esforço para se elaborar o software. (BARBARÁN & FRANCISCHINI,1998)
Partilha-se dos comentários de BOEHM apud BARBARÁN & FRANCISCHINI
(1998) sobre COCOMO:
Atualmente, um modelo de estimativa de custos de software
se sai bem se puder estimar os custos de desenvolvimento do
software dentro de 20% dos custos reais em 70% do tempo e
dentro de seu próprio campo de ação (isto é, dentro das
classes de projetos para as quais ele foi calibrado). Isso não é
tão preciso quanto gostaríamos, mas é exato o bastante para
nos oferecer alguma ajuda na análise econômica de
engenharia de software e nas tomadas de decisões.
2.5 FRAMEWORK PARA PRODUTIVIDADE
Como visto, um dos principais fatores que influenciam na produtividade no
desenvolvimento de software é a tecnologia utilizada, o que inclui linguagem de
programação e frameworks (ferramentas), nessa sessão será apresentado
algumas ferramentas que proporcionam ganhos de produtividade, baseados
nos paradigmas Procedural, Orientado a Objetos e da Programação Intuitivo,
nessa ordem.
2.5.1 CAKEPHP
O CakePHP é um framework desenvolvido na linguagem PHP (acrônimo
recursivo de “Hypertext Preprocessor” ), que proporciona aos programadores
dessa linguagem, iniciantes ou experientes, uma estrutura de desenvolvimento
para aplicações complexas, que sejam concluídas rapidamente, sem que haja
prejuízo a flexibilidade do código. (CAKEPHP, 2008).
Para utilizar o CAKEPHP, basta copiar sua estrutura hierárquica de pastas e
arquivos para dentro da aplicação, e depois utilizar os recursos disponíveis
pela ferramenta de acordo com a estrutura do Banco de dados. (CAKEPHP,
2008).
38
O CAKEPHP possui a facilidade de rodar em qualquer servidor que suporte
PHP, além disso, dá suporte aos principais bancos de dados existentes, mas
se recomenda a utilização do MySql, alé disso, possui recursos dos mais
famosos frameworks e também uma grande comunidade que auxilia no
suporte. (CAKEPHP, 2008).
2.5.2 JPA/NETBEANS
O NetBeans é um projeto open source fundado pela Sum Microsystems, criado
para que desenvolvedores possam criar softwares nas mais diversas
linguagens, como: Java, Ruby, C++ entre outras Sua IDE6 é escrita em Java,
porém
pode
ser
utilizada
por
qualquer
linguagem
de
programação.
(NETBEANS, 2008)
A IDE NetBeans possui uma grande quantidade de extensões que podem ser
facilmente adicionadas, além disso o produto não possui limitações de como e
por quem pode utilizado.
A Java Persistence API (JPA) baseado no conceito Plain Old Java Object
(POJO), incorpora as melhores práticas de frameworks de persistência,
buscando padronizar o mapeamento do objeto/relacional da plataforma Java.
(INTEGRATOR, 2008).
2.5.3 MAKER
O Maker é uma ferramenta de desenvolvimento de sistemas para Web,
utilizando de técnicas que proporcionam aumento de produtividade sem que o
desenvolvedor tenha que escrever linhas de código. Possui uma interface que
interagi facilmente com o usuário através de recursos intuitivos proporcionados
pelos assistentes, ajudas e componentes de desenvolvimento. (SOFTWELL,
2008)
6
IDE: “do inglês Integrated Development Environment ou Ambiente Integrado de
Desenvolvimento, é um programa de computador que reúne características e ferramentas de
apoio ao desenvolvimento de software com o objetivo de agilizar este processo.” (WIKIPEDIA,
2008)
39
A ferramenta disponibiliza um conjunto de componentes visuais para
construção de formulários. A partir de tais elementos, os desenvolvedores
podem criar novos componentes a depender de sua necessidade. A criação de
um novo componente, assim como todo tipo de evolução na ferramenta, é feita
utilizando a própria ferramenta. Para isso, a ferramenta disponibiliza um
domínio específico para evolução de uma IDE. Isso garante que a ferramenta
possa evoluir independente do fabricante, garantindo a reutilização dos
componentes. (SOFTWELL, 2008)
As aplicações geradas pelo Maker são interpretadas por um software em
JAVA, mas seu código fonte pode ser exportado em sua totalidade. Possui
ainda assistentes que auxiliam na criação de formulários e menus, contribuindo
ainda mais com a produtividade dos seus produtos finais. (SOFTWELL, 2008)
40
CAPÍTULO 3
ASPECTOS
METODOLÓGICOS
41
3. METODOLOGIA
Primeiramente, foi realizada uma revisão bibliográfica, a fim de conhecer os
paradigmas de programação Procedural e Orientado a Objetos, bem como
linguagens de programação que se assemelham com a metodologia da
Programação Intuitiva, a exemplo da Linguagem de Domínio Específico e a
Linguagem Natural Controlada. Como objetos de estudo foram utilizados,
principalmente, livros, artigos, teses, dissertações e páginas da Web.
No segundo momento, foi selecionada uma equipe de 3 (três) programadores
para utilizarem os frameworks: CAKEPHP, JPA/Netbeans e Maker, os quais
possuem o objetivo de impactar na produtividade do desenvolvimento dos
softwares, para desenvolver o Cadastro de Clientes, como base no caso de
uso descrito no apêndice A, a fim de avaliar qualitativamente os produtos finais
utilizando uma abordagem comparativa. Esse método de pesquisa foi escolhido
por atender aos objetivos da pesquisa, obtendo com isso melhores parâmetros
no comparativo dos softwares. Os requisitos foram escolhidos conforme
padrões de interface. Esse experimento foi realizado no dia 25 de junho de
2008.
Para a seleção dos frameworks utilizados foi levado em consideração os
paradigmas Procedural e Orientado a Objetos, já que estes são considerados
como: o que mais possui linguagens de programação e o mais utilizado
atualmente, como descrito no capítulo 2.
Os softwares foram analisados com base os produtos finais, pois como dito na
sessão sobre produtividade, apesar das dificuldades em se avaliar um
software, essa é a melhor maneira.
Após obter os tempos de conclusão dos softwares, foi realizada a avaliação
qualitativa com base em um roteiro de testes descrito no apêndice B, o qual foi
dividido em dois grupos de requisitos a serem analisados: layout e
programação.
42
3.1 DELIMITAÇÃO DA PESQUISA
Com base no experimento, foi realizada uma análise dos softwares
desenvolvidos a fim de coletar informações como: Tempo de Produção, bugs
existentes, com o objetivo de tentar responder as questões propostas na
problemática.
A pesquisa foi realizada na Assessoria de Modernização e Informática da
Prefeitura Municipal de Paulo Afonso, sediada na Av. Apolônio Sales, 924 –
Centro – Paulo Afonso-BA.
3.2 COLETA DE DADOS
Para a coleta dos dados do experimento foram utilizadas planilhas, as quais
colaboraram no preenchimento dos horários de início e fim de cada projeto,
bem como, auxiliar na identificação de bugs dos softwares. Com base em um
Caso de Uso, especificado no Apêndice A, foi traçado um roteiro a ser seguido
por cada programador, sendo assim todos iniciaram o processo sendo marcado
o tempo de início e após a conclusão o tempo de término.
3.3 FERRAMENTAS UTILIZADAS NO DESENVOLVIMENTO DOS
SOFTWARES
As ferramentas e/ou frameworks utilizados no desenvolvimento dos softwares
são descritos na tabela 4.
FRAMEWORK (VERSÃO)
CAKEPHP (1.1.19.6305)
JPA/NETBEANS (5.5.1)
MAKER (2.4.0.25)
PARADIGMA
PROCEDURAL
ORIENTADO A OBJETOS
INTUITIVO
Tabela 4 Ferramentas/Framework utilizado em cada paradigma
Importante salientar que os programadores escolhidos são capazes de
desenvolver o software proposto utilizando estas ferramentas.
43
3.4 HARDWARE E SISTEMA OPERACIONAL UTILIZADO
O desenvolvimento dos softwares foi feito em um ambiente homogêneo, com
hardware e Sistema Operacional iguais para todos os desenvolvedores, na
tabela 5 os mesmos são relacionados:
HARDWARE /
SOFTWARE
Processador
Memória
HD
Placa de Vídeo
Sistema
Operacional
CONFIGURAÇÃO / DESCRIÇÃO
AMD Athlon(tm) 65 X2 Dual
Core Processor 4000+ 2.1 GHz
1 GB DDR2
160 GB SATA
ATI Radeon Xpress 1150 Series
Windows XP Professional Service Pack 2
Tabela 5 Hardware e Software utilizando no desenvolvimentos dos softwares
44
CAPÍTULO 4
APRESENTAÇÃO E
INTERPRETAÇÃO DOS
DADOS
45
4.1 RESULTADO DO EXPERIMENTO REALIZADO COMPARANDO AS
LINGUAGENS DE PROGRAMAÇÃO PROPOSTAS ATRAVÉS DE UMA
ANÁLISE QUALITATIVA
Nessa seção serão mostradas algumas variáveis levantadas pelo pesquisador
para a descoberta do objetivo específico que trata sobre um experimento para
comparar a eficácia da programação intuitiva através de um produto
desenvolvido, utilizando de gráficos, figuras, tabelas e suas respectivas
análises, os dados analisados têm como base o experimento realizado,
confrontando os fatores que os diferenciam.
Como citado na metodologia, para o experimento foi selecionada uma equipe
de 3 (três) profissionais, todos experientes nas ferramentas/frameworks
utilizados.
No primeiro momento foi marcada a hora inicial de cada projeto em um
formulário, contendo as colunas: início, fim e total do tempo percorrido. Como
demonstra o Apêndice C.
De acordo com os resultados apresentados no gráfico 1, a ferramenta que
obteve melhor resultado foi a que utiliza os conceitos da Programação Intuitiva,
ficando em segundo o software desenvolvido no paradigma Orientado a
Objetos, terminando com uma diferença de 14 minutos, o que se considerando
o experimento, esse tempo somado a 3 minutos, seria suficiente para a
conclusão de outra aplicação com o mesmo nível de complexidade da proposta
utilizando a Programação Intuitiva.
Assim, com a finalização dos aplicativos, nota-se claramente a diferença de
tempo existente no desenvolvimento de um mesmo software utilizando
frameworks e paradigmas diferentes. Para exemplificar melhor, isso é
demonstrado no gráfico 1.
46
Gráfico 1 Tempos, em minutos, do desenvolvimento dos softwares
Para que seja possível extrair alguma conclusão do experimento, analisar
somente o tempo de término de cada software não é o suficiente, pois não
adiantaria ser rápido se os requisitos solicitados não fossem atendidos, bem
como se existissem bugs, dessa forma, houve a necessidade de analisar o
roteiro de teste apresentado no apêndice B em cada um dos softwares, a fim
de se obter dados mais precisos sobre a eficiência dos mesmos. O roteiro foi
dividido em requisitos de layout e de programação, dessa forma idenfiticou-se o
que precisa ser modificado para que os softwares atendam todos os requisitos.
4.2 ANÁLISE DAS APLICAÇÕES
4.2.1 COM O CAKEPHP, UTILIZANDO O PARADIGMA PROCEDURAL
O CAKEPHP utilizado no experimento apresentou alguns bugs, que totalizaram
em 50%. Como apresentado no Gráfico 2.
47
Gráfico 2 Bugs da Aplicação usando o CAKEPHP
A quantidade de bugs encontrados na aplicação foi 9 (nove), o que significa a
metade dos quesitos analisados, percebe-se através do gráfico 2 que os
maiores bugs são de layout, o que pode ser justificado pela dificuldade
encontrada pelo desenvolvedor implementar estes requisitos, mas o framework
possibilita fazer isto
A maior parte dos bugs (66,67%) estão diretamente ligados as regras básicas
no desenvolvimento de software, como por exemplo: campos somente leitura,
limitação dos campos não implícita na digitação, tamanho dos campos
compatíveis com o tamanho máximo permitido no banco de dados, entre
outros, onde alguns destes problemas podem ser vistos na figura 5.
Figura 5 Tela de cadastro da aplicação desenvolvida em CAKEPHP
48
Contudo, o CAKEPHP, é bem aceito pela comunidade PHP, e apesar de não
ter atendido em tempo comparativamente satisfatório as necessidades do
experimento de pesquisa possui inúmeras vantagens o que pode tornar uma
boa opção para desenvolvedores.
4.2.2 NO JPA/NETBEANS, UTILIZANDO O PARADIGMA ORIENTADO A
OBJETOS
Com o framework NetBeans utilizando o JPA o desempenho no atendimento
dos requisitos foi similar ao do CAKEPHP, com 2 bugs a menos. As principais
diferenças foi que no software desenvolvido com o JPA/NetBeans a validação
dos campos obrigatórios é feita e a facilidade para modificar o tamanho dos
campos é maior. Como se pode identificar no gráfico 3 as diferenças com o
gráfico anterior são muito poucas e sua critica e analise torna-se paralela a
anterior, onde com o JPA/Netbeans houve 7 bugs.
Gráfico 3 Bugs e Requisitos Atendidos da Aplicação usando o JPA/NETBEANS
Na figura 6 abaixo, é apresentado o cadastro do cliente, onde podem ser
observados alguns dos requisitos atendidos.
49
Figura 6 Tela de cadastro da aplicação desenvolvida em JAVA
O tempo para conclusão da aplicação em JPA/NETBEANS foi um ponto forte a
se considerar, além disso, o fato de ser criado automaticamente as classes e
páginas JSP foi um ponto que resultou no segundo melhor tempo, porém teve
uma perda de 15 minutos ao ter que modificar as páginas para que possibilite
atender os requisitos referentes ao layout do programa, o que poderia ser feito
automaticamente pelo framework.
4.2.3 NO MAKER, UTILIZANDO A PROGRAMAÇÃO INTUITIVA
O framework Maker obteve o melhor resultado entre as ferramentas e
linguagens utilizadas, onde em 17 minutos o software foi desenvolvido sem
haver a existência de bugs.
Como
dito,
na
programação
intuitiva
não
houve
bugs,
isso
ocorre
principalmente porque o Maker já possui a maioria dos requisitos solicitados já
embutidos, o que evitou perda de tempo desnecessários no desenvolvimento
de softwares, na figura 7 é mostrado a tela de cadastro.
50
Figura 7 Tela de cadastro de cliente no Maker
A figura 7 pode ser comparada com uma aplicação desktop, porém, trata-se de
uma aplicação web, o que para muitos pode facilitar na navegação e
visualização dos campos. Tornando assim o cadastro mais intuitivo para muitos
usuários.
4.3 RESULTADO GERAL
Ao comparar os softwares, percebe-se que os bugs existentes são decorrentes
de requisitos básicos, como: Tamanho de campos, descrição, digitação
indevida de caracteres, entre outros (vide Apêndice B). Estes, como podem ser
vistos no gráfico 5, não foram apresentados no software desenvolvido com o
Maker, pois este possui os requisitos já embutidos, pois por seguir o conceitos
da programação intuitiva, possibilitou que estas configurações fossem
automáticas, baseadas no tipo de dado e domínio dos campos da base de
dados.
51
Gráfico 4 Bugs das aplicações desenvolvidas
Percebe-se então, que o uso da programação intuitiva, pôde proporcionar
redução do tempo na produção de software, visto que os outros teriam/tiveram
que ser configurados para atender a todos os requisitos, o que demandaria
tempo, este fator é a cada dia mais importante nas organizações e segundo o
THE STANDISH GROUP REPORT (1995), é um dos principais para atrasos
em projetos de software.
O resultado está associado, dentre outros fatores, ao alto nível de abstração
proposto pela programação intuitiva, o que possibilitou ao desenvolvedor
ganhos consideráveis de tempo. Além disso, como este estilo de programação
tem como objetivo principal reduzir o custo de tempo no processo do
desenvolvimento de software, a ferramenta utilizada continha padrões de
interface para as telas a serem criadas, assim contribuiu para a redução do
tempo total de desenvolvimento.
A utilização de fluxogramas na programação intuitiva poderia resultar em
melhores resultados comparando com outros produtos, porém não houve a
necessidade de se implementar regras de negócio pelo motivo que o software
proposto tratava apenas de um cadastro simples, sem validação alguma.
52
CONSIDERAÇÕES FINAIS
53
CONCLUSÃO
Durante a pesquisa levantou-se toda a bibliografia disponível sobre o tema e
constatou que apesar dos grandes benéficos da programação intuitiva pouco
se produziu neste campo de estudo. E também que os estudos nesse sentido
estão diretamente ligados a iniciativa privada. Ainda foi indentificar que existem
inciativas ao exemplo da Linguagem de Domínio Específico e da Linguagem
Natural Controlada, que se assemelham com a metodologia da Programação
Intuitiva, o que pode ser resumida em uma proporcionar redução de tempo na
producão de software, em conjunto com a facilidade do desenvolvimento.
Com isto, verificou-se que a programação intuitiva, busca reduzir tempo de
desenvolvimento de software e com isso reduzir custos de sua produção. A sua
metodologia proporciona um alto nível de abstração, possibilitando que haja um
menor nível de especialização da equipe de desenvolvimento. Aliado a técnicas
de WYSIWYG em conjunto com fluxogramas e árvores de expressão, faz com
que se obtenha grande impacto na produtividade da produção de software.
O experimento realizado revelou que no comparativo da construção dos
softwares com os seguintes frameworks (CAKEPHP, JPA/NetBeans e Maker),
o mais eficaz com menor taxa de bugs foi o MAKER, destacando-se também
com o menor tempo de conclusão e qualidade do produto final. O que serve
como hipótese para o uso de tecnologias e/ou metodologias que visão
aumentar a produtividade do desenvolvimento de software, ao exemplo da
Programação Intuitiva, podem significar em ganhos de produtividade sem que
haja dano a qualidade dos produtos de software.
Conclui-se ainda que o experimento, tratando-se de uma análise de software, e
por este modivo existirem fatores como: ambiente, hardware, sistema
operacional, desenvolvedor e entre outros, não pode servir de parâmetro para
afirmar que a programação intuitiva é mais eficaz ou não que outros
paradigmas, pois, as variáveis analisadas, como: tempo e bugs, podem mudar
ao se modificar estes fatores. Porém, em se tratando deste experimento, a
Programação Intuitiva, por meio do Maker, proporcionou melhores resultados.
54
TRABALHOS FUTUROS
Para trabalhos futuros sugere-se um estudo sobre comparativo entre
frameworks que utilizam os conceitos da Programação Intuitiva, ao exemplo do
Maker e Genexus, no sentido de construir uma base de conhecimento para
melhor aplicabilidade no ambiente de desenvolvimento com o auxílio da
Programação Intuitiva, obetendo parâmetros para se definir qual dos produtos
desenvolvidos tive melhor resultado.
Nesse estudo, pretende-se estipular um tempo para se desevolver um
software, como por exemplo 24 horas, sem que haja uma definição do que
deverá ser feito, deixando na responsabilidade do desenvolvedor a escolha do
produto a ser desenvolvido, podendo ser: cadastro de clientes, sistema
acadêmico, sistema de contabilidade, entre outros, a partir daí será avaliado
fatores como: Pontos por Função do Software, se ultrapassou o tempo definido
e
bugs
existentes
baseando-se
no
que
foi
idealizado
pelo
próprio
desenvolvedor seguindo padrões de interface de software, bem como se as
rotinas idealizados estão funcionando como deveriam. Assim, será observado a
complexidade do produto final, se foi possível terminar o software em tempo, e
a partir daí analisar os bugs existentes.
55
REFERÊNCIAS BIBLIOGRÁFICAS
ASCENCIO, Ana F. G. & CAMPOS, Edilene A. V. Fundamentos da
Programação de computadores: Algoritmos: Pascal, C/C++ e JAVA. 2ª ed.
– São Paulo: Pearson, 2007.
ALMEIDA, Napoleão Mendes de. Gramática metódica da língua portuguesa.
São Paulo: Saraiva, 2005.
BARANAUSKAS, M. C. C. Procedimento, Função, Objeto ou Lógica?
Linguagens de Programação vistas pelos seus paradigmas. Depto. de
Ciências da Computação – IMECC – UNICAMP, 1991.
BEHRENS, C A. Measuring Software Productivity of Computer System,
1983.Development Activities with Point Functions. IEEE Trans. Soft. Engr. SE9(6), pp. 648-652.
BOLSHAKOV, A. I. & GELBUKH, A. Computational Linguistics: Models,
Resources, Applications. IPN-UNAM-FCE, 2004.
BOSZORMENYI, L. & GUTKNECHT, J. & POMBERGER, G.. The School of
Niklaus Wirth. Eds. D-Punkt Verlag, 2000.
BROWN, M. . Exploring algorithms using BALSA-II. IEEE Computer. V 21
No. 5, 1988.
BROWN, M.H. Zeus: A System for Algorithm Animation and Multi-view
Editing, Research Report n. 75, DEC Systems Research Center, Palo Alto, CA,
1991
CAGNIN, M. I. – Avaliação das vantagens quanto à facilidade de
manutenção e expansão de sistemas legados sujeitos a engenharia
reversa e segmentação. Dissertação de Mestrado – Departamento de
Computação, UFSCar. São Carlos, 1999.
56
CAKEPHP.
Disponível
em
http://www.cakephp.com.br/.
Acessado
em
24/06/2008.
C.E.S.A.R. C.E.S.A.R realiza palestras sobre linguagens de domínio específico
e
verificação
e
validação
de
sistemas.,
Disponível
em
http://www.cesar.edu.br/noticia_15.html. Acessado em 25/06/2008.
CHIANG, R. & MOOKERJEE, S. Improving Software Team Productivity.
Communications of the ACM, 2004. volume 47, p. 89 a 93.
DEITEL, H. M. & DEITEL, P. J. Java como programar. 4ª ed. - Porto Alegre:
Bookman, 2003.
FERNANDES, Aguinaldo A. & TEIXEIRA, Descartes de S. Fábrica de
Software: Implantação e Gestão de Operações. São Paulo: Ed. Atlas, 2004.
LARMAN, Craing. Utilizando UML e padrões: uma introdução à análise e ao
projeto orientado a objetos; Tradução Luiz A. Meirelles Salgado – Porto Alegre:
Bookman, 2000.
INTEGRATOR. Disponível em http://www.integrator.com.br/ . Acessado em
25/06/2008.
JAMSA, K. & KLANDER, L. Programando em C/C++: A Bíblia. São Paulo:
Makron Books. Tradução e revisão técnica: Jeremias René D. Pereira dos
Santos,1999.
PRESSMAN, Roger S. Engenharia de Software. São Paulo: Makron Books,
1995.
JANDL, P. J. & ZUCHINI, M. H. IC: Um Interpretador de Linguagem C. IN
Projeções - USF, Bragança Paulista, V. 17, 1999, pp. 101-112.Kurnia, A., Lim,
A e Cheang, B. (2001) Online Judge. Computer & Education, v. 36 p. 299-315.
57
JONES, C. Software Assesments, Benchmarks and Best Practices.
Addison Wesley, 1999.
LEAL, Luciana Nunes. Natural MDA: Uma linguagem de especificação de
ações baseada em linguagem natural controlada. 2006. Dissertação
(Mestrado em Informática), Núcleo de Computação Eletrônica Universidade
Federal do Rio de Janeiro, Rio de Janeiro-RJ.
LEITE, M. & RAHAL, N. A. S. Jr. Programação Orientada ao Objeto: uma
abordagem
didática.
Disponível
http://www.ccuec.unicamp.br/revista/infotec/artigos/leite_rahal.html.
em:
Acessado
em 25/06/2008.
MACLENNAN & BRUCE J. Principles of Programming Languages. Oxford
University Press, 1987.
MAKER, Softwell Solutions, 2008, 1 cd room. Homepage Institutional.
MALTA, S. & LAGO, E. & MOURA, G. & MOURA, M. F. Manual de Orientação
para Normalização de Trabalhos Científicos. Paulo Afonso: Faculdade Sete
de Setembro, 2006.
MICROSOFT OFFICE 2003. Microsoft Corporate, 2008, 1 cd room. Homepage
Institutional.
MOORE, G.. Cramming more components onto integrated circuits.
Electronics Magazine, Volume 38, Número 8. Abril, 1965.
NETBEANS. Disponível em http://www.netbeans.org. Acessado em 24/06/2008
PAPERT, S. New Images of Programming: in search of an educationally
powerful concept of technological fluency. (A proposal to the National
Science Foundation). Cambridge, MA:MIT Technology Laboratory, 1991.
58
PRESSMAN, Roger S. Engenharia de Software. São Paulo: Makron Books,
1995.
REZENDE, P.J. & GARCIA, I.C. Astral: Animação Gráfica de Algoritmos e
Estruturas de Dados - Uma Abordagem Construtiva, VIII Simpósio Brasileiro de
Computação Gráfica e Processamento de Imagens, 1995.
ROCHA, Camila Ribeiro. Estudo do Paradigma de Orientação a Objetos no
Desenvolvimento de Sistemas de Informação. 2002. Iniciação Científica.
(Graduando em Bacharelado Em Ciência da Computação) - Universidade
Federal de Goiás, Instituto de Informática.
ROSENBERG, S. Anything You Can Do, I Can Do Meta. Technology.
Disponível em http://www.technologyreview.com/Infotech/18047/. Acessado em
26/05/2008.
RUSSELL, S. & NORVIG, P. Artificial Intelligence: A Modern Approach.
Segunda Edição, 2005.
SANTIAGO, Rafael de & DAZZI, R. L. S. Ferramentas que auxiliam o
desenvolvimento da lógica de programação. In: XII SEMINCO - Seminário
de Computação, 2003, Blumenau. Anais do XII SEMINCO. Blumenau : Furb,
2003. p. 113-120.
SEBESTA, R. W. Concepts of Programming Languages. California: The
Benjamin Cummings Publishing Company Inc.,1989.
SIDLER, R. Software Productivity, 2002.
SIMONY,
Charles,
Intentional
Software,
http://www.infoq.com/interviews/simonyi-on-intentional.
15/04/2008.
disponível
em
Acessado
em
59
SILVA, S. R. P. & PINHEIRO, J. M. . Um Framework para Criação de
Linguagens de Domínio Específico. In: 8o Simpósio Brasileiro de Linguagens
de Programação, Rio de Janeiro, 2004.
SOFTWELL
Solutions.
Simplificamos
a
Tecnologia,
disponível
em
http://www.softwell.com.br. Acessado em 25/04/2008.
SOMMERVILLE, Ian. Engenharia de software. 6. ed. São Paulo: Pearson, ,
2003.
SUN, Java Technology. Disponível em http://java.sun.com/. Acessado em
26/05/2008.
THE STANDISH GROUP REPORT. The CHAOS Report, 1995.
TIOBE
SOFTWARE,
disponível
em
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html, acessado em
22/06/2008.
WIKIPEDIA,
FLUXOGRAMAS.
Disponível
em
http://pt.wikipedia.org/wiki/Fluxograma. Acessado em 26/05/2008.
WIKIPEDIA. Wysiwyg. Disponível em http://pt.wikipedia.org/wiki/WYSIWYG,.
Acessado em 26/05/2008.
60
APÊNDICE
61
APÊNDICE A – CASO DE USO DO SISTEMA DESENVOLVIDO
uc001 – CADASTRO DE CLIENTES
Atores
•
Usuário do Sistema;
•
Cliente
Descrição Sucinta
Cadastrar os Clientes da empresa, a fim de manter seus dados em uma base
de dados informatizada.
Pré-Condições
Ter em mãos os dados do cliente
Fluxo Principal
Cadastrar Cliente
1. Selecionar no menu ou clicar em botão para abrir a tela de Cadastro de
Clientes;
2. Incluir os dados;
3. Clicar em Cadastrar
<Campos do Formulário>
Campo
Obrigatório? Editável?
Formato
ID
S
N
INTEIRO
NOME
S
S
VARCHAR(100)
CPF
N
S
CHAR(11)
RG
N
S
VARCHAR(15)
ENDERECO
N
S
VARCHAR(100)
62
NUMERO
N
S
VARCHAR(10)
BAIRRO
N
S
VARCHAR(50)
CIDADE
N
S
VARCHAR(50)
ESTADO
N
S
CHAR(2)
<Opções do usuário>
Opção
Descrição
Incluir
Incluir um novo registro
Alterar
Alterar o registro
Excluir
Excluir o registro
Atalho
Fluxos Alternativos
FA01–Alterar
Alterar o cadastro do cliente
•
Selecionar opção ou clicar em botão para alterar o Cadastro de Clientes;
•
Incluir os novos dados;
•
Clicar na opção de gravar;
FA02–Excluir
Excluir o cadastro do cliente
•
Selecionar a opção ou clicar em botão para excluir o registro
selecionado;
•
Perguntar se realmente deverá excluir (MS01);
•
Confirmar ou cancelar o procedimento;
63
Mensagens de Tela
MS01
Antes de exclusão do usuário, deverar ser perguntado ao usuário se
realmente deseja excluir o registro
Requisitos
RT01 – Não permitir ser informado o campo código, o mesmo deverá ser
comente leitura.
RT02 – Os campos numéricos devem ser bloqueados para digitação de
caracteres não numéricos.
RT03 – A quantidade máxima de caracteres permitidos para cada campo
deve-se limitar ao tamanho máximo no banco de dados.
RT04 – O tamanho do campo na tela deverá ser compatível com seu
tamanho no BD.
RT05 – O campo referente ao Estado deverá ser escolhido em uma lista.
RT06 – A tabulação dos campos deverá ser de acordo a seqüência
informada no fluxo principal.
RT07 – Os campos obrigatórios deverão ser validados.
Protótipo
PT01 – Cadastro de Cliente
64
Figura 1 Protótipo da tela de cadastro
65
APÊNDICE B – ROTEIRO DE ANÁLISE DOS SOFTWARES
DESENVOLVIDOS
66
APÊNDICE C – FORMULÁRIO COM OS TEMPOS DE DURAÇÃO DE CADA
APLICAÇÃO
FERRAMENTA /
PARADIGMA
CAKEPHP /
PROCEDURAL
JPA/NETBEANS /
ORIENTADO A OBJETOS
MAKER / PROGRAMAÇÃO
INTUITIVA
TEMPO
INÍCIO
FIM
09:53
10:27
34
09:37
10:09
31
09:41
09:58
17
(minutos)
Download

Visualizar monografia