Autor: valbertovc

É especialista em Qualidade e Testes de Software e possui interesse em aprender sobre desenvolvimento WEB com Java, Ruby on Rails, Python e Django, Engenharia de Software, modelagem de processos de software e demais assuntos relacionados a Tecnologia da Informação.

Experiências na instalação do ambiente Ruby 1.8.7 on Rails 2.3.6

A configuração deste ambiente foi motivada por se tratar de um ambiente bem parecido com o de uma hospedagem de contratei esses dias no site5.com. Lá eles não tem a versão mais nova do Ruby (1.9.3), e não instalaram ainda por diversos motivos. A principal vantagem é que eles permitem a configuração do Rails 3. E esse era o meu interesse.

Este post tem por objetivo principal mostrar os passos necessários para instalar no Windows 7 32 bits o seguinte ambiente de desenvolvimento:

  • Ruby 1.8.7
  • Rails 2.3.6
  • Mysql Server Community 5.5.25

Comecei assim.

  1. Instalei o Ruby 1.8.7

  2. Instalei o DevKit

  3. Instalei o Rails

    • Abrir o prompt de comando (cmd)
    • Digitar o comando de instalação: gem install rails
  4. Instalei o MySql Community

  5. Instalei a libmysql.dll

    • Baixar o conector neste link: mysql-connector-c-noinstall-6.0.2-win32.zip
    • Extrair os arquivos para uma pasta qualquer: C:\MySqlConnector\ (Sugestão minha)
    • Copiar o arquivo C:\MySqlConnector\lib\libmysql.dll na pasta C:\Ruby187\bin\
  6. Criei o projeto

    • Abrir o prompt de comando
    • Criar a pasta: C:\sites\
    • Navergar até esta página com o seguinte comando: cd C:\sites\
    • Criar o projeto: rails new nome_do_seu_site -d mysql
    • Aguardar a finalização do processo
  7. Configurei os parâmetros de banco de dados

    • Usar as informações desta página para criar um usuário e garantir os privilégios dele
    • Abrir o arquivo: C:\sites\nome_do_seu_site\config\database.yml
    • Informar  usuário e senha
    • Configurar a porta de acesso (port: 3306)
    • Salvar e sair
  8. Configurei o arquivo hosts do Windows

    • Executar o notepad como administrador
    • Abrir o arquivo C:\Windows\System32\drivers\etc\hosts
    • Retirar o # (comentário) da linha: # 127.0.0.1    localhost
    • Salvar e sair
  9. Executar o seu projeto

    • Ser feliz! 😀

Principais problemas enfrentados

SyntaxError on the welcome to rails screen using Pow

  • Causa: Executei o comando (6) de criação da aplicação quando a versão do Ruby instalada era 1.9.3.
  • Solução: Desinstalar todas as versões do Ruby, instalar a versão correta, indicada na seção (1), e por fim, criar um novo projeto.

mysql2 gem compiled for wrong mysql client library

  • Causa: Usei a biblioteca libmysql.dll disponível no site Dll-files.com que está numa versão diferente da exigida pela gem mysql2 do Ruby.
  • Solução: Substitui o arquivo libmysql.dll pela versão oficial, disponível do site do MySql. Para fazer isso, basta executar o passo 5.

Can’t connect to MySQL server on ‘localhost’ (10061) (Mysql2::Error)

  • Causa: A aplicação não consegue encontrar o endereço localhost para se conectar ao banco de dados.
  • Solução: Editar o arquivo hosts e retorar o comentário da linha: # 127.0.0.1   localhost. Para fazer isso, basta executar o passo 8.
Anúncios

Foco na Qualidade de Software

Imagem

O ciclo de vida de um produto de software apresenta atributos que são influenciados uns pelos outros. O processo influencia no produto, que por sua vez influenciará na qualidade em uso. Fazendo o caminho inverso, há uma dependência entre estas características. A qualidade em uso depende da qualidade do produto, que depende a qualidade do processo de desenvolvimento. Assim, percebe-se a importância de um foco constante na qualidade do processo de software, pois ele garantirá uma padronização das atividades, das práticas e dos artefatos.

