EARLY-FIX – Parte 1: Manutenção Corretiva de Software e Predição de Defeitos

Olá pessoal! Estou retomando os posts, após um hiato devido a finalização do mestrado. Foi um processo árduo, mas de muito aprendizado, e espero compartilhar com vocês parte do conteúdo investigado e produzido.
Este é o primeiro post da série EARLY-FIX. Ao final do artigo, você também encontra um link para a dissertação e também os slides da apresentação da defesa…

Manutenção de Software

Software possui uma natureza diferente de outros produtos tecnológicos. A tendência de mercado é a substituição de produtos obsoletos pelos mais modernos. Entretanto, devido ao grande volume financeiro investido em software nas empresas, busca-se maximizar seu ciclo de vida. Neste cenário, a curto-médio prazo, corrigir, adaptar e evoluir um software existente costuma ser mais vantajoso do que iniciar um novo desenvolvimento.

Nos últimos anos, diversas metodologias e processos de desenvolvimento de software têm surgido, visando a obtenção de qualidade e produtividade em sua construção. Menos atenção, entretanto, têm recebido as atividades de desenvolvimento após a implantação (release) de um produto como correção de defeitos, inclusão de novas funcionalidades, adaptação a diferentes ambientes de execução e otimização de desempenho (Ware, 2007).

Estima-se que as atividades de manutenção de sistemas constituam mais de 50% do esforço de desenvolvimento de um software (Kemerer, 1999). Segundo (Bennett2002), a manutenção constitui entre 40% e 90% do custo total do ciclo de vida de um software como produto. Neste início do século XXI, mais de 50% dos profissionais de software destinam-se à modificar aplicações existentes, ao invés de escrever novas aplicações (Jones, 2007).

Localizar e corrigir defeitos após a implantação de um software apresenta frequentemente custos elevados em relação às fases anteriores de um projeto (Boehm, 2001). Uma maneira de se direcionar o esforço de testes e aumentar as chances de encontrar defeitos em fases iniciais de um projeto consiste na identificação da provável localização dos mesmos, permitindo-se que ações corretivas sejam tomadas (Bezerra, 2008).

Predição de Defeitos

A predição de defeitos de software representa uma área de pesquisa ativa na academia, que envolve o uso de modelos preditivos, geralmente baseados em técnicas estatísticas ou de inteligência artificial.

Grandes empresas como a Microsoft (Nagappan, 2005), a Ericcson (Tomaszewski, 2006) e a IBM (Moser, 2008) têm aplicado técnicas de predição de defeitos. Contudo, a adesão a estas técnicas tem sido menos representativa em empresas de menor porte, em parte devido aos conhecimentos especializados necessários e ao elevado esforço de investigação.

Estudos empíricos têm confirmado a hipótese de que as características técnicas do código-fonte de um software influenciam diretamente no custo, esforço e assertividade de sua manutenção (Ware, 2007), (Ahn, 2003). Desta forma, uma das abordagens adotadas para predição de defeitos vem sendo utilização de métricas de qualidade interna de software, obtidas através de análise estática de código.

A predição de defeitos baseada em métricas de produto de software pode auxiliar na análise do risco de se manter uma base de código que foi desenvolvida por outros profissionais. Empresas de outsourcing, que ofereçem serviços de Application Management, por exemplo, podem utilizar estas informações como fatores na estimativa de manutenção de sistemas desenvolvidos por outras empresas.

Entre os principais benefícios proporcionados pela predição de defeitos pode-se citar:

  • Suporte ao planejamento e execução das atividades do processo de testes, direcionando o esforço para os pontos críticos que merecem maior foco durante estas atividades;
  • Priorização de módulos mais propensos a defeitos para a realização de atividades de inspeção e refatoração;
  • Identificação de fatores que influenciam na ocorrência de defeitos; e
  • Suporte a modelos de estimativa de custos e riscos de manutenção corretiva.

Processos iterativos de desenvolvimento

Em projetos desenvolvidos com processos iterativos, como o Rational Unified Process - RUP (Kruchten, 2000), ou métodos ágeis, como o Scrum (Schwaber, 2002) e a eXtreme Programming – XP (Beck, 1999), ocorrem idealmente implantações ao final de cada iteração. Neste contexto, a manutenção de funcionalidades entregues em uma iteração ocorre frequentemente em paralelo com o desenvolvimento da iteração seguinte.

