Qualidade de Software e TDD

Eaí pessoal, qualidade é um assunto polêmico quando muitos de nós desenvolvedores trabalhamos com a metodologia XGH, mas afinal de contas.. O que é qualidade de software?

Um software de qualidade é aquele que satisfaz as necessidades definidas e não definidas do cliente, ou seja, faz com que software proporcione utilidade, confiança, segurança, prazer e conforto ao seu usuário.

E como garantir qualidade?

Para garantir a qualidade são necessários vários fatores, que podemos dividir em dois grupos:

  • Processos de Gestão/Requisitos
  • Processo de Desenvolvimento

Uma boa gestao de processos e equipe de levantament de requisitos são chave para a produção de um software de qualidade! Requisitos bem definidos deixam os implícitos de forma explícitas, ajudando as duas partes. Quem nunca ouviu: “Mas não foi assim que eu pedi”.

Já durante o processo de desenvolvimento de software, para garantir um software de qualidade existem alguns fatores, que acredito que sejam fundamentais levarmos em consideração quando entregamos um produto:

  • Manutenabilidade: Um código bem escrito e coeso, fácil de entender e pouco complexo. Algo que o desenvolvedor não tenha dificuldade para entender. É preciso lembrar que, quando escrevemos um código estamos criando um filho, que pode nos acompanhar por muitos e muitos anos.
  • Realização de Testes: Para a garantia de um software sem defeitos, erros ou falhas. Existem várias formas e tipos de testes que cobrem uma parte específica do sistema.
  • Documentação na medida: Eu acredito que, a documentação não pode ser em excesso e também não pode faltar.
  • Utilidade: Afinal de contas, do que adianta um código bem escrito, documentado e testado se não serve pra nada? É preciso que tenha alguma utilidade ao usuário.
Test Driven Development (TDD)

Seguindo a linha da garantia de qualidade de software, TDD é uma metodologia de desenvolvimento, que visa garantir a qualidade na entrega do software. O TDD, apesar de ser antigo (levando em consideração a evolução tecnológica) teem sido adotado cada vez mais nas fábricas de software.

TDD o que? Do inglês desenvolvimento orientado a testes, define algumas etapas antes de se desenvolver. Basicamente o desenvolvedor precisa escrever o teste antes de se desenvolver. Mas como isso funciona?

  1. Cenário de Teste: A ideia desta etapa, é que o desenvolvedor utilize alguma ferramenta de teste automatizado, escrevendo o teste.
  2. Produção do Código: Com base no teste produzido, o desenvolvedor começa a produção do código. Como o cenário de teste foi produzido anteriormente, essa etapa se torna mais produtiva.
  3. Execução do Cenário: Após a produção, a ideia é executar o teste até obter sucesso.
  4. Refatoração: Quando temos tudo funcionando é hora de refatorar. Talvez essa seja uma das etapas mais importantes, pois a ideia é tentar deixar o código mais simples e performático possível, ajudando também a ganhar manutenabilidade no código.

Puts.. mas escrever o teste antes.. dá trabalho heim? Sim e não, apesar de escrevermos mais código, o desenvolvedor que pensa no teste antes desenvolver é mais produtivo. Isso acontece porque ao escrevermos o teste, conseguimos enxergar os cenários de exceção e requisitos implícitos.

Bom pessoal, por hoje é só. Em breve estarei mostrando formas de implementar a primera etapa do TDD, conforme descrita acima. Este post dedico ao meu professor Adriano Bertucci que me incentivou a escrever um post com este tema. Até apróxima.

Anúncios

Deploy no Weblogic via linha de comando

Eae galera! Durante o processo de desenvolvimento perdemos muito tempo publicando pacotes em ambientes remotos realizando deploy via console/em do weblogic. Para facilitar existe uma forma de executar os deploys via linha de comando, desta maneira podemos automatizar o processo com alguns scripts.

#!/bin/bash
clear
SCRIPTPATH=`pwd -P`
cd /opt/oracle/mid1036/domains/soa_domain/bin
echo "executando setDomainEnv..."
. ./setDomainEnv.sh
echo "realizando undeploy..."
java weblogic.Deployer -adminurl t3://192.168.100.1:9001 -username weblogic -password weblogic1 -undeploy -name MyApp -targets cluster1
echo "realizando deploy..."
java weblogic.Deployer -adminurl t3://192.168.100.1:9001 -username weblogic -password weblogic1 -deploy -upload -name MyApp -targets cluster1 -source $SCRIPTPATH/MyApp.ear -plan $SCRIPTPATH/plan_MyApp_DEV.xml
echo "realizando deploy composite..."
ant -f /opt/oracle/mid1036/soa/Oracle_SOA1/bin/ant-sca-deploy.xml -DserverURL='http://192.168.100.1:9010' -DsarLocation=$SCRIPTPATH/sca_MyCompositeAPP_rev1.0.jar -Duser='weblogic' -Dpassword='weblogic1' -Dpartition='default' -Dconfigplan=$SCRIPTPATH/plan_sca_MyCompositeAPP_DEV.xml -Doverwrite=true

echo "deploys realizados com sucesso!"

O Script acima realiza deploy dos pacotes MyApp.ear e sca_MyCompositeAPP_rev1.0.jar. Com esse script basta executar no mesmo diretório onde está os pacotes.

Executando comandos nativos do SO em JAVA

Muitas vezes ao programar nos esquecemos que no próprio sistema operacional contém recursos que podem ser aproveitados pelo desenvolvedor. É possível por exemplo, compactar arquivos, fazer manipulação de diretórios, entre outras infinidades de recursos que o SO oferece, sem fazer uso de API’s que as vezes podem ser complicadas de se trabalhar e não oferecer o desempenho desejado.

Para executar comandos nativos do SO utilizaremos a classe Process e a Runtime.

 try{

     Process processo = Runtime.getRuntime().exec("xfce4-terminal");
     processo.waitFor();

 }catch(IOException io){}
  catch(InterruptedException ie){}

No código acima, recuperamos o processo da instância de execução com o Runtime.getRuntime(), e executamos um comando nativo do SO onde está sendo executada a aplicação java, no caso um comando que chama o terminal xfce do linux. Este processo é executado de forma assíncrona, portanto você pode ter problemas ao executa-lo em um bloco de comandos onde utilizará de um recurso criado por este processo, portanto usamos o método waitFor() que faz com que o thread atual espere até que o processo seja terminado.

Toda aplicação java tem uma instância da classe Runtime, portanto isto permite a comunicação entre a aplicação e o ambiente(Sistema Operacional) onde ela está sendo executada.