Processamento de imagens na prática

Como desenvolver sistemas de software para processamento de imagens? Parte I: Entre a engenharia de software e as linhas de produção de software

Este é um guest-post escrito por Marcos d’Ornellas, Doutor em Processamento de imagens pelo Intelligent Systems Lab (ISLA) da Universidade de Amsterdam e Diretor do Laboratório de Computação Aplicada (LaCA) da UFSM.

guest banner

A maioria dos desenvolvedores (e não programadores, apesar da humildade de Edsger W. Dijkstra) de software concorda que são muito mais produtivos quando fazem uso de sistemas de software eficientes. Estes desenvolvedores podem, desta maneira, ser mais produtivos e contribuir para a evolução de tais sistemas. Podem, inclusive, trabalhar mais rapidamente e fazer uso destes sistemas no desenvolvimento de aplicações específicas, moldando o sistema final conforme as necessidades do usuário.

Conhecimento posto em prática

Philip G. Armour, no livro “As Leis do Processo de Software”, informa que o software não é um produto, mas conhecimento posto na prática. Ele mesmo crê que o desenvolvimento de software e o processo de aplicação como são geralmente definidos e compreendidos é limitado por algumas das realidades do mundo dos negócios onde o software se torna um produto. O ponto crucial deste suposto antagonismo é que o desenvolvimento de um conhecimento que seja aplicado é, e sempre será, uma atividade de descoberta.

É claro que podemos definir rigorosamente um processo para todos os aspectos de nosso trabalho que são perfeitamente estruturados e organizados. Porém, não podemos definir rigorosamente um processo para atividades do nosso trabalho que são baseadas na descoberta. Armour contribui, desde 2000, para a Communications of the ACM, escrevendo regularmente para a coluna The Business of Software. Recentemente, Armour criou um blog denominado de Systems: Psychology and Software.

Uma criação pura da mente

Andriy Solovey, autor do famoso blog Software Creation Mistery argumenta que o software é uma criação pura da mente, incluindo três atividades principais: compreensão, evolução e troca de experiências. A compreensão se refere ao aprendizado e entendimento dos conceitos e implementações do sistema. A evolução refere-se à construção, modificação e o suporte ao crescimento do sistema, enquanto que a troca de experiências permite a comunicação e a troca de idéias sobre o sistema.

Linhas de produção

Recentemente participei de uma escola de verão sobre linhas de produção de software (Software Production Lines) e do workshop de esforços em reuso de software. O Evento foi organizado pela RISE e CESAR no Recife. Após ouvir as palestras de Paul Clements do Software Engineering Institute e de Rob van
Ommering
da Philips Research acabei observando que a grande diferença entre os conceitos de engenharia de software tradicional, onde podemos aceitar que o software seja um conhecimento posto na prática nas palavras de Armour, e a engenharia de linhas de produção de software, conforme Clements e Ommering, é a grande importância dada aos requisitos de software.

A abordagem da engenharia de linhas de produção de software é fundamentada na utilização de técnicas avançadas de engenharia que permitem desenvolver sistemas de software similares a partir de um conjunto de especificações (requisitos) comuns a todos esses sistemas usando, para atingir seus objetivos, um meio comum de produção.

As linhas de produção de software têm recebido muita atenção pela comunidade científica e tecnológica que alguns estudiosos chegam a acreditar que estamos diante de um novo paradigma para que empresas possam otimizar seus processos de engenharia de software. Muito embora esta idéia não seja original… (lembro de módulos, objetos, componentes entre tantas outras palavras que foram usadas no final do século XX para descrever a reusabilidade pregada pela programação orientada por objetos, por aspetos e genérica) encontra suporte justamente na linha de produção.

Milhares de softwares precisam ser desenvolvidos, testados, validados e colocados em funcionamento. E, desta maneira, as palavras de Solovey, de que o software é uma criação pura da mente, acabam soando românticas demais. Produção é a palavra-chave. Software é um produto.

Qual caminho escolher?

Qual abordagem utilizar para desenvolver sistemas eficientes para o processamento de imagens? A possibilidade de lidar com diversos tipos de imagens e de estruturas de dados é ainda um dos principais problemas encontrados na programação de sistemas de processamento de imagens. Este fato aumenta significativamente a quantidade de código necessário para a implementação das operações, visto que um algoritmo implementado para imagens binárias, por exemplo, tem que ser  reescrito para imagens em níveis de cinza, mesmo que este algoritmo seja logicamente semelhante ao já codificado. Desta forma, a incorporação de um novo tipo de dado ou de estrutura de dados, tradicionalmente, ocasiona o retrabalho de novos algoritmos para que estes trabalhem de acordo com os novos dados.

Câmeras Canon

Câmeras Canon

É claro que o avanço dos paradigmas de programação orientada por objetos e genérica produziu resultados bastante animadores sobre o reuso de software (por exemplo, a incorporação do polimorfismo paramétrico inclusive na linguagem Java) nos últimos anos. Porém, a utilização de arquiteturas escalares de alto desempenho baseadas em graphic processor units (GPUs) com aplicações em processamento de imagens têm levantado novamente a questão entre reuso versus desempenho.

O desenvolvimento baseado em componentes tem guiado a construção de sistemas de processamento imagens nos últimos anos. Assim, parece-me bastante oportuna a abordagem de linhas de produção de software (realçando a reusabilidade de código) para a efetiva produção em larga escala. Um pequeno exemplo é a quantidade de softwares distintos que a Canon necessita produzir para as mais variadas câmeras fotográficas e dispositivos de imageamento. Em baixa escala, é o conhecimento posto na prática que lidera  e portanto, a engenharia de software tradicional ainda é a melhor opção.

No próximo guest-post, Marcos d’Ornellas escreve sobre o impacto da abordagem da engenharia de software convencional e da abordagem que emprega o conceito de linhas de produção de software baseado nas ferramentas de software disponíveis (mais conhecidas) para o desenvolvimento de sistemas de processamento de imagens.

Crédito das imagens:

O banner “guest-post” é derivado de uma imagem de Alessandro Martins. As cameras canon são de pie.

Comente

Você pode usar estas tags e atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>