Artesanato de Software

O Manifesto for Software Craftsmanship não é tão popular hoje em dia quanto o Agile Manifesto. Entretanto, acredito que os princípios defendidos pelo Craftsmanship são tão importantes quanto os do Agile. Visando apresentar o Artesanato de Software, bem como alguns outros princípios para os graduandos em Análise e Desenvolvimento de Sistemas da FATEC De Sorocaba, no dia 08/10/2014 apresentei, com o apoio da Tegra, a palestra Artesanato de Software que compartilho aqui agora:

 

Obrigado!

Leia Mais

Componentização, reutilização e Agilidade: Tegra Iglu

IgluAqui na Tegra nosso time de desenvolvimento e arquitetura de soluções é apaixonado por construir software. Mais do que simplesmente produção de soluções, todos na Tegra estão engajados para a construção das melhores soluções. Entretanto essas não são qualidades subjetivas e definidas exclusivamente por nossas equipes. A excelência de uma solução é baseada primordialmente pelas necessidades e objetivos de nossos clientes. Para que nossa equipe de negócios tenha condições de, junto aos clientes, propor as melhores soluções e se adaptar às singularidades de cada negócio, a equipe de desenvolvimento e arquitetura trabalha incansavelmente na construção de softwares que sejam flexíveis o suficiente para responder às necessidades desse negócio em um menor tempo possível, com o menor esforço possível o que resulta no melhor investimento possível aos nossos clientes.

Com essa mentalidade, com o aumento de complexidade das nossas soluções e com a alta demanda de nossos clientes foi que surgiu a necessidade de utilizarmos componentes de software reutilizáveis que proporcionassem a agilidade necessária para mudanças e customizações sem que fosse prejudicada a qualidade dos produtos finais, fator de extrema importância para nós.

Um componente de software pode ser compreendido como um elemento organizacional e estrutural de software que possua comportamento, responsabilidades e interfaces de comunição muito bem definidas. Um componente de software, como todo software, precisa ser testável, gerenciável e desenvolvido segundo as melhores práticas da Orientação a Objetos e padrões de projeto para que seja possível manter sua manutenibilidade e reutilização. Geralmente, mas não exclusivamente, um componente de software oferece funcionalidades não diretamente aos usuários da solução, mas para outros elementos de software que terão essa e outras responsabilidades. O conjunto de vários componentes é que forma a solução final.

A produção das soluções da Tegra, como dito anteriormente, são pautados diretamente pelas necessidades de nossos clientes e de seus negócios. Essa é uma preocupação de todas as equipes na Tegra e não seria diferente com nossos desenvolvedores e arquitetos. Assim sendo, todos os nossos componentes internos são produzidos e incrementados segundo as necessidades e demandas de projetos reais. Não desperdiçamos recursos para abstrair algo que não mostrou-se realmente necessário. De forma prática, para que determinada funcionalidade seja abstraída para nossos componentes ela deve ser observada e requerida em mais de um projeto. A partir do momento que uma função é requisitada por vários projetos entendemos que então ela está em condições de ser abstraída para nossos componentes reutilizáveis. Essas pré condições para componentização de software genérico é fundamental para que possamos direcionar nossos esforços para o que realmente possui valor ao negócio de nossos clientes.

O conjunto dos projetos de componentes internos da Tegra formam o Iglu. Um Iglu é uma construção de neve, construída por blocos rígidos de gelo formados pela neve soprada pelo vento. Esses blocos são dispostos de forma a depender um do outro para que todos se mantenham em formação. A forma arredondada dos iglus é importante pois a neve que cair sobre ele escorregará para os lados, impedindo a sobrecarga de peso e evitando o desabamento. A resistência de um iglu aumenta com o tempo. As tempestades e geadas colaboram para que os blocos de neve fiquem cada vez mais resistentes e grossos.

As características de um Iglu são semelhantes ao conjunto dos componentes genéricos e reutilizáveis que construímos a cada dia. Os nossos componentes são como os blocos de neve, que apesar de existirem singularmente, juntos formam um produto, uma solução muito bem estabelecida. Os nossos componentes são construídos de forma que possam ser incrementados facilmente sem interferir drasticamente nos produtos já construídos e a cada interação em que os componentes são incrementados eles se tornam mais coesos, mais testados e com funcionalidades requisitadas por mais projetos. Assim sendo, a cada novo ciclo de desenvolvimento nossos componentes ficam ainda melhores!

Uma das vantagens em se componentizar soluções em estruturas de softwares reutilizáveis é o de se manter o produto exclusivo de um negócio com código que expresse principalmente as regras daquele negócio. Mantemos uma camada de negócios em nossos projetos com o peso e tamanho respectivos ao negócio de forma que se o negócio apresenta muitas regras complexas, a camada do projeto poderá ficar maior. Mas se um projeto possui poucas regras, o projeto tende a manter-se mais simples e menor. Isso é possível pois hoje a maior parte de código referente à infraestrutura dos projetos já está abstraído no Tegra Iglu. Se considerarmos o Desenvolvimento Orientado ao Domínio (muito utilizado por nós), dizemos que nos projetos da Tegra, novos e já em andamento, conseguimos ter um enfoque maior na camada de Domínio da solução, pois nossas camadas de User Interface, Infraestrutura e de Aplicação já estão muito bem desenvolvidas.

Ao iniciar um projeto de componentização, em um primeiro momento pode se ter a noção de que está se envolvendo mais recursos do que o necessário ao projeto. Porém, com o desenvolvimento de forma incremental e consciente, como preconizamos na Tegra, sem perder o foco no que possui valor para o produto do cliente, estamos constatando na prática que os recursos estão sendo muito bem utilizados, muitas vezes até havendo economia pró ativa. Quando corrigimos um bug encontrado em algum componente, automaticamente esse bug é corrigido em diversos projetos. Ao mantermos as funcionalidades de um componente muito bem definida e testarmos essas funcionalidades unitariamente, conseguimos diminuir o trabalho com testes unitários em diversos projetos mantendo-os íntegros e com qualidade. O nosso maior esforço diariamente vem se tornando exclusivamente desenvolver, testar, integrar e entregar camadas de domínio, pois as demais camadas são providas pelo Tegra Iglu.

O Tegra Iglu é um projeto recente que vem sendo desenvolvido incrementalmente a cada interação da equipe de desenvolvimento e arquitetura da Tegra. Estamos constatando que os diversos componentes do Iglu cada vez se tornam mais maduros e coesos, bem como a criação de novas soluções se tornam mais simples e menos dispendiosas. Os projetos que já estão em produção têm se tornado mais simples de manutenir e consequentemente mais ágil de alterá-los caso um cliente solicite.

Estamos comprovando que é possível manter as melhores práticas de desenvolvimento, código e produtos de qualidade e inovação constante mesmo estando totalmente voltados para entregar valor aos nossos clientes ao final de cada iteração.

Abraço!

Leia Mais