O documento discute as principais fases do desenvolvimento de software, incluindo levantamento de requisitos, projeto, implementação, testes e manutenção. A ética no desenvolvimento de software é destacada como um princípio fundamental nas diferentes fases.
Fases do desenvolvimento de software baseado no código de ética.
1. UNIVERSIDADE FEDERAL DO CEARÁ
CAMPUS QUIXADÁ
BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO
RELATÓRIO AVALIATIVO
ARTHUR ANTUNES NOGUEIRA DA SILVA
DÉCIO GONÇALVES DE AGUIAR NETO
JOÃO VICTOR CHAVES DE OLIVEIRA
RAUL ARAÚJO LIMA
RONILDO OLIVEIRA DA SILVA
FASES DO DESENVOLVIMENTO DE SOFTWARE BASEADO
NO CÓDIGO DE ÉTICA DO ENGENHEIRO DE SOFTWARE
QUIXADÁ - CEARÁ
2014
1
2. Sumário
Levantamento de Requisitos..........................................................................................................................
Fase de Projeto................................................................................................................................................
Fase de Implementação..................................................................................................................................
Testes de Software...........................................................................................................................................
Manutenção de Software................................................................................................................................
Anexos...........................................................................................................................................................
Referências....................................................................................................................................................
2
3. Levantamento de Requisitos
O processo de levantamento de requisitos é primordial para o desenvolvimento de um
software pois o desenvolvedor deve compreender bem o desejo do cliente para construir
verdadeiramente aquilo que o cliente espera. Projetos de softwares que não utilizam desta
etapa correm sérios riscos de não atenderem à necessidade real do cliente ou não realizarem
com precisão e facilidade aquilo que o cliente esperava.
Durante a construção de um projeto de software é necessário que o analista se
comunique com o cliente para saber o que ele realmente deseja. Essa etapa chama-se
levantamento de requisitos e pode ser realizada de diferentes formas.
No levantamento de requisitos o
analista ou desenvolvedor “conversa” com
o cliente a respeito do software e dos
requisitos básicos e principais que ele
necessita. Essa conversa pode ser uma
entrevista ou um diálogo e pode utilizar
alguns artifícios adicionais caso necessário,
tais como: desenvolver um questionário
para recolher informações sobre o software,
recolher documentos, formulários ou algum
material que o cliente utilizava para realizar
seu trabalho antes de dispor do software
desejado.
A tirinha ao lado apresenta um
contexto em que a importância da etapa do
levantamento de requisitos é dada como
primordial no desenvolvimento de um
projeto, podendo causar danos seríssimos a
todos os envolvidos.
3
4. Fase de Projeto
Projeto
A fase de projeto decide como o sistema irá operar, em termos de: hardware, software
e infraestrutura de rede; a interface de usuário, formulários e relatórios; os programas
específicos, bancos de dados e arquivos que serão necessários.
Definição do ambiente de aprendizagem
O desenvolvimento do software educacional possui características específicas e a
especificação dos requisitos de qualidade inclui o modelo de ensino/aprendizagem
selecionado, isto é, a filosofia de aprendizagem subjacente ao software. Este é o único padrão
a ser especificado " a priori" no desenvolvimento do software educacional e que vai
determinar seu desenvolvimento. A experiência tem mostrado que o processo de
desenvolvimento de software adequado à hipermídia educacional deve ser composto do
modelo de ciclo de vida de prototipagem evolutiva, acrescido da etapa inicial da escolha do
ambiente educacional e avaliação por parte de professores e alunos, para que novos requisitos
sejam incorporados ao hiperdocumento.
Análise de viabilidade
Os projetos podem variar em função do objetivo pelo qual o sistema é constituído, do
hardware sobre o qual pode ser implantado e também em função da filosofia de
desenvolvimento. Para que o projeto da hipermídia seja realizado é necessário a definição de
algumas estimativas entre elas recursos, custos e cronogramas. Deve-se fornecer dados sobre
os usuários, restrições externas, limitações do produto e outros fatores relevantes.
É necessário avaliar a possibilidade do reuso de componentes e identificar,
acompanhar e eliminar itens de risco antes que eles possam comprometer o sucesso do projeto
ou que se tornem a principal fonte de trabalhos refeitos.
Seleção do método para autoria
Os métodos de autoria, de um modo geral, estão divididos em duas classes: os
métodos embutidos em alguma ferramenta de autoria e os métodos que possibilitam a análise
e projeto independente da ferramenta a ser utilizada na implementação. Existem diversos
métodos propostos para modelagem de aplicações hipertexto/hipermídia tanto para aplicações
gerais quanto para a educação.
Ética no Desenvolvimento de Software
O desenvolvimento de software envolve grande responsabilidade, pois não é apenas
aplicar habilidades técnicas, mas sim um conjunto de atividades sociais e legais, oque muitas
vezes limita a liberdade das pessoas que trabalham nesta área. Desta forma, o engenheiro de
software deve se comportar de forma ética e moralmente responsável se deseja ser respeitado
como um engenheiro profissional..
Os engenheiros de software devem estar convictos a fazer do conjunto da análise, da
especificação, do projeto, do desenvolvimento, do teste e da manutenção de software, uma
profissão benéfica e respeitada. De acordo com o seu comprometimento com a saúde,
segurança, e bem-estar do público, os engenheiros de software devem adotar os oito
4
5. princípios.
Público. Engenheiros de Software devem atuar consistentemente com os interesses públicos.
Clientes e empregados. Engenheiros de Software devem atuar de modo a atender os melho-
res interesses dos seus clientes e empregados, consistentemente com os interesses públicos.
Produto. Engenheiros de Software devem assegurar que seus produtos e modificações relaci-
onadas atendam os melhores padrões profissionais possíveis.
Julgamento. Engenheiros de Software devem manter a integridade e independência nos seus
julgamentos profissionais.
Administração. Administradores e líderes de Engenharia de Software devem aderir e promo-
ver uma abordagem ética ao gerenciamento do desenvolvimento e manutenção de software.
Profissão. Engenheiros de Software devem desenvolver a integridade e reputação da profis-
são consistentemente com os interesses do público.
Coleguismo. Engenheiros de Software devem ser justos e dispostos a auxiliar seus colegas.
Identidade. Engenheiros de Software devem participar do aprendizado de suas vidas valo-
rizando a prática da sua profissão e devem promover uma abordagem ética à prática da pro-
fissão.”
5
6. Fase de Implementação
Implementação de Software
Uma das partes mais conhecidas do processo de desenvolvimento de software é a
implementação, ou codificação. Nessa etapa o produto é construído baseado nos requisitos e
projetos desenhados e escritos nas fases anteriores.
O profissional que atua diretamente com essa fase é o programador, com a ajuda da equipe e
do cliente, é ele vai produzir de acordo com os requisitos estipulados.
Requisitos
“Os requisitos de um sistema são descrições dos serviços fornecidos pelo sistema e as suas
restrições operacionais. Esses requisitos refletem as necessidades dos clientes de uma sistema que
ajuda a resolver algum problema, por exemplo, controlar um dispositivo, enviar um pedido ou
encontrar informações.” (IAN SOMMERVILLE, 2007, p.79).
Ferramentas e documentos
Dessas normas a serem obedecidas, o profissional deverá escolher a linguagem
(programação, consulta, marcação, estilização,etc), frameworks e ferramentas que utilizará no
decorrer da implementação. Um projeto pode ser iniciado do zero, ou ser baseado na técnica e
reuso de software ou padrões de projeto por exemplo.
A reformulação do software se torna muitas vezes eficaz (dependendo da portabilidade da
aplicação) e da clara documentação de software, pois toda a equipe, ou outras pessoas deverão
conhecer o produto caso forem dar continuidade ao trabalho.
Essas informações utilíssimas podem estar contidas tanto dentro do código (comentários)
quanto num documento externo que acompanhe toda a codificação.
Qualidade de software
O programador terá de ter consciência de que ele está criando um produto que normalmente
será utilizado por pessoas que talvez não tenha tanto conhecimento na área da computação, ou seja,
uma boa prática, será utilizar da clareza e de boa usabilidade. Todo mundo gosta de intuitividade e
acessibilidade.
Além da qualidade ao usuário, o implementador deverá estar atento a eficácia do código,
como evitar estruturas estáticas, e expressões extensas, utilizar chamada de métodos ao invés de
vários fluxos de repetição, utilizar compiladores que possam fornecer otimizações, técnicas de
dinamismo de dados (alocação de memória) entre outras.
Ética no Desenvolvimento de Software
“A consciência é o melhor livro de moral e o que menos se consulta.
”
Blaise Pascal
Entre os anos 2005-2007, foi relatado um escândalo do sistema de proteção de cópias de
CDs da Sony e BMG que diz respeito a medidas de proteção contra cópia ilegais e potencialmente
prejudiciais implementadas em cerca de 22 milhões de CDs.
Quando inserido em um computador, os CDs instalavam dois softwares que forneciam uma
forma de gestão de direitos digitais, modificando o sistema operacional para interferir com a cópia
do CD. Ambos os programas não podiam ser facilmente desinstalados, e eles criaram
vulnerabilidades consideradas malwares. Segundo um usuário, um dos programas instalados,
apresentou relatórios sobre escuta particulares; o outro continha o código de várias partes de
software de código aberto em uma aparente violação de direitos autorais, e configurou o sistema
6
7. operacional para ocultar a existência desse software, levando a ambos os programas a serem
classificados como rootkits.
Visando o bom comportamento dos profissionais, a imagem , integridade da empresa e a
confiabilidade dos produtos, a ACM/IEEE-CS (Association for Computing Machinery / Institute for
Electrical and Eletronics Engineers - Computer Society) escreve um código que servirá como guia
para o desenvolvimento de um profissional respeitado e que possa trazer benefícios a empresa, a
sociedade e o meio ambiente.
Segue um exemplo do código de ética citado acima que evidencia a má prática adotada pela
Sony :
Público
“Aprovar software somente se o mesmo estiver absolutamente convicto que seja seguro, de acordo
com suas especificações, passe nos testes apropriados, e não diminua a qualidade de vida, diminua a
privacidade, ou prejudique o meio ambiente. O efeito final do trabalho deve ser pelo bem público.”
Testes de Software
Testes de softwares tem como objetivo, testar a qualidade e forçar o software ao máximo
para buscar encontrar possíveis erros, para que essas falhas após identificadas possam ser corrigidas
pela equipe de desenvolvimento de software.
Testar um software significa verificar através de uma execução controlada se o seu
comportamento corre de acordo com o especificado. O objetivo principal desta tarefa é revelar o
número máximo de falhas dispondo do mínimo de esforço, ou seja, mostrar aos que desenvolvem se
os resultados estão ou não de acordo com os padrões estabelecidos.
O teste de software pode ser visto como uma parcela do processo de qualidade de software.
A qualidade da aplicação pode e, normalmente, varia significativamente de sistema para sistema.
Inicialmente, precisamos conhecer a diferença entre Defeitos, Erros e Falhas. As definições que
iremos usar aqui seguem a terminologia padrão para Engenharia de Software do IEEE – Institute of
Electrical and Electronics Engineers – (IEEE 610, 1990).
Defeito é um ato inconsistente cometido por um indivíduo ao tentar entender uma
determinada informação, resolver um problema ou utilizar um método ou uma ferramenta.
Por exemplo, uma instrução ou comando incorreto.
Erro é uma manifestação concreta de um defeito num artefato de software. Diferença entre
o valor obtido e o valor esperado, ou seja, qualquer estado intermediário incorreto ou
resultado inesperado na execução de um programa constitui um erro.
Falha é o comportamento operacional do software diferente do esperado pelo usuário. Uma
falha pode ter sido causada por diversos erros e alguns erros podem nunca causar uma falha.
Realizar um bom teste requer a execução de uma série de atividades para o planejamento,
projeto e execução do teste. Informações importantes devem ser registradas para permitir a
solução dos problemas e também o aprimoramento das práticas de teste. Criar testes
aleatoriamente é desperdício de tempo e de esforço; técnicas de teste selecionam situações
representativas para o teste, permitindo descobrir problemas com um esforço razoável. Só
assim, bem fundamentado, o teste pode permitir que se ganhe confiança no software.
7
8. Manutenção de Software
Manutenção de Software é o processo geral de modificação de um sistema depois de ter
sido colocado em uso. Corrigir defeitos de código, de projeto, de especificação, acrescentar
funcionalidades. Normalmente não envolvem alteração da arquitetura do sistema.
Manutenção de software
Ao corrigir erros no software podemos ter pequenos trabalho como corrigir um pequeno erro
como algo mais trabalhoso que pode envolver um equipe inteira. Portanto, cuidar do patrimônio
informacional (conteúdos que estão no software que a empresa usa) é essencial e importante para
que gastos maiores não sejam necessários.
A manutenção de software é um processo geral de mudanças de um sistema depois que ele é
entregue. O tempo geralmente é aplicado ao software sob encomenda no qual grupos de
desenvolvimento separados são envolvidos antes e depois da entrega do sistema. As mudanças
feitas no software podem ser mudanças simples para corrigir erros de codificação, podem ser
mudanças mais extensas para corrigir erros de projetos ou melhorias significantes para corrigir erros
de especificação ou para acomodar novos requisitos. As mudanças são implementadas por meio de
modificações de componentes de sistemas existentes e, quando necessário, por meio da adição de
novos componentes ao sistema.
Exitem três tipos diferentes de manutenção de software:
Manutenção para reparo de defeitos de software: A correção de erros de codificação é
normalmente barata; os erros de projetos são mais caros, pois podem envolver a reescrita de vários
componentes dos programas. Erros de requisitos são mais onerosos para serem reparados, pois pode
ser necessário o reprojeto do sistema existente.
Manutenção para adaptar o software a um ambiente operacional diferente: Esse tipo de
manutenção é necessária quando algum aspecto do ambiente do sistema, como o hardware,
plataforma do sistema operacional ou outro software de apoio mudam. O sistema da aplicação deve
ser modificado para lidar com essas mudanças de ambiente.
Manutenção para adicionar funcionalidade ao sistema ou modificá-la: Esse tipo de
manutenção é necessária quando os requisitos do sistema mudam em resposta às mudanças
organizacionais ou de negócios. A escala de mudanças necessárias para o software é muito maior do
que em outros tipos de manutenção.
Na prática, não fica muito clara a distinção entre esse tipos de manutenção. Quando você
adapta o sistema a um novo ambiente, isso pode ser feito pela adição de funcionalidade para
aproveitar as características do novo ambiente. Os defeitos de software frequentemente são
expostos porque os usuários usam o sistema de maneiras imprevisíveis. Mudanças no sistema para
acomodar o modo de trabalho é o melhor meio de corrigir esses defeitos.
Propriedades de um sistema
Antes do projetista pensar em manutenção do sistemas, seria mais viável pensar nos
requisitos do sistema para que seu software possa funcionar e que não haja por acaso algum erro, ou
dano.
Algumas propriedades são:
VOLUME: O volume de um sistema (espaço total ocupado) varia dependendo de como a
montagem dos componentes está organizada e conectada.
CONFIABILIDADE: A confiabilidade do sistema depende da confiabilidade dos
8
9. componentes, mas interações inesperadas podem causar novos tipos de falha e, portanto, afetar a
confiabilidade do sistema.
PROTEÇÃO: A proteção do sistema (sua capacidade de resistir a ataques) é uma
propriedade complexa que não pode ser facilmente medida. Podem ocorrer ataques não previstos
pelos projetistas do sistema e, dessa maneira, as proteções internas podem ser vencidas.
FACILIDADE DE REPAROS:Esta propriedade reflete a facilidade com que um problema
no sistema no sistema é resolvido, após sua descoberta. Isso depende da capacidade de diagnosticar
o problema, acessar os componentes defeituosos e modificar ou substituir esses componentes.
USABILIDADE: Esta propriedade reflete a facilidade com que o sistema pode ser usado.
Isso depende dos componentes técnicos do sistema, seus operadores e seu ambiente operacional.
Custo de manutenção
Quando é desenvolvido um software é necessário estar preparado para os gastos extras, pois
a construção do software é apenas uma parte, pois retoques no programa ou melhorias sistemas
podem vir a serem necessários, e gastos são exigidos tanto na melhoria quanto na manutenção.
Os custos de manutenção como parte dos custos de desenvolvimento variam de um domínio
de aplicação para outro, (Guimarães, 1983) sugere que os custos de manutenção de sistemas de
aplicação de negócios são bastante comparáveis aos custos de desenvolvimento de sistemas. Para
sistemas de tempo real incorporados, aos custos de manutenção podem ser até quatro vezes mais
altos do que os custos de desenvolvimento. Os requisitos de alta robustez e desempenho desses
sistemas fazem com que seus módulos tenham de ser muito acoplados e, por isso, difíceis de serem
modificados.
Geralmente é benéfico investir esforço no projeto e na implementação de um sistema para
reduzir os custos de manutenção para compreender o sistema e analisar o impacto das mudanças
propostas. Assim, o trabalho executado durante o desenvolvimento para tornar o software mais fácil
de ser compreendido e alterado contribui para reduzir os custos de manutenção. Boas técnicas de
engenharia de software, como especificações precisas, uso da orientação a objetos no
desenvolvimento e gerenciamento de configurações, contribuem para a redução dos custos de
manutenção.
Responsabilidade profissional e ética
O comportamento ético e profissional do projetista de software é essencial para o cliente.
Saber as limitações daquilo que é permitido ou não, são muito importantes na tomada de decisões.
Como outras disciplinas de engenharia, a engenharia de software está dentro de uma
estrutura de condições legais e sociais que limita a liberdade dos engenheiros que, por sua vez,
devem admitir que o seu trabalho implica responsabilidades mais amplas do que a plicação de
habilidades técnicas. Devem também se comportar de forma responsável ética e moralmente, para
serem respeitados como profissionais.
9
10. Anexos:
Nome E-mail
Arthur Antunes Nogueira da Silva arthur.antunes.aa@hotmail.com
Décio Gonçalves de Aguiar Neto decioaguiarneto@hotmail.com
João Vitor Chaves de Oliveira mrjvco@gmail.com
Raul Araújo Lima raul.araujo3212@gmail.com
Ronildo Oliveira da Silva ro.nildooliveira@hotmail.com
10
11. Referências
ACM: Software Engineering Code of Ethics and Professional Practice, ACM/IEEE joint task force,
consultado em Maio de 2014. Disponível em: http://www.acm.org/serving/se/code.htm
Collins, W. Robert et al How Goog is Good Enough? An Ethical Analysis of Software
Construction and Use. Communications of the ACM. Vol 37. Nº 1 January. 1994.
Engenharia de Software: http://paginas.fe.up.pt/~aaguiar/es/artigos%20finais/es_final_10.pdf
GOTTERBARN, Don. How the New Software Engineering Code of Ethics Affects You.
IEEE Software Engineering. p 58 – 64, nov/dec. 1999
Introdução a teste de software: Consultado em Junho de 2014. Disponível em:
http://www.devmedia.com.br/artigo-engenharia-de-software-introducao-a-teste-de-software/8035
Manutenção de Software: http://www.ic.unicamp.br/~ranido/mc626/Manutencao.pdf
PRESSMAN, Roger S. Engenharia de software. 6ª ed. Porto Alegre: Bookman, 2006.
Teste de software: http://www.softwarepublico.gov.br/5cqualibr/xowiki/Teste-item7
Teste de Software: Junho de 2014. Disponível em: http://pt.wikipedia.org/wiki/Teste_de_software
SOMMERVILLE, Ian. Engenharia de software. 8ª ed. São Paulo: Pearson Addison-Wesley,
2007.
Sony BMG copy protection rootkit scandal, consultado em Junho de 2014. Disponível em:
http://en.wikipedia.org/wiki/Sony_BMG_copy_protection_rootkit_scandal
11