Gerência da Evolução Contínua: Dívida Técnica

Abstract

A necessidade de gerar produtos e soluções de software de forma adequada à expectativa do cliente resultou na adaptação dos formatos de entrega de software, para que esse possa ser feito de forma contínua, sem que haja dependências relacionadas a outras possíveis entregas que poderiam atrasar o que é de fato prioritário. Ferramentas que apoiam o desenvolvimento de software foram adequadas ou desenvolvidas para suportar esse fim, assim como o processo do desenvolvimento também teve de ser adaptado. Com isso, decisões devem ser tomadas nas mais diversas atividades do processo de desenvolvimento e podem gerar dívidas futuras, pois o escopo completo é desconhecido. Esse trabalho busca descobrir as influências da Engenharia de Software Contínua [ESC] na geração e percepção dos variados tipos de dívida técnica [DT] presentes na literatura, levantando hipóteses e indícios sobre essa relação. Serão propostos experimentos e outros estudos que possam validar as hipóteses feitas, ou para que os possíveis erros decorrentes da atribuição dessas hipóteses sejam identificados.

Introdução

Os projetos de desenvolvimento de software, assim como os projetos de outras áreas de conhecimento, são na maioria das vezes realizados considerando-se valores finitos de tempo e recursos, sejam eles dinheiro, pessoas, equipamentos ou outros. Desse modo, um mau gerenciamento do tempo e dos recursos gera como consequência produtos de má qualidade, com menos possibilidades de manutenção e evolução, quando comparados com produtos de alta qualidade (Lehman 1985).

A metáfora de dívida técnica foi criada como forma de melhor entender e administrar as decisões que impactem de alguma forma a manutenibilidade do software. Adotar tal metáfora no fluxo de desenvolvimento do software ajuda os profissionais da área a melhor compreender e investigar problemas decorrentes dessas decisões.

Dentro do contexto das metodologias ágeis, a dívida técnica tende a ser superior quando comparada com a de metodologias de desenvolvimento mais convencionais, uma vez que é característico entre as práticas a indefinição do escopo e das prioridades futuras do projeto a cada entrega incremental (Holvitie 2014). Por outro lado, nas práticas mais convencionais de desenvolvimento tanto o escopo quanto as prioridades do projeto já são definidas com uma antecedência maior, portanto há menos inclusão de requisitos desconhecidos, auxiliando na tomada de decisões antecipadas, tendendo a reduzir a dívida técnica.

A união das metodologias ágeis com o conceito do lean development criou uma nova tendência na indústria, conhecida como engenharia de software contínua, conjunto de práticas nas quais as iterações com duração fixa e pré-definida previstas nas metodologias ágeis mudam para atividades com menor duração possível (e variável), ou seja, o projeto de software sofre evoluções constantes. Cada desenvolvedor não fica mais preso ao ciclo da iteração, podendo incorporar o seu trabalho ao projeto sempre que necessário, possibilitando um menor time-to-market.

De posse dos diferentes tipos de dívida técnica presentes na literatura para ambientes ágeis ou mais tradicionais de desenvolvimento, este trabalho busca analisar de que forma cada tipo de dívida técnica se relaciona com as diferentes práticas da engenharia de software contínua, buscando indícios sobre cada um dos relacionamentos.

O presente estudo está dividido em quatro itens, além desta introdução: o item 2 apresenta uma fundamentação teórica sobre as definições de dívida técnica e da engenharia de software contínuo; o item 3 apresenta as diferentes formas de classificação de dívida técnica com base nos estudos pesquisados; o item 4 apresenta a classificação das atividades da engenharia de software contínua; o item 5 apresenta o relacionamento entre os dois conceitos; o item 6 detalha as pesquisas realizadas em busca de indícios na literatura; e o item 7 trata das considerações finais sobre o trabalho e indica possíveis estudos futuros.