Este cenário apresenta ao menos duas dificuldades adicionais na predição de manutenção corretiva: (1) como identificar as modificações corretivas em meio a outros tipos de manutenção e novos desenvolvimentos em paralelo e (2) Como identificar a evolução dos defeitos nas classes ao longo do tempo.

EARLY-FIX: Um Framework para Predição de Manutenção Corretiva de Software utilizando Métricas de Produto

Em minha dissertação de mestrado, foi concebido e implementado um framework, denominado EARLY-FIX (Moreira, 2011), para predição de manutenção corretiva de software, utilizando métricas de produto. Este framework suporta projetos iterativos de software, inclusive de pequeno e médio porte, e também projetos open-source.

O EARLY-FIX tem como requisitos a utilização de ferramentas bastante comuns em projetos de software:

  • Sistema de Issue Tracker, onde os defeitos sejam registrados;
  • Sistema de Controle de Versão de código-fonte;
  • Algum tipo de integração entre os sistemas de Issue Tracker e de Controle de Versão, que possibilite rastrear em que classes um defeito foi detectado e corrigido; e
  • Ferramenta de análise estática, que permita a extração de métricas a partir do código-fonte ou binários de um software.

Na implementação do EARLY-FIX na dissertação, utilizaram-se técnicas estatísticas de regressão, que permitiram a utilização de medidas de qualidade interna de software para calibração de modelos (equações) dos projetos considerados. A saída destas equações foi o número esperado de defeitos para uma classe, durante um determinado período de tempo, após sua liberação em um release.

O próximo passo deste trabalho de pesquisa é a criação do projeto open-source EARLY-FIX, cuja missão consiste em tornar prática a utilização da predição de defeitos em projetos de software. Serão endereçados o suporte aos principais sistemas de Controle de Versão e de Issue Tracker,  e a implementação de técnicas de predição de predição de defeitos investigadas na academia.

Nos próximos posts da série, temas como métricas de qualidade de software orientado a objetos, técnicas de predição de defeitos, o framework EARLY-FIX e exemplos de implementação serão abordados.

Até lá!

Referências

  • AHN, Y. et al. The software maintenance project effort estimation model based on function points. Journal of Software Maintenance, New York, NY, v. 15, n. 2, p.71–85, 2003. ISSN 1040-550X.
  • BECK, K. Extreme programming explained. [S.l.]: Addison-Wesley, 1999.BENNETT, K. Software maintenance: a tutorial. Software Engineering, Dor fman and Thayer, New York: IEEE, 2002.
  • BEZERRA, M. Detecção de módulos de software propensos a falhas através de técnicas de aprendizagem de máquina. 2008. Dissertação (Mestrado em Ciência da Computação) — Universidade Federal de Pernambuco, Recife.
  • JONES, C. Geriatric issues of aging software. Dec 2007. Disponível em: <http://www.crosstalkonline.org/storage/issue-archives/2007/200712/200712-Jones.pdf>. Acesso em: 01 dez. 2011.
  • KEMERER, C. F.; SLAUGHTER, S. An empirical approach to studying software evolution. IEEE Trans. Softw. Eng., Piscataway, NJ, v. 25, n. 4, p. 493–509, 1999. ISSN 0098-5589.
  • KRUCHTEN, P. Rational unified process: an introduction. [S.l]: Addison-Wesley-Longman, 2000.
  • MOREIRA, G. S. P. EARLY-FIX: Um Framework para Predição de Manutenção Corretiva de Software utilizando Métricas de Produto. 2011. Dissertação (Mestrado em Ciência da Computação) — Instituto Tecnológico de Aeronáutica (ITA), São José dos Campos, SP.
  • MOSER, R.; PEDRYCZ, W.; SUCCI, G. A comparative analysis of the efficiency of change metrics and static code attributes for defect prediction. In: INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING, 30., 2008, Leipzig. Proceedings… New York: ICSE, 2008.
  • NAGAPPAN, N.; BALL, T.; ZELLER, A. Mining metrics to predict component failures. In: INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING, 28., 2005, Shanghai. Proceedings… New York: [s.n.], 2006.
  • SCHWABER, K.; BEEDLE, M. Agile software development with scrum. [S.l.]: Prentice-Hall, 2002.
  • TOMASZEWSKI, P.; GRAHN, H.; LUNDBERG, L. A method for an accurate early prediction of faults in modified classes. In: INTERNATIONAL CONFERENCE ON SOFTWARE MAINTENANCE, 22., 2006, Philadelphia. Proceedings… [S.l.]: ICSM 2006.
  • WARE, M. P.; WILKIE, F. G.; SHAPCOTT, M. The application of product measures indirecting software maintenance activity. J. Softw. Maint. Evol., New York, v. 19, n. 2, p.133–154, 2007. ISSN 1532-060X
