<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>0009-6725</journal-id>
<journal-title><![CDATA[Ciência e Cultura]]></journal-title>
<abbrev-journal-title><![CDATA[Cienc. Cult.]]></abbrev-journal-title>
<issn>0009-6725</issn>
<publisher>
<publisher-name><![CDATA[Sociedade Brasileira para o Progresso da Ciência]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S0009-67252003000200021</article-id>
<title-group>
<article-title xml:lang="pt"><![CDATA[Qual a prática do desenvolvimento de software?]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Fernandes]]></surname>
<given-names><![CDATA[Jorge Henrique Cabral]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidade Federal do Rio Grande do Norte Departamento de Informática e Matemática Aplicada ]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>04</month>
<year>2003</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>04</month>
<year>2003</year>
</pub-date>
<volume>55</volume>
<numero>2</numero>
<fpage>29</fpage>
<lpage>33</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://cienciaecultura.bvs.br/scielo.php?script=sci_arttext&amp;pid=S0009-67252003000200021&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://cienciaecultura.bvs.br/scielo.php?script=sci_abstract&amp;pid=S0009-67252003000200021&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://cienciaecultura.bvs.br/scielo.php?script=sci_pdf&amp;pid=S0009-67252003000200021&amp;lng=en&amp;nrm=iso"></self-uri></article-meta>
</front><body><![CDATA[ <p align="center"><img src="/img/revistas/cic/v55n2/tb17.gif"></p>     <p>&nbsp;</p>     <p><b><font size="4">Q<small>UAL A PR&Aacute;TICA DO DESENVOLVIMENTO DE SOFTWARE?</small></font></b></p>     <p>Jorge Henrique Cabral Fernandes</p>     <p>&nbsp;</p>     <p><b><font size=5>O</font></b> software &eacute; um produto do trabalho humano    cada vez mais presente na sociedade. Qualquer discuss&atilde;o sobre a pr&aacute;tica    de software deve se fundamentar na compreens&atilde;o da real natureza do que    &eacute; software e no relacionamento que ele provoca entre pessoas. Este artigo    descreve como o software &eacute; um artefato humano que n&atilde;o se enquadra    em defini&ccedil;&otilde;es convencionais encontradas no dicion&aacute;rio,    pois, al&eacute;m de ser uma entidade de natureza mec&acirc;nica, &eacute; uma    entidade descritiva, complexamente hieraquizada, cognitivo-lingu&iacute;stica    e hist&oacute;rica, concebida atrav&eacute;s de esfor&ccedil;os coletivos durante    um consider&aacute;vel per&iacute;odo de tempo. Partindo da descri&ccedil;&atilde;o    deste contexto do software, este artigo apresenta uma an&aacute;lise das principais    atividades e problemas contempor&acirc;neos com os quais se deparam os que desenvolvem,    adquirem e usam software e sistemas de computador. Tal an&aacute;lise permite    a compreens&atilde;o do papel central desse artefato humano em nossa sociedade    p&oacute;s-moderna, cujas diversas demandas, expectativas e premissas refor&ccedil;am    cada vez mais o futuro da produ&ccedil;&atilde;o e consumo de bens, produtos    e servi&ccedil;os.</p>     <p>&nbsp;</p>     <p><b>O<small> CONTEXTO DA PR&Aacute;TICA DO SOFTWARE</small></b> A pr&aacute;tica    do desenvolvimento de software est&aacute; no cerne de uma rela&ccedil;&atilde;o    humana de troca de planos, posses, desejos e necessidades entre tr&ecirc;s categorias    de agentes coletivos: os que usam, os que adquirem e os que produzem software.</p>     <p>&nbsp;</p>     <p><b>H<small>IERARQUIAS DE M&Aacute;QUINAS E USU&Aacute;RIOS</small></b> Quem    usa um software em geral &eacute; chamado de <b>usu&aacute;rio</b>. O software    n&atilde;o &eacute;, de fato, uma m&aacute;quina, mas sim uma descri&ccedil;&atilde;o    de m&aacute;quina. Ou seja, software &eacute; um artefato virtual, incapaz de    realizar trabalho a menos que exista uma m&aacute;quina que carregue e interprete    as instru&ccedil;&otilde;es e informa&ccedil;&otilde;es contidas no mesmo, o    que resulta na constru&ccedil;&atilde;o de outra m&aacute;quina, de ordem superior,    com a qual interage o usu&aacute;rio. Em outras palavras, na an&aacute;lise    de qualquer sistema de computa&ccedil;&atilde;o estaremos sempre falando de    duas m&aacute;quinas. Uma m&aacute;quina, de ordem <b>n</b>, &eacute; a m&aacute;quina    possu&iacute;da pelo usu&aacute;rio (MPU) antes da carga e interpreta&ccedil;&atilde;o    das instru&ccedil;&otilde;es e informa&ccedil;&otilde;es contidas no software.    A outra m&aacute;quina, de ordem <b>n+1</b>, &eacute; a m&aacute;quina com a    qual o usu&aacute;rio interage, e que surge quando a m&aacute;quina de ordem    <b>n</b> faz a interpreta&ccedil;&atilde;o do software. Da combina&ccedil;&atilde;o    din&acirc;mica entre a MPU e o software surge a m&aacute;quina de ordem <b>n+1</b>,    &agrave; qual dar-se-&aacute; o nome de m&aacute;quina constru&iacute;da por    meio de software (MCSW). O usu&aacute;rio de uma m&aacute;quina pode ser humano    ou m&aacute;quina, esta &uacute;ltima eventualmente atuando como intermedi&aacute;ria    na rela&ccedil;&atilde;o entre a MCSW e outro humano (usu&aacute;rio final).    A <a href="#figura1">figura 1</a> descreve essas rela&ccedil;&otilde;es. (Veja    <a href="#figura1">figura 1</a>)</p>     ]]></body>
<body><![CDATA[<p align="center"><a name="figura1"></a></p>     <p>&nbsp;</p>     <p align="center"><img src="/img/revistas/cic/v55n2/15526f1.gif"></p>     <p>&nbsp;</p>     <p><b>L<small>INGUAGENS E HIERARQUIAS</small></b> Qualquer que seja a natureza    do usu&aacute;rio, para que a rela&ccedil;&atilde;o usu&aacute;rio-m&aacute;quina    se estabele&ccedil;a de forma efetiva &eacute; preciso que exista uma linguagem    de conversa&ccedil;&atilde;o com a m&aacute;quina, exercitada entre o usu&aacute;rio    e a MCSW, na qual est&aacute; definida uma estrutura sint&aacute;tica e sem&acirc;ntica    para constru&ccedil;&atilde;o de senten&ccedil;as que permitam a comunica&ccedil;&atilde;o    entre as partes: usu&aacute;rio e m&aacute;quina. Adicionalmente, &agrave; MCSW    &eacute; facultada a capacidade de interagir diretamente com parte ou todo da    MPU, o que permite que tarefas da MPU sejam realizadas sob interfer&ecirc;ncia    da MCSW. Relacionamentos ling&uuml;&iacute;sticos entre usu&aacute;rios e m&aacute;quinas    podem ser estabelecidos de forma arbitr&aacute;ria e/ou hierarquizada, seja    entre o usu&aacute;rio final e a m&aacute;quina mediadora, entre m&aacute;quinas    independentes, entre a m&aacute;quina de ordem <b>n+1</b> e a m&aacute;quina    de ordem <b>n</b>, entre a m&aacute;quina de ordem <b>1</b> e a m&aacute;quina    de ordem <b>0</b>, etc.</p>     <p>Pode-se perceber portanto, que a constru&ccedil;&atilde;o de m&aacute;quinas    comput&aacute;veis &eacute; capaz de ser organizada sob diversas formas, principalmente    atrav&eacute;s de uma rela&ccedil;&atilde;o hierarquizada, bastando que, para    tal, cada m&aacute;quina ofere&ccedil;a para a m&aacute;quina de n&iacute;vel    imediatamente superior, um modo de comunica&ccedil;&atilde;o baseado numa linguagem    bem definida, na qual est&aacute; presente a capacidade de carga e interpreta&ccedil;&atilde;o    de planos de constru&ccedil;&atilde;o de m&aacute;quinas (o software). Eventualmente,    na rela&ccedil;&atilde;o hier&aacute;rquica de mais baixo n&iacute;vel atinge-se    a m&aacute;quina de ordem <b>0</b>, constru&iacute;da n&atilde;o mais atrav&eacute;s    de carga e interpreta&ccedil;&atilde;o din&acirc;mica de um software, mas sim    atrav&eacute;s de dispositivos fisicamente imut&aacute;veis. Esta m&aacute;quina    <b>0</b> &eacute; chamada de hardware. A <a href="#figura2">figura 2</a> apresenta    essa rela&ccedil;&atilde;o em maiores detalhes. (Veja <a href="#figura2">figura    2</a>)</p>     <p align="center"><a name="figura2"></a></p>     <p>&nbsp;</p>     <p align="center"><img src="/img/revistas/cic/v55n2/15526f2.gif"></p>     <p>&nbsp;</p>     ]]></body>
<body><![CDATA[<p>O consumidor do software, usualmente chamado de <b>cliente</b>, &eacute; uma    entidade que adquire uma c&oacute;pia de um software, fornecida por um agente    que ser&aacute; chamado de desenvolvedor, atrav&eacute;s de algum processo de    troca, que pode envolver entre outras coisas, dinheiro, bens, ou redes de conhecimento.    Do ponto de vista do cliente, o software &eacute; visto como um conjunto ordenado    de descri&ccedil;&otilde;es ou instru&ccedil;&otilde;es, capazes de direcionar    a m&aacute;quina possu&iacute;da pelo usu&aacute;rio (MPU) para a realiza&ccedil;&atilde;o    de tarefas que satisfazem &agrave;s necessidades do &uacute;ltimo. Como o usu&aacute;rio    nem sempre &eacute; conhecedor da organiza&ccedil;&atilde;o da MPU, o cliente    faz a media&ccedil;&atilde;o entre o desenvolvedor e o usu&aacute;rio. Sendo    assim, o cliente atua antes do uso do software, e &eacute; ele que seleciona    e decide colocar o software ao alcance da MPU, sobre a qual eventualmente ocorrer&aacute;    a carga e interpreta&ccedil;&atilde;o do software, criando a MCSW que, espera-se,    satisfa&ccedil;a as necessidades do usu&aacute;rio. No caso de sistemas de computa&ccedil;&atilde;o    de pequena escala, e quando o cliente e usu&aacute;rio s&atilde;o seres humanos,    eles tendem a ser a mesma pessoa. Seus pap&eacute;is se tornam distintos &agrave;    medida em que qualquer das m&aacute;quinas, seja a MPU ou a MCSW, se torna complexa    e hierarquizada. Em outra situa&ccedil;&atilde;o ocorre que o usu&aacute;rio    &eacute; uma m&aacute;quina, sem capacidade de negocia&ccedil;&atilde;o ou decis&atilde;o.</p>     <p>Dado que o cliente participa de uma rela&ccedil;&atilde;o de troca com o desenvolvedor,    com o objetivo de satisfazer as necessidades do usu&aacute;rio, o cliente precisa    levar em considera&ccedil;&atilde;o v&aacute;rios fatores pertinentes, numa    rela&ccedil;&atilde;o de produ&ccedil;&atilde;o e consumo de bens.</p>     <p>&nbsp;</p>     <p><b>C<small>OMPREENDENDO OS PROBLEMAS, DESEJOS E NECESSIDADES DO USU&Aacute;RIO</small></b>    Para poder adquirir o software satisfat&oacute;rio, o cliente precisa compreender:    quais os problema e necessidades com as quais o usu&aacute;rio convive e qual    a MPU. Definido o contexto da solu&ccedil;&atilde;o, usualmente chamado <b>dom&iacute;nio    da aplica&ccedil;&atilde;o</b>, o cliente planeja uma solu&ccedil;&atilde;o    para o mesmo atrav&eacute;s da defini&ccedil;&atilde;o das propriedades de uma    m&aacute;quina necess&aacute;ria para satisfazer ao usu&aacute;rio. Como o cliente    n&atilde;o constr&oacute;i diretamente o software, o plano de solu&ccedil;&atilde;o    &eacute; expresso atrav&eacute;s de uma defini&ccedil;&atilde;o de linguagem    necess&aacute;ria ao usu&aacute;rio (LNU), com gram&aacute;tica (sintaxe) e    l&oacute;gica (sem&acirc;ntica) bem definidas. A LNU, verbalizada pela MCSW,    ser&aacute; capaz de se comunicar com o usu&aacute;rio, permitindo-o expressar    tarefas a executar, e obter resultados adequados. Outro aspecto que o cliente    considera &eacute; que o problema e as necessidades do usu&aacute;rio existem    no mundo real, e portanto apresentam-se em um contexto de tempo, espa&ccedil;o    e recursos limitados. Sendo assim, tamb&eacute;m faz parte de uma solu&ccedil;&atilde;o    satisfat&oacute;ria de aquisi&ccedil;&atilde;o de software: a sele&ccedil;&atilde;o    de um desenvolvedor de software capaz de criar um plano de constru&ccedil;&atilde;o    da MCSW, que seja carreg&aacute;vel e interpret&aacute;vel por MPU; e a ado&ccedil;&atilde;o    de um conjunto de condi&ccedil;&otilde;es que permitam que o software esteja    dispon&iacute;vel para o usu&aacute;rio no momento em que este necessitar, e    dentro de uma rela&ccedil;&atilde;o de custo-benef&iacute;cio satisfat&oacute;ria    para o cliente.</p>     <p>&nbsp;</p>     <p><b>O <small>DESENVOLVEDOR</small></b> O desenvolvedor de software &eacute;    um agente coletivo, respons&aacute;vel por criar um plano de constru&ccedil;&atilde;o    de m&aacute;quina (software) que esteja dentro das condi&ccedil;&otilde;es estabelecidas    pelo cliente. Software &eacute;, portanto, uma meta-m&aacute;quina. A <a href="#figura3">figura    3</a> expressa a rela&ccedil;&atilde;o entre os tr&ecirc;s elementos humanos    que participam do cen&aacute;rio de pr&aacute;tica do software. (Veja <a href="#figura3">figura    3</a>)</p>     <p align="center"><a name="figura3"></a></p>     <p>&nbsp;</p>     <p align="center"><img src="/img/revistas/cic/v55n2/15526f3.gif"></p>     <p>&nbsp;</p>     ]]></body>
<body><![CDATA[<p><b>U<small>M EXEMPLO CONCRETO</small></b> Para tornar mais clara a explana&ccedil;&atilde;o    apresenta-se abaixo um exemplo concreto: o (software de) IRPF (Imposto de Renda    Pessoa F&iacute;sica), desenvolvido pela Secretaria da Receita Federal. O IRPF    &eacute; uma descri&ccedil;&atilde;o de como construir uma m&aacute;quina de    calcular impostos, a qual concretizada nas m&aacute;quinas possu&iacute;das    pelos contribuintes, desempenha tarefas peculiares ao sistema tribut&aacute;rio    brasileiro, de um modo compreens&iacute;vel por pessoas f&iacute;sicas que precisam    realizar o ajuste anual de contribui&ccedil;&otilde;es de impostos frente &agrave;    Fazenda Nacional. Suponha que o usu&aacute;rio deseja usar tal m&aacute;quina,    e possui um sistema de computador (MPU) constitu&iacute;do por um PC + sistema    operacional + browser web. Pode-se proceder conforme as etapas a seguir; 1-    o usu&aacute;rio emprega MPU para carregar e interpretar o browser web, construindo    MCSW1, que realiza a tarefa de copiar o (software) instalador do (software)    IRPF, da m&aacute;quina servidora da SRF, para MPU. Isto provoca uma altera&ccedil;&atilde;o    em MPU, que passa a ser MPU', agora constitu&iacute;da por um PC + sistema operacional    + browser + instalador do IRPF;</p>     <p>2 - o usu&aacute;rio emprega MPU' para carregar e interpretar o instalador    do IRPF, construindo MCSW1', a verbaliza&ccedil;&atilde;o de MCSW1' instala    o software do IRPF sobre MPU', que passa a ser MPU'', composta por um PC + sistema    operacional + browser + instalador do IRPF + IRPF. Todos esses usos de m&aacute;quinas    ainda n&atilde;o provocaram o efeito final desejado, que &eacute; o uso da m&aacute;quina    de calcular impostos.</p>     <p>3 - por fim, o usu&aacute;rio emprega MPU'' para carregar e interpretar o (software)    IRPF, o que constr&oacute;i MCSW1'', para realizar a atividade originalmente    necess&aacute;ria.</p>     <p>Onde est&atilde;o o software se as m&aacute;quinas em cada um dos momentos    descritos acima?</p>     <p><img src="/img/revistas/cic/v55n2/tb18.gif"> Quatro m&aacute;quinas no momento 1: (1) MCSW1,    que foi constru&iacute;da por (2) MPU sob demanda do contribuinte. MCSW1 foi    usu&aacute;ria de (3) m&aacute;quina servidor da SRF, e construiu (4) MPU'.</p>     <p><img src="/img/revistas/cic/v55n2/tb18.gif"> Tr&ecirc;s m&aacute;quinas no momento 2: (1) MCSW1',    que foi constru&iacute;da por (2) MPU' sob demanda do contribuinte. O resultado    da verbaliza&ccedil;&atilde;o de MCSW1 construiu MPU''.</p>     <p><img src="/img/revistas/cic/v55n2/tb18.gif"> Duas m&aacute;quinas no momento 3: (1) MCSW'',    que foi constru&iacute;da por (2) MPU'' sob demanda do contribuinte, para ser    utilizada no c&aacute;lculo de ajustes de contribui&ccedil;&atilde;o de impostos.</p>     <p>Onde est&atilde;o o usu&aacute;rio, o cliente e o desenvolvedor no cen&aacute;rio    acima? O usu&aacute;rio atuou nos tr&ecirc;s instantes, usando diretamente seis    m&aacute;quinas (MPU, MCSW1, MPU', MCSW1', MPU'' e MCSW''), em momentos distintos,    e mais uma m&aacute;quina (servidor SRF) atrav&eacute;s de intermedia&ccedil;&atilde;o.    Embora a inten&ccedil;&atilde;o do contribuinte fosse usar a m&aacute;quina    IRPF, ele precisou empregar seis outras m&aacute;quinas distintas para usar    a m&aacute;quina desejada.</p>     <p>O cliente do IRPF agiu antes dos momentos 1, 2 e 3, quando identificou uma    s&eacute;rie de problemas relativos aos custos e prazos de processamento de    ajustes anuais de impostos de pessoa f&iacute;sica. O cliente, nesse caso, &eacute;    um agente (coletivo) do governo federal que descreveu um conjunto de formul&aacute;rios,    tabelas de contribui&ccedil;&atilde;o, mecanismos de c&aacute;lculo, etc., que    constituem o que se pode chamar de "linguagem de ajuste anual de constribui&ccedil;&otilde;es    da fazenda nacional baseada na plataforma de sistemas de computador PC", ou    simplesmente a "linguagem do IRPF". Al&eacute;m da linguagem, o cliente definiu    condi&ccedil;&otilde;es adicionais de prazo e custos para a constru&ccedil;&atilde;o    do plano de m&aacute;quina IRPF, que delimita a a&ccedil;&atilde;o dos desenvolvedores.    A defini&ccedil;&atilde;o da linguagem do IRPF n&atilde;o foi realizada em um    momento &uacute;nico e isolado, dentre outras coisas porque a concep&ccedil;&atilde;o    de como ser&atilde;o solicitadas e realizadas as tarefas de uma m&aacute;quina    de calcular impostos (de qualquer tipo de m&aacute;quina em geral) n&atilde;o    possui uma solu&ccedil;&atilde;o &uacute;nica. Ela precisa ser projetada. No    caso espec&iacute;fico da "linguagem do IRPF", a mesma tende a sofrer press&otilde;es    para evoluir rapidamente devido &agrave; natureza coletiva de seu uso, por milh&otilde;es    de usu&aacute;rios. Percebe-se portanto que, antes de ser imut&aacute;vel, a    linguagem do IRPF, como a linguagem da maioria das m&aacute;quinas desenvolvidas,    &eacute; o resultado de um processo criativo que se desenvolve ao longo de v&aacute;rios    anos, e que tende a evoluir da mesma forma que evoluem as linguagens de manipula&ccedil;&atilde;o    de m&aacute;quinas f&iacute;sicas como controles remotos, liquidificadores,    rel&oacute;gios e pain&eacute;is de autom&oacute;veis. Finalmente, por estar    sujeita a um intenso processo de reprodu&ccedil;&atilde;o, adapta&ccedil;&atilde;o,    muta&ccedil;&atilde;o e sele&ccedil;&atilde;o, causada por um conjunto de tentativas    e erros para criar a linguagem mais compreens&iacute;vel e verbaliz&aacute;vel    por um conjunto aberto de seres cognitivamente ativos, as linguagens das m&aacute;quinas    comput&aacute;veis evoluem de forma darwiniana, sendo artefatos <i>designoids</i>    (2), tais como o s&atilde;o as enzimas, gl&acirc;ndulas, sistemas neuro-musculares,    organismos e ecossistemas.</p>     <p>O desenvolvedor do IRPF atuou baseado nas seguintes restri&ccedil;&otilde;es    determinadas inicialmente pelo cliente: conceber um plano de constru&ccedil;&atilde;o    de uma m&aacute;quina capaz de verbalizar a "linguagem do IRPF"; conceber um    plano de constru&ccedil;&atilde;o de m&aacute;quina que seja carreg&aacute;vel    e interpret&aacute;vel em cada uma das m&aacute;quinas possu&iacute;das por    cada um dos usu&aacute;rios do software; conceber um plano de constru&ccedil;&atilde;o    de m&aacute;quina que seja conclu&iacute;do dentro das restri&ccedil;&otilde;es    de prazo e custos determinados.</p>     ]]></body>
<body><![CDATA[<p>Estabelecida essa tr&iacute;ade dos envolvidos na pr&aacute;tica do software,    &eacute; poss&iacute;vel realizar uma s&eacute;rie de an&aacute;lises de cen&aacute;rios    e varia&ccedil;&otilde;es da qual emerge a riqueza e possibilidades do software    em nossa sociedade.</p>     <p>&nbsp;</p>     <p><b><font size="4">O<small> CEN&Aacute;RIO PERCEBIDO PELO USU&Aacute;RIO</small></font></b></p>     <p><b>A <small>COMPLEXIDADE DAS M&Aacute;QUINAS POSSU&Iacute;DAS</small> - MPU<small>S</small></b>    Um dos problemas que mais complicam a rela&ccedil;&atilde;o entre o usu&aacute;rio    e a m&aacute;quina constru&iacute;da pelo software, &eacute; a grande complexidade    das MPUs sobre as quais o software &eacute; interpretado. Atrav&eacute;s do    exemplo do IRPF, percebe-se que a MPU &eacute; constantemente compelida e sujeita    a modifica&ccedil;&otilde;es, em especial pela pr&oacute;pria a&ccedil;&atilde;o    do usu&aacute;rio. Eventualmente, cada uma das a&ccedil;&otilde;es realizadas    sobre as MPUs diretamente manipuladas pelo usu&aacute;rio implica em altera&ccedil;&otilde;es    em dezenas ou mesmo centenas de outras m&aacute;quinas hierarquicamente equivalentes    ou inferiores, que s&atilde;o postas em atividade e inatividade no momento em    que se est&aacute; usando um sistema de computador. Essa complexidade e constante    muta&ccedil;&atilde;o provocam o surgimento constante de diferen&ccedil;as entre    a MPU que havia no momento em que o cliente identificou uma solu&ccedil;&atilde;o,    e a MPU do usu&aacute;rio no momento em que o software &eacute; carregado e    interpretado. A solu&ccedil;&atilde;o pr&aacute;tica para esse problema surge    atrav&eacute;s da necess&aacute;ria padroniza&ccedil;&atilde;o de configura&ccedil;&otilde;es    ou plataformas de sistemas de computador, que consiste em estabelecer uma m&aacute;quina    padronizada, capaz de executar tarefas &uacute;teis a uma grande quantidade    de planos de constru&ccedil;&atilde;o de m&aacute;quinas. Ao se criar um m&iacute;nimo    denominador comum de m&aacute;quina possu&iacute;da pelo usu&aacute;rio, &eacute;    poss&iacute;vel criar planos de constru&ccedil;&atilde;o capazes de serem interpretados    em uma grande quantidade de sistemas de computador. Termos e conceitos como    Pentium, IBM PC, Macintosh, Linux, Unix, MS Windows, M&aacute;quina Virtual    Java, MS Office e .NET denotam plataformas de sistemas de computador de diversos    n&iacute;veis hier&aacute;rquicos, sobre as quais &eacute; poss&iacute;vel executar    categorias espec&iacute;ficas de software. Uma das mais importantes pr&aacute;ticas    do software &eacute; identificar qual &eacute; a plataforma de m&aacute;quina    que apresenta as melhores vantagens no contexto espec&iacute;fico de uma rela&ccedil;&atilde;o    entre usu&aacute;rios, clientes e desenvolvedores.</p>     <p>&nbsp;</p>     <p><b>A<small> EVOLU&Ccedil;&Atilde;O DAS LINGUAGENS NECESS&Aacute;RIAS</small>    - LNU<small>S</small></b> M&aacute;quinas s&atilde;o extens&otilde;es do ser    humano. S&atilde;o m&iacute;dias atrav&eacute;s das quais se estabelecem comunica&ccedil;&otilde;es    com resultados &uacute;teis e previs&iacute;veis. A natureza das linguagens    de comunica&ccedil;&atilde;o usu&aacute;rio-m&aacute;quina permeia profundamente    toda a rela&ccedil;&atilde;o e hist&oacute;ria do homem e dos artefatos que    constr&oacute;i, possuindo um impacto profundo sobre as atividades produtivas    da sociedade. Criar linguagens est&aacute;, portanto, no cerne da a&ccedil;&atilde;o    humana, e a pr&aacute;tica do software permite o exerc&iacute;cio desse processo    criativo de forma eficiente e reproduz&iacute;vel (nos milh&otilde;es de sistemas    de computador que existem) como jamais se viu na hist&oacute;ria da humanidade.    A defini&ccedil;&atilde;o da linguagem verbalizada por uma m&aacute;quina comput&aacute;vel    &eacute; um processo criativo e evolutivo, baseado em experi&ecirc;ncias cognitivo-coletivas.    Espera-se portanto que, da rela&ccedil;&atilde;o usu&aacute;rio-cliente-fornecedor,    seja poss&iacute;vel a defini&ccedil;&atilde;o de uma linguagem necess&aacute;ria    (LNU) para solu&ccedil;&atilde;o do problema que o usu&aacute;rio tem em m&atilde;os.    Tal solu&ccedil;&atilde;o &eacute; dificilmente obtida de forma plenamente satisfat&oacute;ria,    a menos que o usu&aacute;rio seja outra m&aacute;quina, devido aos seguintes    fatores:</p>     <p>1- do mesmo modo que a intera&ccedil;&atilde;o (conversa&ccedil;&atilde;o)    &eacute; essencial ao aprendizado de um novo idioma ou &agrave; manipula&ccedil;&atilde;o    de uma m&aacute;quina como um autom&oacute;vel, a compreens&atilde;o de uma    LNU (e das capacidades e limita&ccedil;&otilde;es da m&aacute;quina que a verbaliza)    s&oacute; atinge a plenitude no limite da intera&ccedil;&atilde;o entre o usu&aacute;rio    e uma m&aacute;quina que se aproxime da m&aacute;quina necess&aacute;ria (MNU).    Desse modo, a concep&ccedil;&atilde;o de LNUs satisfat&oacute;rias &eacute;    um processo interativo, que envolve a defini&ccedil;&atilde;o de v&aacute;rias    linguagens necess&aacute;rias intermedi&aacute;rias (LNI', LNI'', etc), que    s&atilde;o verbalizadas por MCS, que s&atilde;o constru&iacute;das por planos    de m&aacute;quinas intermedi&aacute;rias (SWIs). A &uacute;nica forma de conferir    satisfa&ccedil;&atilde;o plena e duradoura ao usu&aacute;rio &eacute; quando    o mesmo &eacute; tamb&eacute;m uma m&aacute;quina que n&atilde;o evolui sua    capacidade de verbaliza&ccedil;&atilde;o, como ocorre com muitas m&aacute;quinas    mec&acirc;nicas. Neste caso, a LNU pode ser plenamente definida atrav&eacute;s    de uma gram&aacute;tica e l&oacute;gica matematicamente formais. Esta &uacute;ltima    situa&ccedil;&atilde;o caracteriza o desenvolvimento do que Lehman (2) chama    de S-Type Program, que &eacute; um software cuja corretude (satisfatibilidade)    &eacute; plenamente definida a partir de sua (especifica&ccedil;&atilde;o de)    linguagem.</p>     <p>2- o segundo fator que dificulta a satisfa&ccedil;&atilde;o plena do usu&aacute;rio    &eacute; que o processo interativo est&aacute; baseado em rela&ccedil;&otilde;es    humanas. Ao interagir com quaisquer das m&aacute;quinas intermedi&aacute;rias    o usu&aacute;rio adquire compreens&atilde;o pr&aacute;tica de como a m&aacute;quina    verbalizou a sua comunica&ccedil;&atilde;o, fornecendo solu&ccedil;&otilde;es    (de algum modo satisfat&oacute;rias) para os problemas e necessidades com as    quais o usu&aacute;rio se depara. Dado que as diversas solu&ccedil;&otilde;es    intermedi&aacute;rias s&atilde;o produzidas ao longo do tempo, alguns problemas    originalmente percebidos pelo usu&aacute;rio se mostram solucionados, novos    problemas surgem &agrave; medida em que o ambiente do usu&aacute;rio se transforma    pela a&ccedil;&atilde;o da m&aacute;quina, e problemas que n&atilde;o eram percebidos    se tornam aparentes ou desaparecem. Essas transforma&ccedil;&otilde;es emergem    dentro de um contexto de negocia&ccedil;&atilde;o de prazos e custos entre o    cliente e o desenvolvedor, onde cada um dos agentes procura otimizar a rela&ccedil;&atilde;o    custo-benef&iacute;cio do seu ponto de vista. Os cen&aacute;rios acima contribuem    para que a LNUs sejam sujeitas a um forte processo de sele&ccedil;&atilde;o,    adapta&ccedil;&atilde;o e muta&ccedil;&atilde;o (devido a inevit&aacute;veis    erros no processo de comunica&ccedil;&atilde;o entre as partes), caracterizando    o que Lehman(2) chama de E-Type Software, ou <i>real-life</i> software, cujo    desenvolvimento se processa atrav&eacute;s de m&uacute;ltiplos n&iacute;veis,    m&uacute;ltiplos agentes e m&uacute;ltiplos ciclos de feedback positivo e negativo.</p>     <p>&nbsp;</p>     <p><b>A <small>ORGANIZA&Ccedil;&Atilde;O DAS M&Aacute;QUINAS NECESS&Aacute;RIAS</small></b>    O maior diferencial qualitativo do computador, relativo a todas as outras m&aacute;quinas    criadas pelo homem, &eacute; a capacidade de manipula&ccedil;&atilde;o de representa&ccedil;&otilde;es    simb&oacute;licas e discretas, estruturadas na forma de linguagens comput&aacute;veis.    Uma linguagem comput&aacute;vel, verbalizada por uma m&aacute;quina de ordem    0, &eacute; capaz de, ao interpretar um software nessa linguagem comput&aacute;vel,    criar uma m&aacute;quina de ordem 1, cuja linguagem verbalizada apresenta o    mesma expressividade da linguagem da m&aacute;quina de ordem 0. Em outras palavras,    embora cada linguagem comput&aacute;vel apresente caracter&iacute;sticas peculiares    de sintaxe e sem&acirc;ntica, &eacute; poss&iacute;vel ao desenvolvedor do software    que interagir&aacute; com uma m&aacute;quina comput&aacute;vel, conceber uma    m&aacute;quina de maior ordem, que ter&aacute; o mesmo poder computacional da    m&aacute;quina original. A esse conceito fundamental de computabilidade soma-se    a capacidade que os sistemas de computador tem de: verbalizar a linguagem em    alta velocidade, em conformidade com planos de m&aacute;quinas; e produzir resultados    coerentes com intera&ccedil;&otilde;es imprevis&iacute;veis efetuadas pelos    usu&aacute;rios, sobre os quais os sistemas n&atilde;o exercem controle.</p>     ]]></body>
<body><![CDATA[<p>A computabilidade confere elevada capacidade e flexibilidade de a&ccedil;&atilde;o    do desenvolvedor na organiza&ccedil;&atilde;o do software em v&aacute;rios n&iacute;veis    de hierarquia e interdepend&ecirc;ncia, enquanto a interatividade e imprevisibilidade    do usu&aacute;rio produzem o indeterminismo nos resultados das m&aacute;quinas    sobre os sistemas com os quais interagem. Esta combina&ccedil;&atilde;o entre    poder te&oacute;rico e imponderabilidade pr&aacute;tica cria uma condi&ccedil;&atilde;o    para o surgimento de problemas de complexidade, falhas de planejamento e baixo    grau de satisfa&ccedil;&atilde;o, que se espera possam ser controlados atrav&eacute;s    de pr&aacute;ticas da engenharia de software.</p>     <p>&nbsp;</p>     <p><b>A <small>ENGENHARIA DE SOFTWARE</small></b> &Eacute; a disciplina do conhecimento    humano que tem por objetivo definir e exercitar processos (humanos atuando como    m&aacute;quinas), m&eacute;todos (planos de processos), ferramentas e ambientes    (m&aacute;quinas apoiando processos e m&eacute;todos) para constru&ccedil;&atilde;o    de software que satisfa&ccedil;a necessidades de cliente e usu&aacute;rio dentro    de prazos e custos previs&iacute;veis. Em outras palavras, engenharia de software    &eacute; uma atividade industrial de produ&ccedil;&atilde;o de software, atrav&eacute;s    da qual s&atilde;o produzidos v&aacute;rios artefatos n&atilde;o necessariamente    compreens&iacute;veis por m&aacute;quinas, mas que contribuem decisivamente    para que um plano de constru&ccedil;&atilde;o de m&aacute;quina seja satisfatoriamente    criado. O corpo de conhecimentos da engenharia de software &eacute; estruturado    em &aacute;reas (3). Uma interpreta&ccedil;&atilde;o de cada &aacute;rea &eacute;    fornecida abaixo, relacionando-as com os conceitos previamente estabelecidos    na rela&ccedil;&atilde;o cliente-usu&aacute;rio-desenvolvedor.</p>     <p>1. Requisitos de software - atividades para aumentar a precis&atilde;o e controlar    a varia&ccedil;&atilde;o da linguagem de intera&ccedil;&atilde;o entre a m&aacute;quina    desejada e o usu&aacute;rio.</p>     <p>2. Design de software - atividades para particionar e organizar internamente    o plano de constru&ccedil;&atilde;o global do software, subdividindo-o recursivamente    em diversos planos de m&aacute;quinas (e suas linguagens) internas, at&eacute;    que cada plano de m&aacute;quina seja realiz&aacute;vel custo-efetivamente com    o aux&iacute;lio da MPU ou com outras internamente planejadas.</p>     <p>3.Constru&ccedil;&atilde;o de software - atividades para definir instru&ccedil;&otilde;es    e descri&ccedil;&otilde;es para cada um dos planos de m&aacute;quina, de modo    que cada plano de m&aacute;quina seja carreg&aacute;vel e interpret&aacute;vel    pela MPU ou por uma das m&aacute;quinas internamente constru&iacute;das.</p>     <p>4.Testes e qualidade de software - atividades para atestar que: o software    ser&aacute; adequadamente interpretado nas m&aacute;quinas dos desenvolvedores    e dos usu&aacute;rios; a constru&ccedil;&atilde;o de software foi feita conforme    os planos do <i>design</i>; que o design verbaliza a linguagem definida pelo    cliente; e o usu&aacute;rio ter&aacute; suas necessidades satisfeitas atrav&eacute;s    do software.</p>     <p>&nbsp;</p>     <p align="center"><img src="/img/revistas/cic/v55n2/15526q1.gif"></p>     <p>&nbsp;</p>     ]]></body>
<body><![CDATA[<p>5.Manuten&ccedil;&atilde;o de software - atividades tipicamente aplicadas ao    desenvolvimento de E-Type Software, para permitir que, ao longo dos v&aacute;rios    ciclos de intera&ccedil;&atilde;o de re-defini&ccedil;&otilde;es de linguagens    da m&aacute;quina necess&aacute;ria (mudan&ccedil;as de requisitos) sejam tomadas    a&ccedil;&otilde;es para tratar o efeito das leis de evolu&ccedil;&atilde;o    do software estabelecidas por Lehman. Essas leis s&atilde;o principalmente:    (I) a Lei da Mudan&ccedil;a Cont&iacute;nua - deve-se permitir que sejam feitas    altera&ccedil;&otilde;es no plano de software para verbalizar a linguagem modificada;    (II) Lei da Complexidade Crescente - devem ser empreendidos esfor&ccedil;os    para tornar sob controle a complexidade que cresce &agrave; medida que altera&ccedil;&otilde;es    s&atilde;o conduzidas no software; (III) Lei da Auto-Regula&ccedil;&atilde;o    e (IV) Lei da Conserva&ccedil;&atilde;o da Estabilidade Organizacional - que    sejam mantidas a estabilidade dos atributos dos processos e do produto (software)    frente &agrave; estrutura da organiza&ccedil;&atilde;o produtora de software,    de modo que organiza&ccedil;&atilde;o mantenha uma taxa l&iacute;quida de produtividade,    invari&aacute;vel ao longo do ciclo de vida do software; (V) Lei da Conserva&ccedil;&atilde;o    da Familiaridade - que a taxa de mudan&ccedil;as nos sucessivos <i>releases</i>    do software se mantenha constante ao longo do tempo; (VI) do Lei Crescimento    Cont&iacute;nuo - que a quantidade de intera&ccedil;&otilde;es ou tarefas verbalizadas    pelo software cres&ccedil;a para que se mantenha o n&iacute;vel satisfa&ccedil;&atilde;o    do usu&aacute;rio; e (VII) Lei da Qualidade em Decl&iacute;nio - que constantes    mudan&ccedil;as na m&aacute;quina possu&iacute;da pelo usu&aacute;rio devem    ser feitas sob controle rigoroso da manuten&ccedil;&atilde;o e adapta&ccedil;&otilde;es    constantes ao software, caso contr&aacute;rio a qualidade do mesmo declinar&aacute;    perante o usu&aacute;rio.</p>     <p>6.Ger&ecirc;ncia de configura&ccedil;&atilde;o - atividades para garantir que    seja adequadamente dispon&iacute;veis para uso pelos desenvolvedores de software    a estrutura interdependente-hier&aacute;rquica de m&aacute;quinas: 1- possu&iacute;das    pelo usu&aacute;rio; 2- internamente constru&iacute;das atrav&eacute;s do software;    e 3- que ap&oacute;iam os processos de engenharia de software.</p>     <p>7. Ger&ecirc;ncia de engenharia - atividades para garantir que o cliente receber&aacute;    o software em conformidade com a LCU e outras restri&ccedil;&otilde;es combinadas    entre as partes.</p>     <p>8. Processos de engenharia - atividades para planejar, suportar, monitorar,    controlar e ajustar todas as outras &aacute;reas e atividades de desenvolvimento,    de modo a estrutur&aacute;-las adequadamente na forma de processos produtivos    reproduz&iacute;veis e previs&iacute;veis.</p>     <p>9. Ferramentas e m&eacute;todos - atividades de sele&ccedil;&atilde;o e ado&ccedil;&atilde;o    de m&aacute;quinas e planos de processos que aumentem a produtividade dos desenvolvedores    enquanto reduzem a ocorr&ecirc;ncia de falhas no desenvolvimento.</p>     <p>At&eacute; este momento a defini&ccedil;&atilde;o de software usada se refere    &agrave; no&ccedil;&atilde;o de plano de constru&ccedil;&atilde;o de m&aacute;quina.    Ser&aacute; esta a defini&ccedil;&atilde;o mais aceita para software entre os    praticantes? Vejamos abaixo outra defini&ccedil;&atilde;o de programa (software)    presente em uma licen&ccedil;a de software da IBM (4).</p>     <p>'... O termo "programa" significa o programa original e todas as c&oacute;pias    completas ou parciais do mesmo. Um programa consiste em instru&ccedil;&otilde;es    leg&iacute;veis por m&aacute;quina, seus componentes, dados, conte&uacute;do    audiovisual (tal como imagens, texto, grava&ccedil;&otilde;es ou figuras) e    materiais licenciados relacionados.'.</p>     <p>Conforme esta defini&ccedil;&atilde;o, em geral adotada pela ind&uacute;stria    de software, um software &eacute; mais do que as instru&ccedil;&otilde;es interpret&aacute;veis    por uma m&aacute;quina. Digno de nota &eacute; a indica&ccedil;&atilde;o de    que conte&uacute;do audiovisual (tal como imagens, texto, grava&ccedil;&otilde;es    ou figuras) tambem &eacute; parte do software - este aspecto extrapola o conceito    de software inicialmente apresentado como meta-m&aacute;quina, &agrave; medida    que torna expl&iacute;cito o fato de que qualquer material escrito, impresso,    apresent&aacute;vel em qualquer m&iacute;dia de comunica&ccedil;&atilde;o, de    natureza textual, gr&aacute;fica, aud&iacute;vel, etc, que tem por objetivo    descrever algo para o usu&aacute;rio ou sua m&aacute;quina, tamb&eacute;m &eacute;    parte do software.</p>     <p>Outra defini&ccedil;&atilde;o de software comumente aceita entre quem desenvolve    software &eacute; a que prescreve que o resultado de quaisquer das atividades    do processo produtivo de software tamb&eacute;m &eacute; software. Al&eacute;m    de todas as m&iacute;dias digitais, impressas, ou reproduz&iacute;veis de alguma    forma, que foram reproduzidas e entregues ao cliente, s&atilde;o parte do software    os subprodutos internos do processo produtivo, como planos de decomposi&ccedil;&otilde;es    de software, especifica&ccedil;&otilde;es de linguagens, defini&ccedil;&otilde;es    de prazos e custos limites, planos de testes, documentos formais de aceita&ccedil;&atilde;o,    etc. Cada um dos artefatos &eacute; parte de um plano de constru&ccedil;&atilde;o,    n&atilde;o necessariamente compreens&iacute;vel por uma m&aacute;quina comput&aacute;vel,    mas destinado a ser interpretado por um ser humano que participa da constru&ccedil;&atilde;o    e evolu&ccedil;&atilde;o do software. Sendo assim, uma poss&iacute;vel elimina&ccedil;&atilde;o    desses artefatos (ou do conhecimento neles contidos) de dentro da composi&ccedil;&atilde;o    do software, sempre provoca preju&iacute;zos no processo de manuten&ccedil;&atilde;o    do mesmo.</p>     <p>&nbsp;</p>     ]]></body>
<body><![CDATA[<p><b>C<small>ONCLUS&Otilde;ES</small></b> A pr&aacute;tica do software emerge    da intera&ccedil;&atilde;o entre m&uacute;ltiplos agentes coletivos, com interesses    e necessidades distintas, que contribuem com pontos de vista complementares    para usar e criar m&aacute;quinas, linguagens e planos de constru&ccedil;&atilde;o    de m&aacute;quinas. Embora a satisfa&ccedil;&atilde;o prim&aacute;ria provocada    pelo uso do software seja resultante do efeito imediato de uma rela&ccedil;&atilde;o    mec&acirc;nica de interpreta&ccedil;&atilde;o efetuada por uma m&aacute;quina    comput&aacute;vel, o contexto hist&oacute;rico-social-ling&uuml;&iacute;stico    de concep&ccedil;&atilde;o do software o redefine como um artefato modularizado,    interdependente e hierarquizado, constitu&iacute;do por m&iacute;dias de diversas    naturezas, concebidas por uma ampla gama de seres humanos com habilidades profissionais    extremamente variadas, e destinadas n&atilde;o s&oacute; &agrave; interpreta&ccedil;&atilde;o    por m&aacute;quinas comput&aacute;veis, mas tamb&eacute;m por seres humanos.</p>     <p>&nbsp;</p>     <p><i><b>Jorge Henrique Cabral Fernandes</b> &eacute; professor do Departamento    de Inform&aacute;tica e Matem&aacute;tica Aplicada da Universidade Federal do    Rio Grande do Norte</i></p>     <p>&nbsp;</p>     <p>&nbsp;</p>     <p><b>Refer&ecirc;ncias bibliogr&aacute;ficas</b></p>     <p>1 Dawkins, R. <i>Clibimg mount improbable</i>. W. W Norton, 1996.</p>     <p>2 Lehmam,M.M. <i>Laws of software evolution revisited</i>. LNCS 1149, Springer,    1997.</p>     <p>3 SWEBOK Project. <i>Software engineering body of knowledge</i>. Ed. 0.9. 2001.</p>     <p>4 IBM software license</p>     ]]></body>
<body><![CDATA[ ]]></body>
</article>
