Metodologia de desenvolvimento de software: importância, conceitos e princípios

O software é o combustível utilizado pelos negócios modernos, construir e manter software de qualidade, de forma repetitível e previsível é difícil hoje e se tornará cada vez mais difícil. São sintomas típicos de problemas no desenvolvimento de software: falha no entendimento das necessidades dos usuários; inabilidade de tratar mudança de requisitos; descobrimento tardio de demandas importantes do projeto; falta de um processo definido para o desenvolvimento de software

Geralmente os projetos de desenvolvimento de software falham devido às seguintes causas: gerência “por demanda” dos requisitos; comunicação ambígua e imprecisa; arquitetura fracamente definida; complexidade sub-estimada; inconsistências não identificadas nos requisitos, projeto e no código e testes insuficientes. Ao tratar essas causas, através de uma metodologia de desenvolvimento de software, os sintomas serão eliminados e será mais fácil desenvolver e manter um software de qualidade de forma previsível e que possa ser repetida.

Segundo o dicionário Aurélio metodologia é o estudo dos métodos; caminho pelo qual se atinge um objetivo. Modo de proceder, maneira de agir.

As principais características de uma metodologia de desenvolvimento são o peso da metodologia – refere-se a quantos elementos a metodologia especifica, e o tamanho da metodologia – refere-se ao número de elementos de controle da metodologia

A figura abaixo ilustra os elementos que formam uma metodologia

image

O escopo de uma metodologia abrange a quantidade de papéis; atividades e os seus entregáveis

Os três princípios de uma metodologia

1. Quando mais pessoas estão envolvidas em um projeto, uma metodologia maior é necessária

image

2. Um pequeno aumento na metodologia, acresce muito o custo do projeto

image

3. Relacionamento entre tamanho da metodologia x tamanho do projeto x tamanho do problema

image

Uma metodologia de desenvolvimento de software é importante pois pode ser um marco para iniciar as melhorias, traz benefícios para todo o grupo, compartilhando as experiências; estabelece uma linguagem comum ; é um caminho para definir metas de melhoria contínua; traz facilidade na manutenção de sistemas ; reduz dependência de pessoas chaves e facilita o processo de testes

Ao se adotar uma nova metodologia, deve-se considerar que durante o processo de implantação da mesma haverá aumento do trabalho e da burocracia e a tendência de tornar o trabalho mais lento; dificuldade do aprendizado e que o treinamento custa tempo e dinheiro; a carga de trabalho aumenta no início do uso da metodologia, e os benefícios só são vistos mais tarde; a manutenção da documentação pode ser tediosa; a metodologia deve ser adaptada para cada tipo de situação

Principais metodologias do Mercado

RUP, XP, Select Perspective, Dynamic Systems Development Methodology (DSDM)

Scrum, Rapid Application Development, Feature-Driven Development (FDD)

Crystal Clear Methodology, U.K.-based Skills Framework for the Information Age (SFIA)

Foundation’s Profitable Information by Design (PRIDE) Through Phased Planning and Control and the Structured Systems Analysis and Development Method (SSADM)

Fujitsu’s Macroscope, Allen Systems Group’s Visual Process,

Gantthead Processes, Microsoft Solutions Framework

Acesse  http://delicious.com/prasabermais para ter acesso a um conjunto de links sobre metodologias de desenvolvimento de software

Artigo adaptado de http://alistair.cockburn.us/Methodology+space e do livro Princípios de Análise e Projeto de Sistemas com UML; Eduardo Bezerra; Editora Campus;2007

Visão geral do mercado de ferramentas para testes de software

Do ponto de vista dos fornecedores o mercado de ferramentas para testes de software é um mercado em consolidação, pois nos últimos 18 meses ocorreram diversas aquisições entre as empresas: a Borland comprou a Segue Software. A Micro Focus comprou a Borland e a linha de produtos open de qualidade de software da Compuware. A HP comprou a Mercury (líder de mercado). IBM e HP adquiriram ferramentas de software para testes de segurança. A Microsoft continua sua expansão nesse mercado, adicionando ferramentas de gerenciamento e de testes manuais na próxima versão do Visual Studio (2010)