Imagem

É comum parar e ficar pensando se é realmente necessária a prática da padronização através de um processo. Por que a padronização dessas práticas é tão importante? A resposta parece simples. Objetiva. A padronização força a reflexão sobre as práticas, que estão sendo desempenhadas pela equipe do projeto, e somadas a isso, a definição expressa problemas no processo e facilita a identificação dos pontos de melhoria.

Qualidade no CMMI

O foco na qualidade é tão importante que o CMMI-dev definiu uma Área de Processo (PA) no nível 2 (Gerenciado) do Modelo de Maturidade, denominada Garantia da Qualidade de Processo e Produto. O propósito principal dela é “Munir a equipe e a gerência com uma visão clara sobre os processos e seus produtos de trabalho associados”. Além disso, define dois grupos e práticas específicas, são elas:

  1. Avaliar Objetivamente processos e produtos de trabalho
  2. Fornecer um entendimento objetivo

Qualidade no MPS-BR

Assim como o CMMI, o MPS-BR define níveis de maturidade de uma organização. Logo, o nível F (Gerenciado) define algumas práticas que devem ser seguidas para garantir a qualidade dos produtos desenvolvidos. Entre elas está o processo de Garantia da Qualidade (GQA) que tem como principal propósito “garantir que os produtos de trabalho e a execução dos processos estão em conformidade com os planos e recursos predefinidos”. Assim, para atingir este propósito, o MPS-BR define alguns resultados esperados para este processo, são eles:

  1. A aderência dos produtos de trabalho aos padrões, procedimentos e requisitos aplicáveis é avaliada objetivamente, antes dos produtos serem entregues e em marcos predefinidos ao longo do ciclo de vida do projeto;
  2. A aderência dos processos executados às descrições de processo, padrões e procedimentos é avaliada objetivamente;
  3. Os problemas e as não-conformidades são identificados, registrados e comunicados;
  4. Ações corretivas para as não-conformidades são estabelecidas e acompanhadas até as suas efetivas conclusões. Quando necessário, o escalamento das ações corretivas para níveis superiores é realizado, de forma a garantir sua solução.

Qualidade na ISO/IEC 9126

Esta norma trata especificamente sobre os atributos de qualidade de software e possui uma abordagem que facilita o entendimento das características que afetam diretamente a qualidade. Ela se divide em 4 partes, como subconjuntos da mesma.

  • 9126-1: Modelo de Qualidade
  • 9126-2: Métricas Externas
  • 9126-3: Métricas Internas
  • 9126-4: Métricas de Qualidade em Uso

Um detalhamento maior sobre a norma ISO/IEC pode ser encontrado nas referências deste artigo.

Conclusão

Por fim, quando há foco na qualidade, há um pensamento contínuo em melhorar o processo de produção/desenvolvimento dos produtos. O grande benefício de ter foco na qualidade do processo, é que o resultado estará expresso na qualidade dos produtos desenvolvidos a partir dele.

Referências

  1. ISO/IEC 9126
  2. Análise dos Impactos na Qualidade De Software em Instituições Financeiras Segundo a Norma ISO/IEC 9126 na Adoção das Práticas de Testes do Modelo CMMI
  3. Página principal do MPS-BR
  4. Melhoria de Processos do Software Brasileiro
  5. CMMI
  6. CMMI for Development, Version 1.2

Mantis Bug Tracking

Logo do mantisUma das principais ferramentas que o testador deve ter conhecimento é a ferramenta de bug tracking. Este tipo de ferramenta tem como principal característica o gerenciamento dos defeitos (bugs) de um projeto. A quem use-a não só para este fim, mas com certeza este é o seu foco e é por isso que ela é conhecida.

Por que usar?

