Maus cheiros no desenvolvedor de software

Mau Cheiro Desenvolvimento SoftwarePara os que se interessaram pelo tema, pois tem algum colega com dificuldades sérias de higienização: sinto muito. Não é minha intenção fazer devaneios sobre o número máximo de dias que um desenvolvedor pode utilizar a mesma camiseta. A expressão ‘maus cheiros’ (em inglês ‘bad smells’) é utilizada em software como indicativo para alguma coisa que pode não estar bem.

Martin Fowler e Kent Beck introduziram o conceito de ‘mau cheiro’ no código fonte: código duplicado, métodos longos, muitos parâmetros e outros. Gerard Meszaros fez o mesmo para testes: testes obscuros, lógica de testes em produção, para citar alguns. O mau cheiro não indica que, efetivamente, existe algum problema, mas serve como um indicativo que certamente vale a pena examinar. Continue lendo “Maus cheiros no desenvolvedor de software”

Brasil e a melhoria do processo de produção de software (Softex e MPS.BR)

Para que uma organização consiga mensurar seus resultados e manter-se em constante melhoria do software que produz, seguir um modelo de maturidade de processo de software é fundamental.

Os modelos de maturidade servem para guiar o processo de melhoria da qualidade do software. Esses modelos servem de referência e possibilitam o diagnóstico da qualidade software produzido, pois estabelecem critérios de medição e avaliação dos resultados obtidos. Para isso a Softex e o governo brasileiro desenvolveram o MPS.BR, programa  para Melhoria de Processo do Software Brasileiro, voltado principalmente para pequenas e médias empresas, com o objetivo de definir e aprimorar um modelo de melhoria e avaliação de processo de software. Continue lendo “Brasil e a melhoria do processo de produção de software (Softex e MPS.BR)”

UML e os Diagramas Estruturais

Entre os conjuntos de diagramas da UML (Unified Modeling Language) estão os diagramas estruturais, utilizados para visualizar, especificar, construir e documentar os aspectos estáticos de um sistema. Este artigo tem como objetivo, introduzir de forma simplificada cada um dos diagramas estruturais da UML 2.0. São eles os diagramas de Classe, Objetos, Componentes, Implantação, Pacotes e Estrutura. Continue lendo “UML e os Diagramas Estruturais”

Engenharia de Requisitos: Por onde começo?

Por mais que as empresas digam que utilizam um método para definir os requisitos de seu software, a maior parte delas não aplica os conceitos dessa parte importante do processo.

A aplicabilidade da engenharia de requisitos mostra-se falha dentro das empresas. Mas onde as empresas estão errando? O que pode ser alterado no processo das empresas para que isso seja ajustado? Antes de elencar o que deve ser modificado, temos que entender o que é a engenharia de requisitos. Continue lendo “Engenharia de Requisitos: Por onde começo?”

Princípios da Gerência de Configuração de Software

Hoje em dia constatamos que as mudanças ocorrem em uma velocidade espantosamente rápida, isso não é diferente no desenvolvimento de um software: a legislação, o entendimento dos usuários sobre suas necessidades, o ambiente ao qual o sistema vai operar, os requisitos, tudo muda. Devido a tantas mudanças, é necessária alguma forma de gerenciamento para que o desenvolvimento não seja catastrófico.

Durante o desenvolvimento de software, uma grande quantidade de informações é produzida, tais como: especificações, planos de projeto, arquivos de código fonte, casos e planos de testes, manuais, arquivos de dados, entre outros. Cada um desses documentos produzidos poderá ser considerado um item de configuração de software. A configuração de software é composta pelos itens de configuração produzidos durante o processo de engenharia de software, ou seja, no processo de desenvolvimento disciplinado de sistemas. Continue lendo “Princípios da Gerência de Configuração de Software”

Treze práticas para desenvolvimento de software (Boas Práticas)

Para o desenvolvimento de softwares de qualidade é necessário dominar um conjunto de habilidades e conhecimentos que fazem com que o este processo se mantenha organizado e com crescimento constante, esse conjunto de técnicas quando utilizado de forma saudável pode ser descrito como boas práticas.  Se todas estas técnicas forem documentadas podem render um bom guia para esta mítica tarefa de criar softwares. Neste artigo abordo de maneira simplificada treze tópicos que podem auxiliar no entendimento do que envolve o desenvolvimento de software e serem adotados como boas práticas. Continue lendo “Treze práticas para desenvolvimento de software (Boas Práticas)”

TDD (Test Driven Development) e a batalha das opiniões

Uma técnica ágil pouco usada e proporcionalmente conhecida, o TDD(Test Driven Development) ou Desenvolvimento orientado a testes, pode ser enxergado como um vilão aos olhos de algumas empresas, mas para outras esta técnica veio como um heroi. Descubra lendo esse artigo o porquê dessa guerra de opiniões e também um pouco de sua história. Continue lendo “TDD (Test Driven Development) e a batalha das opiniões”

Usabilidade. Você pensa nisso? (Boas práticas para desenvolver páginas fáceis de navegar)