Esse tipo de consolidação do mercado irá continuar na medida que os os fabricantes buscam uma solução completa de ALM (Application Life Cycle Management). Mesmo assim, um crescente número de fornecedores de ferramentas continuam entrando no mercado com foco em ferramentas livres de script (script free), Model-driven, para testes em ambientes cloud computing, para gestão de laboratório de testes, para testes de software SOA, gerenciamento de planos de testes, gerenciamento de casos de teste e defeitos.

Dado o market share dos principais fabricantes, HP e IBM, os fornecedores buscam uma estratégia de coexistência, enquanto os usuários geralmente usam diferentes fornecedores de ferramentas para atender as diversas necessidades de testes e de qualidade.

O mercado de ferramentas de automação para testes de software é um seguimento do mercado de ALM, e é formado por três principais áreas:

1.Gerenciamento de testes : composto pelas ferramentas para gestão e planejamento de atividades de testes e seus resultados,

2. Automação de testes de stress e carga: composto pelas ferramentas que simulam a carga de múltiplos usuários de uma aplicação para medição e ajustes da performance

3 Automação de testes funcionais e regressão – ferramentas de testes que imita um usuário visando a identificação de defeitos

Há ainda outras áreas cobertas pelas ferramentas, tais como: seleção e gestão de dados para testes, teste unitário, testes de segurança, usabilidade

Recentemente tem ocorrido um esforço de melhor integração das ferramentas de qualidade com as demais ferramentas utilizadas no ciclo de desenvolvimento, como a de gestão de requisitos, gestão de configuração, etc.

Integrando-se requisitos com casos de testes, e do processo de geração de build com a execução de suítes de testes e com a geração de relatórios de qualidade, será mais fácil se ter uma visão do estado corrente de um projeto sob a ótica da qualidade e de completude do projeto.

E a sua empresa, quais ferramentas para testes de software utiliza? São ferramentas open-source ou comerciais?

Qualidade do processo de desenvolvimento se traduz em qualidade do produto de software?

É sabido que programas de certificação como o CMMI e o seu primo brasileiro MPS.BR tem colocado os olofotes sobre os processos de desenvolvimento. Muitas empresas denvolvedoras de software fizeram o seu trabalho de casa no que tange a definir, documentar, e divulgar seu processo de desenvolvimento. Feito isso o próximo passo e obter um nível de certificação. Obtida a certificação (nível 2, ou nível 3 ou…) aí e só alegria! Almoços de comemoração e muita publicidade, afinal de contas deu um bocado dc trabalho para conseguir a certificação. Mas e a qualidade do produto de software?

Bem, este é o ponto. Certificação do processo, não significa certificação do produto! É aí que mora o perigo! Deitado em berço esplêndido de uma certificação muitas empresas se esquecem da qualidade do produto.

Para garantir que um processo certificado produza um produto de software de qualidade será necessário uma boa equipe de qualidade assegurada, que não só execute checklists, mas faça inspeções em cada etapa do processo de desenvolvimento para se verificar a conformidade entre o que foi especificado e o que foi construído. Um produto de software pode ser produzido e até funcionar e mesmo assim não estar em conformidade com a especificação. Por exemplo, a especificação descreve uma arquitetura lógica de três camadas e o programador implementa em uma camada única. A especificacao descreve um determinado método de acesso e o programador implementa um método diferente, e assim vai sendo comprometida a qualidade do produto mesmo de uma empresa certificada.

E você o que pensa sobre a qualidade do produto de empresas certificadas? Dá para confiar cegamente?

Contextualização da Qualidade de Software

Para que possamos compreender como produzir software com qualidade, se faz necessário contextualizar o que é qualidade.