Publicado em Análise Estática de Código, Engenharia de Software, Manutenção de Software, Métricas de Software, Predição de Defeitos, Qualidade de Software | Com a tag , , , , , , | Deixe um comentário

Agile Vale 2011

Demorou mas saiu o post sobre a Agile Vale 2011! Esta edição ocorreu de 19 a 20 de agosto nas instalações do Instituto Tecnológico de Aeronáutica – ITA, que mais uma vez apoiou a realização este evento sem fins lucrativos. Veja vídeo institucional.

Neste ano tivemos um período maior para organização, que se intensificou nos 3 últimos meses. O evento está crescendo, e tivemos diversas sugestões implementadas este ano, como o aumento para dois dias de evento e a criação da trilha Comunidade, onde rolaram Dojos, Workshops e Open Spaces, além da nova identidade visual do evento. Ficou bacana né!

Abrimos as inscrições 2 meses antes do evento e chegamos mais de 900 inscritos! A maior parte dos 600 participantes que compareceram vieram do Vale do Paraíba e de São Paulo, mas tivemos pessoas de Curitiba, Porto Alegue, Cuiabá, Rio de Janeiro, Cascavel …!

Tivemos este ano 29 palestrantes nas trilhas Técnica e Gestão, com renomados agilistas nacionais. Ocorreram também os Workshops “Análise de Negócio Ágil” com @mauriciomatsuda e @mhaddad e “Lean Lego Game” com Neil Craven (@neilp123) da ThoughtWorks.

Juan Bernabó falou sobre a nova tendência de empreendedorismo: Lean Startups . Eduardo Guerra apresentou a importância e técnicas de refatorações de testes . Samuel Crescêncio fez um keynote que levou muitos à reflexão, com o tema “Pressão sem Opressão”. Alexandre Magno discutiu sobre o Scrum sob a perspectiva da Mudança Organizacional  e Fábio Akita construiu um momento nostalgia sobre suas experiências no desenvolvimento de software.

Eu e o Roberto Pepato fizemos uma nova versão da palestra “Continuous Inspection (veja vídeo): Uma abordagem efetiva para melhoria contínua da qualidade de software”. Alisson Vale falou brilhantemente sobre Lean, Kanban e Agilidade e Rafael Martins, da Yahoo, falou sobre otimização de testes de colaboração e contratos.

Nos dois dias de evento, tivemos duas mesas redondas no estilo Fishbowl onde sempre havia uma cadeira vazia para quem desejasse participar (vídeo do 1 dia). No 2 dia, tivemos também depoimentos de Profs. do ITA e da USP a transformação que o movimento ágil está causando na academia e indústria de software.

Agradeçemos a todos os organizadores, patrocinadores palestrantes e voluntários que fizeram este evento possível. Ver a comunidade do Vale do Paraíba se envolvendo neste ambiente de aprendizagem é muito gratificante.
Vem aí Agile Vale 2012! Se você tiver interesse em apoiar o evento como voluntário ou patrocinador, entre em contato conosco!

Publicado em Agile, Congressos, Engenharia de Software | Com a tag , | Deixe um comentário

SAAS – Software As A Sandwich

Software as a Sandwich

Na noite de ontem fiquei surpreso em como um processo de trabalho pode ser tão ineficiente. Entrei em uma hipermercado pertencente a uma grande rede, apenas para comprar um sanduíche na lanchonete. Havia três pessoas na fila aguardando o preparo do lanche por uma atendente, com cara de desesperada.

Após ficar 5 min aguardando, fui informado pela atendente que a fila iniciava do outro lado, mas que primeiro tinha que pagar pelo lanche nos caixas comuns do supermercado. Não havia nenhuma indicação visual de que devia seguir estes procedimentos. Anteriormente havia um caixa dedicado na lanchonete, que provavelmente foi cortado devido ao grande movimento no hipermercado.