Usar uma ferramenta de bug tracking trará um grande ganho de produtividade para a equipe de desenvolvimento, pois os principais benefícios são:

  • Visão geral da quantidade de feitos apresentados por um produto de software
  • Centralizador de informações a respeito dos defeitos ocorridos e das medidas usadas para resolver os problemas
  • Histórico da evolução da qualidade dor produto desenvolvido
  • Comunicador de ocorrências, através do envio de e-mails

Estas são algumas informações básicas sobre os benefícios trazidos para quem usa uma ferramenta. Você mesmo deve estar pensando agora em vários outros benefícios e quem sabe até em limitações. Fique a vontade para comentar.

Características Gerais

O Mantis é um sistema de código aberto, sob a licença GNU General Public License (GPL), que foi desenvolvido na linguagem de programação PHP e utiliza o banco de dados MySQL ou PostgreSQL para armazenar as informações. Por ser um sistema WEB, ele roda em um servidor de aplicação e é acessado através de um navegador.

No momento da instalação você certamente irá querer facilidades, para que você consiga executar a ferramenta o mais rápido possível e comece a mostrar os resultados para a sua equipe. Pois bem, uma das maiores recomendações é usar o WAMP (Windows, Apache, MySQL e PHP) ou LAMP ( Linux, Apache, MySQL e PHP).

Customização

Este com certeza é um bom motivo pelo qual um gerente de projetos pode escolher esta ferramenta. A sua licença e o código aberto permitem que você realize customizações para diversos fins. Acredito que alguns deles sejam a produtividade, a comunicação e a extração de informações diferenciadas. Posso citar como exemplo, o desenvolvimento de plugins que:

  • Simulam online o task board do scrum
  • Se integram ao Twitter ou outros sistemas de comunicação interna
  • Exportam relatórios para pdf, xls e outros formatos
  • Alteram o layout e as cores da aplicação

Leia mais sobre os assunto

Um bom lugar para começar é através da página principal da ferramenta. Nela você encontrará as informações necessárias e demonstrações de uso. Além disso, este site também mostra um panorama geral da ferramenta e estes aqui:

  1. Plugins para o Mantis – Parte 1
  2. Instalar o bug tracker Mantis

mostram como instalar. Pronto, agora é mãos à obra.

Comentários de código (série Code Smells)

Dizer que comentário de código é mau cheiro não quer dizer que nunca devermos escrever comentários. Não estou afirmando isto, mas tome muito cuidado ao comentar seu código. Fowler et al (2002, p.71) afirmam que muitas vezes os comentários são usados como desodorante. A primeira ação a ser tomada é a eliminação dos maus cheiros, que possivelmente estão ao redor deste tipo de comentário. A primeira ação a ser tomada é refatorar. Quando você terminar, verá que os comentários serão supérfluos. Continuando nesta mesma ideia, Fowler demonstra quais métodos de refatoração utilizar diante de algumas necessidades de refatoração. Veja como faz sentido:

  • “Precisa de um comentário para explicar o que o bloco de código faz”? Use Extrair Método.
  • “Já extraiu o método e mesmo assim ainda precisa explicar?” Use Renomear Método.
  • “Precisa indicar algumas regras sobre o estado do sistema?” Use Introduzir afirmação.

Realize os procedimentos explicados acima e assim que terminar analise novamente se seus comentários ainda são necessários. Provavelmente não serão. Portanto, você deve usar comentários:

  • Quando não sabe exatamente o que fazer;
  • Para descrever o que está acontecendo;
  • Para explicar por que fez aquilo.

Este tipo de comentário com certeza irá ajudar os possíveis modificadores daquela parte do código.

Referências

Code Smells