Usabilidade é a simplicidade e facilidade com que uma interface, um programa de computador ou um website pode ser utilizado. Em outras palavras, é uma interface fácil de usar, fácil de aprender e que faz com que o usuário não cometa erros.

Você já teve dificuldade para navegar em algum website? Já desistiu de algum website por ser difícil de navegar? Pois é… Isso é muito é comum quando as páginas não priorizam a usabilidade.

Às vezes, desenvolver um website com uma navegação diferenciada e fora do comum é interessante e pode render resultados muito bons. Porém, é importante pensar no público-alvo e seguir algumas boas práticas para desenvolvimento de interfaces. Continue lendo “Usabilidade. Você pensa nisso? (Boas práticas para desenvolver páginas fáceis de navegar)”

Coding Dojo: Treinamento e transferência de conhecimento tecnológico

Segundo o http://codingdojo.org/: “Um Coding Dojo é um encontro onde um grupo de programadores se reúne para trabalhar em conjunto em um desafio de programação. Eles estão lá para se divertir, e, através de uma metodologia pragmática, melhorar suas habilidades de programação e de trabalho em grupo.”

Na Wikipédia encontramos: “Dojo (em japonês: 道場 sítio do caminho?, Dōjō) é o local onde se treinam artes marciais japonesas. Muito mais do que uma simples área, o dojo deve ser respeitado como se fosse a casa dos praticantes”. Mas no nosso contexto, o treinamento é da arte da construção de software e codificação. Continue lendo “Coding Dojo: Treinamento e transferência de conhecimento tecnológico”

Modelos de ciclo de vida: Cada empresa deve descobrir qual é o melhor para o seu processo

Os ciclos de vida definem basicamente como um software deve ser desenvolvido, e descrevem com detalhes as etapas e atividades a serem executadas. O modelo adotado pode determinar o sucesso da produção de um projeto, pois ajuda a melhorar o andamento do projeto e garantir que os objetivos sejam alcançados.

Definindo claramente essas etapas, torna-se possível o controle e avaliação da qualidade de cada etapa, ou atividade. Continue lendo “Modelos de ciclo de vida: Cada empresa deve descobrir qual é o melhor para o seu processo”

Refactoring: Re-escrevendo código fonte para ganhar qualidade e performance

“Refatoração é uma técnica elaborada para reestruturar um código fonte existente, alterando sua estrutura interna sem mudar o seu comportamento final, anda junto com a manutenção de software.

A idéia principal de refatorar está em uma série de pequenas melhorias que mantém a estrutura inicial da regra de negócio realizando a manutenção do código. Cada refatoração faz pouca coisa, mas uma seqüência de pequenas refatorações pode fazer uma diferença significativa. Uma vez que cada refatoração tem um escopo pequeno e é localizada existe um baixo risco associado. O sistema se mantém funcionando normalmente após cada refatoração, reduzindo as chances de o sistema sofrer um grande erro durante sua reestruturação. Continue lendo “Refactoring: Re-escrevendo código fonte para ganhar qualidade e performance”

Modelagem de software baseada em análise de vulnerabilidades

Modelagem de software baseada em análise de vulnerabilidades é um processo de análise feita durante o desenvolvimento de uma aplicação, onde devemos identificar os bens ou recursos que aplicação deve proteger e avaliar a necessidade de proteção em relação aos acessos de usuários aos recursos do sistema e sua possibilidade de ação/interação na aplicação.

Devemos ter em mente o ativo que pretendemos proteger e como desenvolvedores podem simular invasões na aplicação e exploração dos pontos de coleta de informações. Este processo deve ser repetido durante a análise, construção, teste e manutenção da aplicação. Continue lendo “Modelagem de software baseada em análise de vulnerabilidades”

Teste de Software: Investimento necessário.

O mundo está aderindo ao software por vontade própria ou impropria. A necessidade da utilização de sistemas esta cada vez maior pela obrigatoriedade do mercado. É uma realidade presente em nossas vidas desde uma aplicação para celular até para controle de uma nave espacial. Cada vez mais os sistemas estão se tornando complexos, com isso vem à necessidade de se investir em teste de forma profissional e com qualidade para garantir o desenvolvimento de software seguro.

Investir para reduzir falhas, erros ou defeitos aumenta a reputação da empresa que desenvolve o software, testar corretamente diminui a exploração de vulnerabilidades de segurança. Continue lendo “Teste de Software: Investimento necessário.”

Entendendo SQL Injection

A melhor defesa para falhas de segurança é o teste adequado do software e a utilização componentes com alto nível de maturidade.

SQL Injection é uma ameaça de segurança que utiliza um conceito bastante simples para atacar suas vítimas: utilizar comando SQL em campos de entrada de dados na tentativa de “enganar” o programa e obter acesso ao banco de dados, podendo ser para roubar ou adulterar informações ou prejudicar a imagem da empresa, indisponibilizando os serviços prestados pela vítima. Continue lendo “Entendendo SQL Injection”