Pois bem, segui então para as filas comuns do supermercado, com carrinhos repletos de compras, e tive de aguardar mais de 10 minutos para conseguir pagar pelo lanche. Ao ser atendido pelo caixa, ele sacou uma lista em que eu precisava escolher o sabor do sanduíche, e se necessário ele até listava os ingredientes (enquanto imaginava como ficaria meu sanduíche), sendo que todos eram o mesmo preço. Apesar de ser vegetariano, precisei escolher uma das opções com frango, apenas para “registrar no sistema”.

Retornei para a fila do preparo do lanche e finalmente, depois de 20 min, fui atendido… certo? Bom, não exatamente, a baguete havia acabado! Hum, isto não dever um problema dentro de um hipermercado, a não ser pelo fato de a atendente, que estava preparando o lanche, ter de tirar as luvas e adentrar no supermercado para pegar mais baguetes na padaria! Ai sim fomos surpreendidos novamente! Cerca de 10 min. depois, ela retorna com 7 baguetes, dizendo que foi tudo que encontrou.
OBS: Partindo do princípio que já havia 5 pessoas aguardando na fila, tudo indica que o sistema entraria em colapso em alguns minutos, com pessoas comprando sanduíches no caixa e não havendo baguetes para preparar.

Mas isto não me interessa, certo? Depois de mais de 30 min. em pé em filas, estava com meu delicioso sanduíche em mãos! …. Hum, me sentei para lanchar e fiquei pensando o quanto um processo ineficiente gera insatisfação de todos os envolvidos. Conversei com a atendente sobre a opinião dela em relação à forma de trabalho, e ela se mostrou bem chateada com esta situação. Mas disse uma frase, sem ironia e até com certa inocência, que me fez pensar: “Eles estão lá dentro pensando nisso e devem saber o que é melhor”. Então perguntei: “Como assim? Você está representando a empresa perante o cliente e executando o processo que foi estabelecido. O “pessoal lá de dentro” não vêm conversar com você de vez em quando, para saber como está funcionando?”…. “Não”, respondeu ela, com cara de decepção.

Bastava 10 minutos observando o dia-a-dia daquela pobre atendente, e seria possível observar o caos proporcionado por um processo ruim e por uma profissional com opinião ignorada.
Deixei alguns comentários sobre esta situação na caixa de sugestões do hipermercado, como deixar o caixa mais próximo à lanchonete como preferencial para compras de lanches e utilizar uma patinadora para verificar a cada 30 min se há necessidade de reposição de estoque na lanchonete. Mas será que é necessário alguém externo para apontar a ineficiência e as melhorias de um processo? Só estava na posição em que todos nós deveríamos nos colocar em nossas atividades profissionais. A posição do cliente.

Mas o que tudo isto tem a ver com software?
Nosso mundo de desenvolvimento possui os mesmos elementos daquela lanchonete: processo, produto e pessoas. Será que nosso processo é eficiente, eliminando desperdícios e satisfazendo as pessoas envolvidas? Será que há muitos gargalos, tempos de espera ou atividades sem próposito, que não agregam valor e só geram insatisfação. Será que todos os envolvidos estão sendo envolvidos ou participando ativamente da melhoria deste processo?

A filosofia Lean e técnicas como Kanban e Value Stream Mapping auxiliam na percepção da ineficiência dos processos, utilizando a visibilidade. Mas se todos os envolvidos não puderem analisar e opinar sobre o que estão vendo, perde-se a valiosíssima opinião e criatividade de pessoas, como aquela atendente, cujo feedback poderia alterar a imagem de um hipermercado tão grande perante os clientes, aumentando a eficiência, satisfação e lucros de toda a organização.

Portanto, não desperdisse oportunidades de compreender e melhorar o seu processo de software. Mas esteja certo de que o principal pilar e vetor de nossa atividade, são as pessoas.

Um alegre preparo de sanduíches para todos nós… e para nossos clientes!

Publicado em Engenharia de Software, Kanban, Lean, Processos de Software | Com a tag , , , | Deixe um comentário

AgileBrazil 2011 – 3° Dia

Último dia de evento e já tenho a sensação de saudades, passou muito rápido. Vinícius Teles abriu o dia com o keynote “2012: o ano em que a Terra acabou, porque o software travou”, mostrando como o planeta irá acabar com uma “tela azul”. Brincadeiras a parte, Teles apresentou vários vídeos de experiências frustradas (e engraçadas) de usuários com soluções de software em bancos e operadoras telefônicas. E falou sobre como devemos “tomar vergonha na cara” e trabalharmos de forma mais profissional.

