O que é uma fábrica de software?

Uma fábrica executa processos para a construção de um produto. Quanto maior o volume de produção menor é o custo do produto. Henry Ford que desenvolveu o processo de produção em massa demonstrou a eficiência da especialização de funções e o uso de processos padronizados. Uma fábrica de software utiliza os mesmos conceitos de uma fábrica modelo. A função de uma fábrica de software é maximizar a produção de software. A programação orientada a objetos e por componentes permite criar objetos reutilizáveis que podem ser usados em diferentes programas, reduzindo os custos de programação. Quanto maior o número de objetos disponíveis, menor será o tempo e o custo do desenvolvimento de sistemas. A fábrica de software deve ter uma estrutura com: atendimento à clientes; planejamento e controle de produção; produção; garantia e qualidade.

Os sistemas de aplicação devem atender as necessidades de negócios das empresas que são diferentes uma das outras devido a práticas e ramo de atuação. Porém a construção de produtos singular possui custos mais elevados de produção que podem tirar a competitividade das empresas. O tempo de desenvolvimento pode não atender as necessidades de mercado, não sendo raras as vezes que um sistema é liberado e as necessidades de mercado já foram alteradas. Em certos casos para atender os tempos requeridos pelo mercado a qualidade dos sistemas é reduzida, através da redução dos testes dos sistemas. Uma fábrica de software tem o objetivo de resolver alguns desses problemas.

Apesar das empresas possuírem necessidades diferentes muitos processos são similares. Uma fábrica que tenha um "estoque" de objetos que possam ser "montados" de acordo com as especificações de um pedido é mais rápido de ser construído. Como cada objeto já foi exaustivamente testado o produto final apresenta uma melhor qualidade. Conseqüentemente, o custo do produto final é reduzido e atendendo às necessidades de mercado do produto o tempo certo.

O gerenciamento de recursos humanos e dos objetos disponíveis é fundamental para o sucesso de uma fábrica de software. Como uma fábrica-modelo existem áreas especializadas em processos. Como a fábrica recebe pedidos de diferentes fontes (departamentos internos ou de clientes externos) o gerenciamento dos recursos é importante para atender os prazos compromissados. Para maximizar os recursos uma clara visão dos objetos desenvolvidos deve estar disponível para todos os programadores, evitando o desenvolvimento de objetos já criados e testados.

Basicamente a estrutura de uma fábrica de software deve possuir: uma área de atendimento a clientes que negocia e especifica as necessidades da área usuária; uma área de planejamento e controle da produção que faz a alocação dos recursos; estabelece os prazos de desenvolvimento e a definição dos objetos a serem utilizados ou desenvolvidos; uma área de produção que faz a montagem da aplicação; uma área de qualidade e garantia que verifica se o produto final atende as especificações exigidas; e, uma área de suporte que mantém e desenvolve as tecnologias para a fábrica de software.

Dentro da área de Engenharia de Software há um grande debate no qual o termo "Fábrica de Software" não é um termo adequado para se usar neste segmento, uma vez que o produto de uma fábrica no sentido clássico é algo material (físico) no caso do software o produto final é algo (abstrato) e nestes casos em determinados projetos singulares, ou originais, não se é possível estimar com  extrema precisão pazos para elementos como "insight" e "criatividade". Devido a isso é que conceitos bem estabelecidos de engenharia, tais como, planilhas de horas, adição de colaboradores em uma equipe de desenvolvimento de um projeto em andamento é um problema real no setor de software, neste caso estes problemas procuram ser superados através da adoção de uma metodologia mais adequada ao porte do projeto em que se trabalha mas isso seria um assunto para um próximo post.