Desde a década de 70, quando os softwares estavam restritos aos centros de pesquisas, áreas militares e às grandes empresas, até os dias atuais em que estão cada vez mais presentes em diversas atividades da sociedade, a engenharia de software tem contribuído para estabelecer um processo de desenvolvimento consistente, racional e que produza um produto confiável e com qualidade.

A importância do software na vida das pessoas aumenta a cada dia e tanto a vida pessoal quanto a profissional podem ser melhoradas com a presença de um software de alta qualidade. A qualidade do produto de software corresponde à totalidade das características que lhe confere a capacidade de satisfazer necessidades explícitas e implícitas (NBR ISO/IEC 14598-1, p.4)

A definição do que é qualidade do produto de software envolve várias características, como funcionalidade, confiabilidade, usabilidade, manutenabilidade, portabilidade e eficiência. Esta pode ser definida como a capacidade do produto de software apresentar desempenho apropriado relativo à quantidade de recursos usados sob condições especificadas. (NBR ISO/IEC 9126-1, p.7 e 10)

Dimensões da qualidade de um sistema Web

Petrasch (1999, p1) define qualidade de um software como:

“A existência de características em um produto, as quais correspondem aos requisitos. Além disto deve-se considerar as características que não correspondem aos requisitos, as quais reduzem a qualidade do software, e também as características neutras, as quais não são relevantes para a qualidade. Está claro que não só as presenças de características são importantes, mas também as ausências de características contra produtivas.”

Segundo essa definição, a qualidade de um software é determinada diretamente pela existência de características como, por exemplo, funcionalidade e desempenho, que atendam a requisitos definidos para o sistema. Além disso, em um software de qualidade deve inexistir características que não estejam associadas aos requisitos. A definição dos requisitos de qualidade de um software muda em função do valor que cada usuário atribui a eles em função do seu tipo de uso. Assim, a definição de qualidade não é um conceito estático.

Garvin, A. (1988) destaca a importância do modelo de qualidade baseado no usuário, no qual essa característica passa a ser medida pela percepção da pessoa que o utiliza. O usuário determina se o sistema em questão atende suas diversas expectativas, dentre elas: a funcionalidade, a usabilidade e o desempenho. Assim, a qualidade de um sistema não é um atributo absoluto, ela pode variar em função das expectativas de diferentes usuários. (IEEE Standard Glossary of Software Engineering Terminology IEEE-STD-729-1983)

Offutt (2002, p.26) afirma, quanto à qualidade de sistemas Web, que:

“Desenvolvedores de sistemas Web somente obtém um retorno do seu investimento se o seu Web site satisfaz a necessidade dos seus clientes. E, diferente de muitos vendedores de software, se a nova empresa concorrente publica um site de mais alta qualidade, os clientes irão quase que imediatamente mudar os seus negócios para este novo site, uma vez que eles descubram este site. Assim ao invés de “mais cedo, porém pior”, é freqüentemente mais vantajoso, “mais tarde, e melhor”.

Nessa citação, o autor destaca a importância da qualidade no caso para sistemas Web e justifica, através da satisfação dos futuros usuários, a dimensão de tempo no ciclo de desenvolvimento: ele defende que se deve desenvolver um sistema melhor, ainda que leve um tempo maior.

Os principais requisitos de qualidade de software do ponto de vista do usuário são: a funcionalidade, a usabilidade e o desempenho, caracterizadas através do gráfico 1, que demonstra as diferentes dimensões de qualidade de um software e a importância de cada uma delas sob o ponto de vista do desenvolvedor e do usuário.(Stutzke, 2002, p. 5)

dim_qsw_thumb

Gráfico 1 – As dimensões da qualidade e sua importância

(Adaptado de Stutzke, p.1)

Segundo o gráfico 1 o a funcionalidade, a usabilidade e o desempenho são as três principais dimensões de qualidade para os usuários.Portanto o processo de desenvolvimento de um sistema deve contemplar atividades de avaliação que permitam construir um sistema que atenda a objetivos pré-estabelecidos para as dimensões de qualidade mais valorizadas pelos usuários de um determinado software.