É interessante como nunca me ensinaram isso na faculdade. Quando uma pessoa aprende a desenvolver sistemas, também deveria aprender como não desenvolver. Principalmente isto. Assim, você pode focar na solução que deseja desenvolver e saberá se está fazendo algo muito errado. Saberá também quais as melhores práticas de desenvolvimento e, melhor ainda, poderá deixar seu código mais claro, conciso e flexível.
Sabe aquele código que você olha e sente um mau cheiro? Alguns pensam, outros preferem falar em voz baixa: – “Nossa, é um perigo mexer aqui”. Ou pior do que isso, você lê aquele comentário no início da classe: “Só Jesus entende o código abaixo, melhor você cair fora”. Pronto, você agora sente a prensença de um code smell.
Um code smell é uma parte do código fonte do seu programa que poderá causar algum problema. Na literatura existem vários padrões já identificados e difundidos. A partir destes padrões você pode avaliar seu código e verificar se ele está muito mau-cheiroso.
A Industrial Logic disponibilizou uma lista dos padrões de code smells mais conhecidos e das possíveis técnicas de refatoração que você pode utilizar para eliminar estes problemas. Acredito ser uma lista muito boa para consultar naquele momento em que queremos alterar o código fonte e tentar melhorá-lo.

Code smells mais comuns

Alguns autores preferem dividir a lista de code smells comuns em duas partes, os que estão em uma classe e os que envolvem mais de uma classe. Mas como o objetivo do post é ser introdutório, apresentarei uma lista única. São eles:

  • Comentários
  • Código duplicado
  • Método longo
  • Classe muito grande
  • Muitos parâmetros
  • Recurso invejoso
  • Intimidade inaproriada
  • Herança recusada
  • Classe preguiçosa
  • Complexidade inventada
  • Identificadores excessivamente longos
  • Identificadores excessivamente curtos
  • Uso excessivo de literais

Agora tenha muito cuidado quando decidir alterar uma parte do seu sistema que esteja “funcionando”. Tenha testes que garantam o comportamento do seu sistema, pois a chance de você inserir outros erros, ao tentar eliminar os maus cheiros, é grande! Muita calma nessa hora. Refatorações devem ser controladas, objetivas e pequenas para que tenham os resultados desejados.

E melhor do que ficar lendo sobre code smells aqui, é procurar mais informações e ler um pouco mais sobre o assunto. Comece por esta lista de links:

  1. Code smells by Wikipedia
  2. Code smells by Jeff Atwood in Coding Horror
  3. Code smells to refactoring, quick reference by Industrical Logic
  4. Badsmells to refactoring by java.net
  5. Code smells e refactoring by Carlos Duarte

Extraindo INSERTs a partir de um SELECT

Atualmente, várias Ferramentas para Gerenciamento de Banco de Dados possuem um conjunto vasto de recursos e facilidades que aumentam a produtividade a aceleram o desenvolvimento de sistemas com bancos de dados. Entre estes, não poderia faltar a opção de extrair INSERTs de um conjunto de registros, a final, se trata de uma operação básica e comumente utilizada. O Oracle SQLDeveloper é um exemplo de ferramenta que possui esta operação e facilita muito a vida do usuário (Desenvolvedor/Analista/Gerente de Configuração). Porém, como nem tudo no desenvolvimento e análise de sóftware são flores, há ferramentas como o PGAdmin, para o banco de dados PostgreSQL, que não oferecem esta facilidade. Pois bem, a fim de facilitar a vida de quem usa o PGAdmin, linha de comando ou outra ferramenta, que não dê suporte a esta operação, aí vai um exemplo de como extrair os inserts desejados:

SELECT
 'INSERT INTO rh.pessoa (id_pessoa, nome, idade) VALUES (' || id_pessoa || ', \'' || nome || '\', ' || idade || ');'
FROM
 rh.pessoa;

Essa extração de inserts a partir de select é geralmente realizada quando se deseja extrair informações de um banco e inserir em outro. Por exemplo, durante uma operação de merge de banco de dados.

Se você quiser saber mais sobre o assunto, sugiro estudar sobre: SQL, Banco de dados, SGBD, Scripts DDL e Scripts DML.