Ele relembrou “There is no silver bullet”, artigo de duas décadas de Fred Brooks, e como trabalhamos apenas nas complexidades acidentais de se desenvolver software. Soltou uma frase polêmica que virou mantra no evento “Falar é fácil, show me the code”. Em diversas palestras que seguiram, como as do @manoelp e @lucabastos, tocaram neste ponto e lembraram que apesar de working software ser o output mais importante de nosso trabalho, outros aspectos também são essentiais para que isto seja possível, como estratégia, análise de negócio, vendas e coaching.

Após o almoço, André Nascimento apresentou “Porque é difícil trabalhar com os valores ágeis em projetos de escopo fechado” e de suas experiências na aplicação de agilidade em projetos de consultoria e fábrica. Alguma semelhança com o teu projeto?! Em resumo, você precisará abrir mão de muitas coisas, e a agilidade ficará tão descaracterizada que sobrará integra apenas o termo, no contrato de venda!

 Em seguida, @lucabastos, um jovem programador de 66 anos e figurinha carimbada em eventos da comunidade, fez uma palestra brilhante e divertida sobre ”Como formar um programador 10x”. Iniciou falando de pesquisas que reportam que a diferença entre um programador excelente e péssimo pode ser de 28x (Tom de Marco), ou de 10x (Steve McConnell). Ele relembra que não é possível medir produtividade no desenvolvimento de software, e que tentativas de fazer isto baseado em linhas de código, pontos de função, story points são falácias, conforme Martin Fowler argumenta.
Deixando de lado as comparações, já que no mundo real não conseguimos contratar um time de programadores gênios, porque são caros e muitas vezes intratáveis, como podemos desenvolver bons programadores em nossas organizações? Ele apresenta as práticas como Dojos, TDD e Pair Programming como bastante efetivas para este objetivo. E finaliza falando um pouco de sua carreira de mais de 40 anos onde foi programador, gerente, empresário e programador, nesta ordem.

 Fechei minha participação assistindo “Testes em Ambientes Ágeis”, com @josepapo. Ele apresentou o quadrante de testes ágeis e o conceito de Specification by Examples, uma forma de especificação mais próxima do cliente e mais compreensível pelo time. Apresentou exemplos de BDD com SpecFlow e de testes funcionais automatizados.

 A AgileBrazil 2011 foi um evento excelente, e proporciou conhecimento, novos insights e bate-papos muito valiosos! E já foi anunciado, a edição de 2012 será em Sampa, com promessa de ser o maior evento de agilidade do hemisfério sul!

Se você não pôde participar da AgileBrazil 2011, prepare-se para AgileVale 2011, um evento de agilidade no Vale do Paraíba, a 100 Km de São Paulo. A primeira edição que organizamos, em Nov. de 2010, foi um tremendo sucesso e teve cerca de 500 participantes. A segunda edição, será realizada no ITA de 19 a 20 de agosto, e terá novamente entrada franca. A grade de palestrantes já está praticamente fechada, tendo a maioria deles participado da AgileBrazil 2011. Inscrições abertas!

Equipe Organizadora da AgileVale representada na AgileBrazilNos vemos lá!

Publicado em Agile, Congressos, Engenharia de Software | Com a tag , , | Deixe um comentário

AgileBrazil 2011 – 2° Dia

Na quinta-feira (30/06), Joshua Kerievsky abriu o dia com o keynote “Construíndo a Felicidade”, um tema que me pareceu de início filosófico, e até utópico, dentro de nossa ocupação. Mas Joshua abordou de forma brilhante como focar desenvolver a felicidade de todo o ecossistema do cliente, que envolve usuários, avaliadores, compradores, gerentes, distribuidores e coaches.

Falou bastante sobre Lean Startups e como desenvolver o produto certo. Mostrou diversos exemplos de como estruturar o software para coletar feedback do usuário, envolvendo estatísticas de usabilidade, funcionalidades utilizadas e produtos adquiridos. Apresentou o interessante conceito de fake features, que basicamente consiste em apresentar ao usuário botões ou links para funcionalidades ainda não disponíveis, de forma para avaliar seu potencial uso, antes de efetivamente implementá-las (abordagem muito lean por sinal!).

Demonstrou ainda como o uso de elaboração de hipóteses e experimentação é essencial para a melhoria do produto e, finalmente, apresentou as “Love Metrics”, com foco na satisfação do usuário:

  • Benefits delivered to cliente
  • Clients using activelly
  • Clients commenting with others

