Um processo de software é composto por um conjunto de atividades, parcialmente ordenadas, que tem como objetivo obter um produto de software.

Entre as atividades que um processo pode conter tem-se a análise de viabilidade, análise de requisitos, especificação, arquitetura de software, implementação, testes, documentação, suporte e treinamento e manutenção. Um processo de software não precisa necessariamente conter todas essas atividades ou estar nesta ordem. No entanto, algumas atividades mais genéricas são utilizadas na maioria dos processos como: Especificação (define o que o software deve fazer e quais as restrições), Desenvolvimento ou Implementação (produção do software), Verificação (avalia-se correção, validação, e outros aspectos de qualidade), e Manutenção (mudanças no software).

Um processo definido nos garante certa estabilidade, controle e organização.

Um modelo de processo de software, por sua vez, é uma representação, ou abstração dos objetos e atividades envolvidas no processo de software. Modelos de software também oferecem uma forma mais abrangente e fácil de representar o gerenciamento de processo de software e o progresso do projeto. Entre os modelos de software temos o Sequencial ou Cascata, Desenvolvimento iterativo e incremental, Prototipação, Espiral, Formal, Ágil, etc.

Na próxima seção veremos mais sobre os modelos de processo especializado.

Modelos de Processo Especializado

Um modelo de processo especializado leva em conta muitas das características de um ou mais modelos tradicionais, tais como o modelo espiral, modelo evolucionário, entre outros. Esses modelos tendem a ser aplicados quando optamos por uma abordagem mais especializada de engenharia de software ou quando definida de uma forma mais restritiva.

Temos um conjunto de três modelos de processo especializado, são eles: Modelo Desenvolvimento baseado em componentes, Modelo de métodos formais e o Desenvolvimento de software orientado a aspectos. No restante deste artigo veremos mais especificamente sobre os dois primeiros modelos.

Desenvolvimento baseado em componentes

O desenvolvimento de software baseado em componentes tem como ênfase criar sistemas de software que envolvam a composição de componentes, permitindo que sejam adicionadas, adaptadas, removidas e substituídas partes do sistema sem que seja necessário a sua completa substituição.

Este tipo de desenvolvimento auxilia bastante a manutenção dos sistemas, visto que ele foca na integração de novos componentes já prontos ou então a atualização dos componentes já existentes. Dessa forma, essa abordagem enfatiza a criação ou adaptação de componentes para que sejam utilizados em diversos sistemas. Com isso, temos como resultado a reutilização que busca flexibilizar o desenvolvimento.

Um tipo de componente bastante conhecido e utilizado são os componentes de software comercial de prateleira ou COTS (Commercial Off-The-Shelf). Estes são componentes desenvolvidos por vendedores que os oferecem como produtos e disponibilizam as suas funcionalidades juntamente com interfaces bem definidas que permitem que esses componentes sejam integrados ao software a ser desenvolvido. Nesse caso, o engenheiro de software conhece pouco ou nada sobre o funcionamento interno de um componente, porém, é fornecida ao engenheiro uma interface externa bem definida com a qual ele deve trabalhar. Esses componentes podem ser comprados e a sua principal desvantagem, na maioria dos casos, é que não há código fonte disponível. Assim, a definição de como usar o componente é dado pelo fabricante.

De forma geral, um componente é algo quase independente e uma parte substituível de um sistema que tem uma função bastante clara. Os componentes possuem uma interface e também empregam regras de herança.

O modelo de desenvolvimento baseado em componentes possui diversas características do modelo espiral, possuindo uma abordagem iterativa e evolucionária. A essência do desenvolvimento baseado em componentes é desenvolver aplicações a partir de componentes de software pré-empacotados.

Diferente de outros modelos, no modelo de desenvolvimento baseado em componentes as atividades de modelagem e construção começam com a identificação de possíveis candidatos a componentes que podem ser projetados como módulos de software convencionais, como classes ou pacotes. O modelo de desenvolvimento baseado em componentes possui as seguintes etapas:

  • Diversos produtos baseados em componentes existentes no mercado são pesquisados e avaliados.
  • Os itens de integração de componentes são considerados.
  • Projeta-se uma arquitetura de software para acomodar os componentes.
  • Integram-se os componentes à arquitetura.
  • Realizam-se todos os testes para assegurar a funcionalidade adequada.

