Peculiaridades
A Engenharia de Software trata-se de uma área do conhecimento da informática voltada para a especificação, desenvolvimento e manutenção de sistemas de software aplicando tecnologias e práticas da Ciência da Computação, Gerência de Projetos, dentre diversas outras disciplinas, objetivando organização, produtividade e qualidade.
Preocupam-se atualmente essas tecnologias com as linguagens de programação, bases de dados, ferramentas, plataformas, bibliotecas, padrões, processos e a primordialmente com a qualidade do software. Os alicerces científicos da engenharia de software envolvem o uso de modelos abstratos e precisos, os quais permitem ao engenheiro especificar, projetar, implementar e manter sistemas de software, com a finalidade de avaliar e garantir sua qualidade.
Ademais, deve a engenharia de software desenvolver mecanismos para o planejamento e gerenciamento do processo de desenvolvimento.
Importa destacar o entendimento de Friedrich Ludwing Baues, que a "engenharia de software é a criação e a utilização de sólidos princípios de engenharia a fim de obter software de maneira econômica, que seja confiável e que trabalhe eficientemente em máquinas reais". Valendo frisar que o próprio significado de engenharia já traz os conceitos de criação, construção, análise, desenvolvimento e manutenção.
Já a Engenharia de software concentra-se nos aspectos práticos da produção de um sistema de software, enquanto a Ciência da Computação estuda os fundamentos teóricos dos aspectos computacionais.
Em 1.960 pela primeira vez é usado o termo "Engenharia de Software", mas oficialmente somente em 1.968 fora mencionado na "Nato Conference on Software Engineering". A Engenharia de Software surge numa tentativa de aprimorar a crise do software e dar um tratamento de engenharia, o qual daria mais ênfase sistemática e controlada ao desenvolvimento de sistemas de software complexos.
O sistema de software complexo é caracterizado pelo conjunto de componentes abstratos de software (estruturas de dados e algoritmos) encapsulados como procedimentos, funções, módulos, objetos ou agentes e interconectados entre si, os quais compõem a arquitetura do software e que deverão ser efetuados em sistemas computacionais.
É a engenharia de sistemas uma área ampla, uma vez que trata de todos os aspectos de sistemas baseados em computadores, pois engloba desde hardware e engenharia de processos até o software.
É o processo de Engenharia de Software uma seqüência lógica de práticas, a qual designa o desenvolvimento ou evolução de sistemas de software. Tais práticas, por sua vez, englobam atividades tais como as de especificação, projeto, implementação, testes e caracterizam-se pelo intercâmbio de ferramentas, pessoas e métodos.
Modelos de Processo de Software
Um modelo de processo de software pode ser visto como uma representação, ou abstração dos objetos e atividades envolvidas no processo de software. Além disso, oferece uma forma mais abrangente e fácil de representar o gerenciamento de processo de software e conseqüentemente o progresso do projeto.
Exemplos de alguns modelos de processo de software:
>>Seqüencial ou Cascata (do inglês waterfall) - com fases distintas de especificação, projeto e desenvolvimento.
>>Evolucional - especificação, projeto e desenvolvimento são entrelaçados.
>>V-Model - Parecido com o modelo cascata, mas com uma organização melhor, que permite que se compare com outros modelos mais modernos.
>>Espiral - evolução através de vários ciclos completos de especificação, projeto e desenvolvimento.
>>Componentizado - reuso através de montagem de componentes já existentes.
>>Formal - implementação a partir de modelo matemático formal.
>>Ágil.
>>RAD.
>>Quarta geração.
Metodologias, Métodos e Ferramentas
Inicialmente importa destacar o termo metodologia, o qual é bastante controverso nas ciências em geral, em especial na Engenharia de Software. Muitos autores tratam os termos metodologia e método como sinônimos, mas nào está correto. Correto é afirmar que a metodologia envolve princípios filosóficos que guiam uma gama de métodos que utilizam ferramentas e práticas diferencidas para realizar algo.
A exemplo disso, pode-se citar a Metodologia Estruturada, a qual é composta por vários métodos, tal como Análise Estruturada e Projeto Estruturado (muitas vezes denominados SA/SD), e Análise Essencial. E tanto a Análise Estruturada quanto a Análise Essencial utilizam-se da ferramenta Diagrama de Fluxos de Dados para modelar o funcionamento do sistema.
Importa aqui, ilustrar tal conceituação para melhor esclaracer a questão:
>>Metodologias Estruturadas
>>Análise Estruturado
>>Projeto Estruturado
>>Análise Essencial
>>SADT
>>Metodologias Ágeis
>>Feature Driven Development (FDD)
>>Enterprise Unified Process (EUP)
>>Scrum
>>Crystal (Crystal Clear, Crystal Orange, Crystal Orange Web)
>>Programação Extrema (XP)
>>Outras Metodologias
>>Rational Unified Process (RUP)
>>Microsoft Solution Framework (MSF)
Processos de Software
Trata-se o processo de software ou, também chamado de metodologia de desenvolvimento de software, de um conjunto de atividades e resultados agregados que auxiliam na produção de software. Sendo que as dentre várias atividades associadas, por exemplo, existem a análise de requisitos e a codificação. Por sua vez, o resultado do processo trata-se de produto que conjetura a forma como o processo foi administrado.
E, muito embora existam vários processos para o desenvolvimento de software, existem atividades fundamentais comuns a todos eles, tais como:
Especificação de Software: trata-se da definição das funcionalidades, ou seja, dos requisitos e das restrições do software. Normalmente é uma fase em que o desenvolvedor e cliente tratam as necessidades reais da empresa para definir as características do software a ser desenvolvido.
Projeto e Implementação de Software: todo software é produzido para suprir as necessidades da empresa, ou seja, de acordo com as especificações. Nesta fase, contudo, serão propostos modelos através de diagramas, e estes modelos são praticados em linguagem de programação.
Validação de Software: essa fase é importante para garantir que todas as funcionalidades especificadas do software sejam praticadas.
Evolução de Software: primordial que o software evolua para continuar sendo útil ao cliente.
Muitos softwares são desenvolvidos por organizações sem a utilização de nenhum processo. Isso normalmente ocorre porque os processos tradicionais nem sempre são adequados às realidades das organizações.
Particularmente, empresas pequenas e médias não possuem recursos suficientes para adotar o uso de processos pesados. E por esse motivo, muitas organizações não utilizam nenhum processo. O resultado final desta falta de sistematização na produção de software é a falta de qualidade do produto final, além de embaraçar a entrega do software nos prazos e custos predefinidos e inviabilizar a evolução do software.
Muitos são os processos de software definidos na literatura da Engenharia de Software. Muito comum, as organizações inventarem seu próprio processo ou adaptar algum processo à sua realidade. E, conforme já dito nesse trabalho, várias são as metodologias tradicionais, que são orientadas a documentação, e as metodologias ágeis, as quais buscam desenvolver software com o mínimo de documentação e burocracia.
Um abraçao a todos.
Thais Marinho
Publicado em: 22/04/2008 - 13:05
artigo mto bom, esclareceder. Estou precisando de algo mais sobre o crystal clear. agradecida