Uma apresentação muito “romântica”, mas que nos lembra que o foco final da agilidade, muito além de práticas, processos e técnicas, é a felicidade de nossos usuários.

 E soltou uma previsão bombástica: “Lean Startups will dominate the next tem years as agile did”! Aliás, este foi o tema mais badalado do evento. O agile veio para mostrar como fazer software da forma correta, e o conceito de Lean nos ajuda a entender como construir o produto certo.

Juan Bernabó encabeçou um Open Space em paralelo com palestras, e quase 100 pessoas se reuniram num papo aberto para discutir sobre Lean Startups. Falou-se até na montagem de um evento paralelo. De fato, já atingimos muita produtividade em análise e desenvolvimento, está na hora de sermos mais eficazes na construção apenas de software que resolva problema de alguém, e que o mercado deseje absorver.

 O dia seguiu agitado, com palestras de alto nível. @rugolini, da IBM, apresentou como um pouco de “design up-front” pode ser benéfico a um projeto ágil. Lembrou que software é a materialização do negócio, é conhecimento engarrafado. Estimou que haverá cada vez menos desenvolvimento novo e cada vez mais integrações entre sistemas, tendo em vista o  investimento já realizado pelas empresas na construção de seus produtos.

 Participei então de uma sequência de lightning talks de 8 min cada. Simplesmente não consegui levantar, pois foram apresentações bem objetivas, conduzidas por @dtsato, @giovannibassi, @felipero e @manoelp. Em paralelo a @cecifernandes e o @guilhermecaelum estavam fazendo a polêmica apresentação “O Grandiosismo dos Loucos”, onde falam sobre o exagero, julgamento indevido e previsões prepotentes em posts de caras renomados como Martin Fowler, Ken Shwaber, Bob Martin e Michael Feathers.

 Ao final do dia assisti a palestra “Agile Transitions – Culture of Change or Change of Culture”, que envolveu uma dinâmica apresentando coaching como ferramenta para auxiliar na transformação das empresas e indivíduos para a situação desejada. Fechamos o dia com “Ágil como Bruce Lee”, e como suas frases vão de encontro ao manifesto ágil e “Prepare a Sandwich like an Agile Business Analyst”, com direito a sanduíches no final da palestra by Thoughworks.

Publicado em Agile, Congressos, Engenharia de Software | Com a tag , , | Deixe um comentário

Agile Brazil 2011 – 1° Dia

Esta foi nossa segunda participação na AgileBrazil – Conferência Brasileira de Métodos Ágeis para Desenvolvimento de Software. Desta vez voei para Fortaleza, onde passei momentos muito gostosos antes do evento junto à beleza cênica do Ceará, e especialmente de Jericoacoara.

O evento este ano ocorreu de 29/06 – 01/07. Foram 5 trilhas paralelas, o que tornou difícil escolher assistir à uma palestra sem querer estar também em pelo menos outras duas. Praticamente todos os principais nomes da agilidade brasileira estavam no evento palestrando, mas senti falta de alguns caras como Klaus, Fabiano Milani e Akita.

Segundo as estatísticas do evento, este ano participaram mais de 700 pessoas, com destaque para a comunidade do Ceará, com 50% dos participantes, São Paulo (20%), Rio de Janeiro (5%) e Minas (2%).

Na quarta-feira (29/06), o evento foi aberto pelo keynote Jim Highsmith, que foi um dos que assinaram o manifesto ágil há 10 anos atrás, e hoje trabalha na ThoughWorks. O tema foi Adaptative Leadership, onde foi apresentado o que um líder ou executivo ágil deve “fazer” e “ser” para favorecer o crescimento sustentável da agilidade estratégica de uma empresa.

Algumas frases marcantes de Highsmith foram:

  • “A tradicional manager focuses on following the plan with minimum changes, whereas na agile leader focuses on adapting successfully to inevitable changes”, citando Eric Olden
  • “With technical debt, there is no agility, because of cost of change”
  • “Command-and-control has evolved to adaptative leadership”Constraints de Projetos de Software, segundo Jim Highsmith
  • “Agile is about Envision and Explore”
  • “Auto-organized teams need an adaptative leader, to connect and clarify”
  • “The main difficult in agile adoption is the Riding Paradox – to be Predictable and Adaptable, at the same time”
  • “Don’t go to prescriptive agility”

