Escolar Documentos
Profissional Documentos
Cultura Documentos
Alguns Fundamentos Engenharia de Software
Alguns Fundamentos Engenharia de Software
Engenheiro Mecnico pelo ITA, Doutor em Engenharia Eltrica pela Escola Politcnica da USP, Professor Titular aposentado do Departamento de Cincia da Computao da UFMG. Autor dos Livros Engenharia de Software: Fundamentos, Mtodos e Padres e Multimdia: Conceitos e Aplicaes . Atualmente consultor em Engenharia de Software e trabalha no Synergia Laboratrio de Engenharia de Software e Sistemas da UFMG.
duzem grande quantidade de software, ou at naquelas em que o desenvolvimento de software atividade fim. Programas e exames de certificao em Engenharia de Software so pouco conhecidos, ao contrrio do que acontece com algumas linguagens e tecnologias usados por esses profissionais. Em outros pases, a situao um pouco diferente. Algumas universidades americanas oferecem programas de graduao, mestrado e doutorado na rea. O IEEE (Institute of Electrical and Electronics Engineers), principal organizao internacional de profissionais de Engenharia Eltrica, atravs da Computer Society, que forma o seu ramo em Computao, oferece a qualificao de Profissional Certificado para o Desenvolvimento de Software.
E N GENHA R I A
Cincia - Conjunto organizado de conhecimentos relativos a um determinado objeto, especialmente os obtidos mediante a observao, a experincia dos fatos e um mtodo prprio. Engenharia - Arte de aplicar conhecimentos cientficos e empricos e certas habilitaes especficas criao de estruturas, dispositivos e processos que se utilizam para converter recursos naturais em formas adequadas ao atendimento das necessidades humanas. V-se que, pelas definies acima, a Cincia focaliza acumulao do conhecimento atravs do mtodo cientfico, com base em experimentos e observaes. J a Engenharia aplica esses conhecimentos ao atendimento das necessidades humanas. Embora o conhecimento seja certamente uma necessidade humana, trata-se de uma entre vrias outras, sejam necessidades materiais, como alimentao, moradia, segurana, ou imateriais, como afeio ou auto-estima. A tudo aquilo que satisfaz a necessidades, atribui-se um valor. A Engenharia est, portanto, ligada noo de valor, e a Engenharia de Software busca gerar valor com o processamento de informao. A noo de valor tem muitas conseqncias prticas importantes, e, de fato, a teoria conhecida como Engenharia de Software Baseada em Valor representa uma importante escola de pensamento dentro da rea.
tes das Belas Artes, e valorizam critrios estticos na criao de seus programas. Isso pode ter conseqncias boas e ruins, do ponto de vista de gerar valor. Por um lado, a busca da elegncia pode levar economia e simplicidade de formas, fazendo com que resultados de melhor qualidade sejam obtidos de maneira mais produtiva. E, principalmente, levando a escrever programas que possam ser mais facilmente reutilizados, mantidos e expandidos. Por outro lado, a auto-satisfao do programador pode ter como preo
tosos, e, em certos casos, at riscos vida humana; muitas vezes empreendimentos de software so afetados por um contexto econmico, poltico ou social.
A ntima relao entre a Engenharia de Software e a noo de valor signica que essa prosso trata o software como produto.
os interesses de quem est pagando pelo trabalho dele, ou de quem o usar. Seja, por exemplo, produzindo programas que ningum entende, seno o prprio autor (e, depois de certo tempo, nem ele mesmo). Seja, como outro exemplo, introduzindo funes que o autor achou interessantes, mas no so realmente necessrias, nem foram solicitadas. E muito prxima de Arte est a palavra Artesanato, que lembra produo caseira, em pequena escala, sem a utilizao de mtodos industriais, que so caracterizados pela padronizao e pela repetio. E, realmente, parece mais difcil aplicar esses mtodos industriais na confeco de software, do que nos ramos da engenharia do mundo material. Nestes, as leis fsicas impem limites claramente visveis ao que pode ser feito. Na Engenharia de Software, a criatividade no limitada por leis fsicas, e sim pela capacidade humana de entender e dominar a complexidade. Mas no se pode escapar do fato de que a Engenharia de Software tem que resolver muitos problemas de ordem industrial. Raramente possvel construir software profissional sem envolver equipes, s vezes de dezenas ou at centenas de pessoas; raramente possvel trabalhar na rea sem a presso de prazos e oramentos apertados; freqentemente defeitos de software podem acarretar prejuzos vul-
seu escopo tambm pequenos programas descartveis, feitos por algum apenas para resolver um problema dessa pessoa, e que no sero utilizados por outros. Mas, se um desses programas interessar a outras pessoas, e assim passar a ter valor, aparecero demandas para melhorar suas qualidades, aumentar suas funes, prolongar sua vida. E aparecer quem esteja disposto a investir nisso, com a expectativa de ganhar dinheiro. Nesse momento, o programa entrou no escopo da Engenharia de Software e se tornou um produto. Muitos dos produtos de software mais usados seguiram esse caminho. Todo produto tem usurios: aqueles que efetivamente usam o produto. Alguns produtos so feitos por encomenda de um cliente: aquele que pagar por sua produo. Outros, chamados de produtos de prateleira, so vendidos no mercado aberto, a quem se interessar. Neste caso, quem faz o papel do cliente quem define que recursos e funes se esperam do produto; talvez um departamento de vendas, ou de marketing, ou de definio de produtos de uma organizao, ou at, para produtos menores, os prprios desenvolvedores, colocando o chapu de investidores de risco. E existem todos os casos intermedirios, em que um produto parcialmente pronto completado, adaptado ou incrementado, por encomenda de um cliente. Como todo produto industrial, o produ-
to de software tem seu ciclo de vida: ele concebido para tentar atender a uma necessidade; especificado, quando essas necessidades so traduzidas em requisitos viveis; desenvolvido, transformando-se em um conjunto formado por cdigo e outros itens, como modelos, documentos e dados; passa por algum procedimento de aceitao e entregue a um cliente; entra em operao, usado, e sofre atividades de manuteno, quando necessrio; retirado de operao ao final de sua vida til. O ciclo de vida compreende muitas atividades, que so assunto das diferentes reas da Engenharia de Software. A Figura 1 mostra um modelo do ciclo de vida do software, usando a notao conhecida como UML (Unified Modeling Language). Essa
notao usada para descrever muitos aspectos diferentes do desenvolvimento de software, inclusive as seqncias de atividades que compem esse desenvolvimento. O tipo especfico de diagrama que mostrado na figura o Diagrama de Atividades, que representa uma evoluo dos tradicionais fluxogramas, usados pelos programadores h dcadas. interessante observar que a codificao, que representa a escrita final de um programa em forma inteligvel para um computador, apenas uma pequena parte do ciclo de vida. Muitas pessoas, inclusive alguns profissionais da informtica, acham que a codificao a nica tarefa de um engenheiro de software. Nos Diagramas de Atividades da UML, a bolinha cheia representa Incio; a bolinha com um anel adicional representa fim; cada retngulo simples de cantos arredondados representa uma ao, ou seja, uma atividade simples, da qual no
mostram detalhes; cada seta representa uma transio entre atividades; as barras paralelas representam incio e trmino de atividades executadas em paralelo; um retngulo de cantos arredondados com detalhes internos representa uma atividade estruturada, que composta de outras atividades.
E N GENHA R I A
a ser executado pela equipe do projeto, para atingir os objetivos do projeto e criar as entregas necessrias. Estruturas analticas de projeto podem ser apresentadas de muitas maneiras. Diagramas de atividade so uma das representaes mais usadas atualmente. Outro tipo de representao usual fornecida por planilhas e cronogramas, como aqueles que so produzidos pela ferramenta Microsoft Project (Figura 2).
na Engenharia de Software o CMMI (Capability Maturity Model Integration), que foi formulado pelo Software Engineering Institute da Carnegie-Mellon University. O CMMI foi encomendado e patrocinado pelo Departamento de Defesa americano, popularmente conhecido como Pentgono, que o utiliza para avaliao da capacidade de seus fornecedores de software. Sendo o Pentgono provavelmente a maior organizao compradora de software do mundo, o CMMI tem grande aceitao da indstria americana de software, e considervel influncia no resto do mundo. A rigor, suas prticas no so restritas indstria de software, podendo ser aplicadas ao desenvolvimento de outros tipos de produtos. Os conceitos do CMMI tm razes em comum com o PMBOK, como se pode observar pela similaridade das definies que adota: Produto - Resultado que se pretende entregar a um cliente ou usurio.
Projeto - Conjunto gerido de recursos inter-relacionados, que entrega um ou mais produtos a um cliente ou usurio, com incio definido e que, tipicamente, opera conforme um plano. Estrutura analtica do projeto - Um arranjo dos elementos do trabalho e dos relacionamentos deles entre si e com o produto final. Ao contrrio do PMBOK, o CMMI no se limita aos conhecimentos sobre gesto de projetos. Cobre tambm reas tcnicas, e focaliza principalmente a aplicao dos processos ao desenvolvimento de produtos. Um processo, segundo o IEEE, uma seqncia de passos executados com um determinado objetivo; segundo o PMBOK, um conjunto de aes e atividades inter-relacionadas, realizadas para obter um conjunto especificado de produtos, resultados ou servios. Um projeto representa a execuo de um processo, e um processo uma receita que seguida durante a realizao um
projeto; em outras palavras, o projeto o empreendimento que concretiza uma abstrao, que o processo. No se deve confundir um processo (digamos, uma receita de bolo) com o respectivo produto (o bolo) ou com a execuo do processo atravs de um projeto (a confeco de um bolo por determinada pessoa, em determinado dia). Processos, pessoas e tecnologia constituem os fatores de produo, que determinam o grau de sucesso dos projetos, ou seja: se eles conseguem entregar um produto de qualidade suficiente, dentro de um prazo aceitvel e com custos viveis. Portanto, desses fatores dependem a rentabilidade e a sobrevivncia das organizaes produtoras. Para muitos profissionais, a tecnologia o fator mais atraente; muitas vezes, h um otimismo exagerado quanto aos resultados da aplicao de novas tecnologias. Entretanto, tecnologias aparentemente promissoras podem levar para um beco sem sada, e, s vezes, tecnologias consideradas inferiores pelos especialistas lanam razes permanentes, graas a foras de mercado. Alm disso, a tecnologia s se paga quando colocada nas mos de pessoas capacitadas, trabalhando dentro de processos adequados. Toda introduo de nova tecnologia tem uma curva de aprendizado: as pessoas precisam ser treinadas, cometem inicialmente muitos erros e, por isso, podem at se tornarem
menos produtivas, durante algum tempo. Algumas tecnologias mais complexas s se pagam depois de muitos projetos. Investir na capacitao das pessoas certamente necessrio. Entretanto, formar pessoas difcil, caro e demorado. Recrutar pessoas capacitadas tambm: no h sinais de que a oferta de pessoas com alta qualificao no desenvolvimento de software venha a se igualar demanda, em futuro prximo. Alm disso, muitas pessoas produzem menos que a sua capacidade permitiria, por falta de liderana, por deficincia de ferramentas e suporte, ou por inadequao de processos. Dos investimentos nos fatores de produo, os investimentos nos processos so geralmente aqueles que podem trazer retorno em prazo mais curto. Processos tambm no fazem milagres, mas a melhoria dos processos costuma trazer benefcios em prazos relativamente curtos, como ilustrado por inmeros relatos de experincia publicados. No mnimo, contribuem para reduzir o desperdcio e o retrabalho, o que geralmente j traz ganhos muito significativos. A melhoria dos trs fatores (tecnologias, pessoas e processos) tambm requer seu prprio processo: ela deve ser feita em etapas bem-definidas e controladas, para que as organizaes, em prazos relativamente curtos, possam avaliar se seu investimento est tendo o retorno
esperado. E a principal contribuio de modelos de referncia como o CMMI indicar o caminho das pedras e o mapa da mina: onde a experincia coletada indica que o investimento em melhorias mais rentvel, em cada passo da evoluo das organizaes.
Concluso
A Engenharia de Software visa criao de produtos de software que atendam as necessidades de pessoas e instituies e, portanto, tenham valor econmico. Para isso, usa conhecimentos cientficos, tcnicos e gerenciais, tanto tericos quanto empricos. Ela atinge seus objetivos de produzir software com alta qualidade e produtividade quanto praticada por profissionais treinados e bem informados, utilizando tecnologias adequadas, dentro de processos que tirem proveito tanto da criatividade quando da racionalizao do trabalho.
Links
SEI http://www.sei.cmu.edu/ CMMI http://www.sei.cmu.edu/cmmi/ PMI Brasil http://www.pmi.org.br/