BPM – Business Process Management

Business Process Management

O Gerenciamento de Processo de Negócio (tradução de Business Process Management) é uma metodologia de otimização de processos que une gestão de negócio com tecnologia da informação, com foco em maximizar os resultados das organizações através da melhoria dos processos de negócio[1].

Para Swenson[2] é muito importante observar as diferenças entre um BPM e Engenharia de Software, pois são conceitos que estão sendo confundidos. Ele mostra diferenças cruciais entre um engenheiro de processo e um engenheiro de software, mostrando a importância de ter uma pessoa focada nos objetivos e na melhoria dos processos da empresa, em vez de uma pessoa focada em informatizar, automatizar ou codificar os processos.

  1. BPM => http://pt.wikipedia.org/wiki/Business_Process_Managemen
  2. BPM não é engenharia de software => http://www.bpm.com/bpm-is-not-software-engineering.html
Veja mais artigos sobre BPM.

Diferenças entre Gems e RubyGems

O Ruby também tem algo que o torna muito interessante. Este algo se chama RubyGems. Na verdade este é um módulo do Ruby que permite acessar um repositório de bibliotecas para o Ruby, as famosas Gems. Cuidado! Não confunda o RubyGems com as Gems.

  • RubyGems: Módulo para acesso ao repositório de bibliotecas através de comandos no terminal/prompt
  • Gems: Bibliotecas escritas em Ruby e armazenadas no servidor, que podem ser acessadas através dos comandos do RubyGems.

Para quem teve a oportunidades de conhecer o mecanismo de instalação de aplicativos do linux, especialmente no Ubuntu, sabe como é prático. O RubyGems possui um mecanismo muito parecido com o famoso apt-get do Linux. Em outros post detalharei melhor o funcionamento destes comandos.

Instalação do Ruby no Linux (Ubuntu)

A instalação do Ruby no Linux é muito parecida com a instalação no Windows. A maior diferença é que você só precisa de alguns comandos no terminal e ele se encarrega de todo o resto (baixar e instalar no devido lugar).

$ sudo apt-get install ruby1.9.1-full

Pronto, Ruby instalado. Agora você pode fazer um teste rápido. Digite no terminal:

$ ruby -v
Primeira Aplicação Ruby no Linux

Você já deve saber que escrever um “Hello World” em Ruby é muito simples. Então vamos fazer um programa executá-lo. Para fazer isso iremos precisar de um editor de texto simples(Gedit, por exemplo) e o terminal para digitar alguns comandos. Agora vamos aos passos:

  • Abra o terminal (console) e vamos criar uma pasta para guardar o nosso programa, da seguinte forma:
$ cd ~
$ mkdir testeruby
$ cd testeruby
  • Abra o Gedit ou outro editor de sua preferência, escreva o texto abaixo:
puts "Hello world Ruby!"
  • Salve com o nome programa.rb na seguinte pasta: ~/testeruby
  • Volte para o terminal e execute o seu programa
$ ruby programa.rb

Se você fez tudo certinho verá o texto “Hello world Ruby!” sendo exibido no terminal (console).

Quando se usa o Linux, existem duas formas de você executar seus programas utilizando o Ruby. A primeira forma é utilizando o comando ruby + nome-do-arquivo.rb no terminal, como no exemplo anterior. A outra forma, é colocar o caminho para o interpretador Ruby dentro do arquivo programa.rb como no texto abaixo:

#!/usr/bin/env ruby
puts "Hello world Ruby!"

Agora dê permissão de execução para o seu arquivo:

$ chmod +x programa.rb

E execute-o:

$ ./programa.rb

Perceba que a diferença entre as duas formas de execução de programas Ruby é apenas o comando no terminal. Na primeira forma você usa o comando “ruby” e na segunda você o executa como um arquivo qualquer do linux.

Pronto, programa escrito e executando! E agora, está pronto para outros desafios?