A quarta foi um dia bem corrido para nós, pois apresentamos uma palestra no evento principal da AgileBrazil (indústria) e um artigo no WBMA – Workshop Brasileiro de Métodos Ágeis (academia). Foram nossas primeiras apresentações no evento, e é claro que rola um friozinho na barriga por estarmos em uma grade repleta de feras.

A palestra da indústria, que apresentei com Roberto Pepato, teve o tema “Continuous Inspection – Uma abordagem efetiva para melhoria contínua da qualidade de software”. Ver mais de 120 pessoas na sala na hora do almoço (12-13h), com gente sentada no chão, fez tudo valer a pena!

Palestra Continuous Inspection na AgileBrazil 2011
Palestra Continuous Inspection na AgileBrazil 2011

Falamos sobre a Broken-Windows theory, impacto da manutenibilidade do código na manutenção do software, da importância de monitorar a qualidade do produto para minimizar a entropia e sobre como utilizar métricas de software otimizar a inspeção, detectar bad-smells e refatorar. Falamos também sobre técnicas e ferramentas de Análise Estática de Código, e como integrá-las ao processo de integração contínua. Finalmente, demonstramos como as métricas podem ser analisadas através de dashboards, análise temporal, control-charts e OLAP.

Depois do almoço, eu o Pepato e o Robson Monteiro apresentamos o artigo “An Empirical Analysis of eXtreme Programming Practices and its Impact on Software Quality Metrics” no WBMA. Neste trabalho, investigamos três projetos de software desenvolvidos em uma mesma empresa nos anos de 2008, 2009, 2010. Analisamos a utilização das práticas do XP nestes projetos individualmente e comparamos com a análise da evolução das métricas de tamanho, complexidade e acoplamento dos produtos de software desenvolvidos por estes projetos. Apesar de outras influências de projeto que podem ter afetado os resultados, os projetos que utilizaram mais práticas do XP apresentaram menor complexidade e acoplamento no software, o que vai ao encontro com a percepção geral dos participantes dos três projetos.

Infelizmente, a participação no WBMA foi bastante tímida em relação a qualquer palestra AgileBrazil, mesmo estando os eventos separados por apenas um andar. Apesar da excelente estratégia de manter os dois eventos no mesmo local e data, isto mostra como as comunidades da indústria e da academia ainda estão distantes uma da outra. Atualmente o WBMA é o fórum acadêmico mais representativo em agilidade no Brasil, tendo sido submetidos 28 artigos, e selecionados apenas 8.

No final do WBMA, foi realizada uma mesa redonda com Rafael Prikladnicki, Teresa Maciel e Rodrigo de Toledo em conjunto com os participantes, onde desenvolveram-se discussões muito relevantes a respeito do futuro do WBMA, do ensino de agilidade nas universidades, do preconceito entre indústria e academia na área de engenharia de software, da natureza subjetiva do software e, consequentemente, das pesquisas neste campo.

(continua no post do 2° dia…)

Publicado em Agile, Congressos, Engenharia de Software | Com a tag , , , | Deixe um comentário

SBQS 2011

Esta foi a nossa primeira participação no Simpósio Brasileiro de Qualidade de Software – SBQS, da Sociedade Brasileira de Computação. Este, que é o principal congresso acadêmico no Brasil na área de qualidade de software, teve sua 10ª edição em Curitiba.

Este ano foram submetidos ao SBQS 73 artigos técnicos. Destes, 21 artigos foram aceitos para apresentação e publicação nos anais. Um dos artigos selecionados foi elaborado por mim em conjunto com Roberto Pepato e com os Profs. do ITA Adilson Cunha e Vieira Dias, com o título “METACOM – Uma análise de correlação entre métricas de produto e propensão à manutenção”.

Voamos no dia 06/06 de São José dos Campos – SP a Curitiba, cidade do evento, onde passamos um frio digno de inverno, aprox. 8 graus. Na manhã seguinte, chegando ao credenciamento, recebemos um kit de primeira qualidade com uma bolsa, o material do evento e crachá de identificação.

O evento foi muito bem organizado. A apresentação de nosso paper foi iniciada pontualmente às 11h20. A sala tinha aproximadamente 70 pessoas. A apresentação fluiu bem, e conseguimos encerrar pontualmente. Seguiram-se então diversas perguntas a respeito do método de extração das métricas, da técnica de correlação utilizada, do tipo de manutenção endereçada, entre outros. Tivemos a sorte de apresentarmos logo antes do almoço, então logo após pudemos receber o feedback e conversar com vários pesquisadores que assistiram à palestra. A troca de experiências proporcionada por um evento deste nível é muito enriquecedora.