Todas essas etapas são independentes da tecnologia utilizada para criar os componentes.

Uma das maiores vantagens do desenvolvimento baseado em componentes é que ele aumenta o reuso, que por sua vez, proporciona uma série de benefícios como redução no tempo do ciclo de desenvolvimento, redução no custo do projeto, etc.

Um exemplo de componente bastante utilizado na indústria é a tecnologia de componentes EJB (Enterprise Java Beans). Os EJBs são utilizados em praticamente todos os sistemas comerciais desenvolvidos em Java. O EJB é uma arquitetura de componentes para o desenvolvimento e utilização de aplicações corporativas baseadas em componentes distribuídos que são posicionados do lado servidor e acessados por diferentes aplicações cliente. O interessante é sabermos que os EJBs são componentes que implementam serviços e podem ser utilizados em qualquer sistema que tenham os requisitos que esses componentes disponibilizam.

Modelo de métodos formais

O Modelo de Métodos Formais possui um conjunto de atividades que conduzem a uma especificação matemática formal do software. Eles possibilitam a especificação, desenvolvimento e a verificação de um sistema baseado em computador através da aplicação de uma rigorosa notação matemática.

Os métodos formais ainda podem ser empregados em três diferentes níveis, são eles:

  • o Nível 0, em que o software é descrito através de uma especificação formal que será usada como base para a implementação do sistema. Esse nível é considerado uma opção de menor custo-benefício;
  • o Nível 1, em que o desenvolvimento e a verificação formal são utilizados para produzir um programa de maneira mais formal. Este nível é mais apropriado para sistemas de alta-integridade que necessitem de segurança ou confiança;
  • o Nível 2, em que provadores de teoremas podem ser utilizados afim de conduzir teste completos das propriedades de um sistema de forma mais automatizada. Este nível é mais apropriado em sistemas que o custo provocado por erros é extremamente alto.

A vantagem dos métodos formais durante o desenvolvimento é que eles oferecem a eliminação de diversos problemas encontrados em outros modelos como a ambiguidade, incompletude e a inconsistência. Todos esses problemas podem ser descobertos e corrigidos mais facilmente com a aplicação da análise matemática. Nos outros paradigmas eliminamos esses problemas por meio de uma revisão local, o que de certa forma é menos eficaz. Os métodos formais, quando utilizados durante o projeto, servem para verificar a programação, possibilitando assim a descoberta e a correção de erros que poderiam passar despercebidos.

Mesmo oferecendo a garantia de software sem defeitos, o modelo de métodos formais está longe de ser uma abordagem predominante em ambientes de negócios. Um dos motivos para o modelo não ser uma abordagem muito utilizada nesses ambientes é que eles consomem muito tempo e dinheiro. Além disso, esse método requer desenvolvedores com formação e experiência necessária para a aplicação dos métodos formais, além de treinamento extensivo. Por fim, os métodos formais também são difíceis de serem utilizados como um meio de comunicação com clientes, já que os mesmos não são tecnicamente preparados para usar esses modelos.

É por esses motivos que os modelos de métodos formais são mais utilizados quando precisamos desenvolver software com fator crítico de segurança, assim como software que sofreriam pesados problemas econômicos se ocorressem erros no software. Alguns exemplos de software onde os métodos formais são aplicados são os sistemas aviônicos para aeronaves, engenharia aeroespacial e equipamentos médicos.

Bibliografia

[1] Pressman, R. Engenharia de Software: Uma abordagem Profissional. 7º edição. Editora Bookman.

[2] Ken Schwaber e Jeff Sutherland. Scrum Guide. Disponível em http://www.scrum.org

[3] Mike Cohns: Succeding with Agile. Disponível em http://www.mountaingoatsoftware.com/blog/