Participamos na terça-feira de um mini-curso de Engenharia de Software Empírica, com o maior especialista do Brasil no assunto, o Prof. Guilheme Horta Travassos, da UFRJ. Com certeza, só este curso já valeu a vinda ao congresso. O conteúdo sobre experimentação em software e estatística era exatamente o que precisava nesta etapa de finalização de minha pesquisa de mestrado.

A maioria das palestras do evento foi voltada para qualidade de processo. Mais uma vez, processos de capacidade e maturidade dominaram, como CMMI e principalmente o modelo tupiniquim MPS.BR. Entretanto, perguntas mencionando técnicas e métodos ágeis foram feitas durante várias palestras. Segue um breve resumo dos artigos que mais despertaram meu interesse, por relacionarem-se com qualidade de produto e manutenibilidade:

  • A Case Study on Improving Maintainability and Evolvability using Architectural Constraints Leonardo Humberto Guimaraes Silva, Ricardo Terra, Marco Túlio Valente
    Utilização da linguagem de domínio DCL (Dependency Constraint Language) para monitorar se design patterns e as melhores práticas definidas no início do projeto estão sendo seguida. Com DCL, pode-se especificar que uma classe ou interface pode, não pode ou deve acessar, extender, criar, implementar (entre outros) outro módulo, evitando a deterioração da arquitetura.
  • Avaliação de Causalidade entre Métricas de Qualidade Interna e Defeitos César Couto, Marco Túlio Valente, Roberto da Silva Bigonha
    Neste estudo, tenta-se encontrar uma relação de causalidade entre métricas de qualidade interna (extraídas utilizando Análise Estática do Código) de uma classe e a quantidade de defeitos posteriormente identificados na mesma. Para tal, utiliza-se uma técnica de teste de causalidade, proposta por Granger. Esta técnica considera séries temporais, e é capaz de avaliar o efeito de um evento que ocorre um tempo após a causa. Encontrou-se relação de causalidade com defeitos acima de 30% para as seguintes métricas da suíte de métricas OO CK: WMC (complexidade), RFC (responsabilidade), LOC (tamanho) e CBO (acoplamento). Desta forma, o uso destas métricas, de simples coleta usando ferramentas de AEC, pode ajudar a detectar classes com maior propensão a defeitos futuros.
  • Métrica de Coesão de Responsabilidade – A Utilidade de Métrica de Coesão na Identificação de Classes com Problemas Estruturais Kecia A. M. Ferreira1, Mariza A. S. Bigonha, Roberto S. Bigonha, Heitor C. Almeida, Roberta Coeli das Neves
    Análise de como métricas de coesão podem auxiliar na detecção automática de problemas estruturais. São avaliadas métricas tradicionais como LCOM, LCOM4, TCC e é definida uma nova métrica: Coesão de Responsabilidade – COR.

Creio que a carência de pesquisa em qualidade de produto de software e em processos empíricos, em parte, ocorre pela falta da participação da comunidade ágil do Brasil em eventos acadêmicos. Têm-se publicado muito pouco os resultados obtidos na indústria, e quando se elaboram artigos deste nível, são enviados em sua maioria para eventos no exterior.

Na sexta, ocorreu em paralelo o Workshop de Manutenção de Software Moderna (WMSWM). Foi uma trilha dedicada para artigos relacionados ao processo e a ferramentas de suporte à manutenção de software. O conteúdo incluiu tópicos como visualização de software, testes automatizados, detecção de padrões de vocabulário de software e identificação automática de interesses (aspectos) em sistemas OO.

O evento proporcionou também momentos culturais aos participantes, com apresentações de orquestra, coral de ópera e música instrumental ao vivo nos coffee-breaks.

O SBQS abre também espaço para a indústria através dos painéis de Relatos de Experiência, onde são apresentados cases de empresas relacionados à qualidade de software.
Sem dúvida, recomendo a todos os profissionais de software, principalmente da indústria, a participarem do SBQS, um fórum único no Brasil para se discutir qualidade de software, sob o prisma do método científico.

Aguardem, em breve, o post de nossa participação na Agile Brazil 2011.

Publicado em Congressos, Qualidade de Software | Deixe um comentário