Buscar

Aula 7 - Leitura complementar

Prévia do material em texto

CURSO: ANÁLISE E DESENVOLVIMENTO DE SISTEMAS
DISCIPLINA: PROCESSO DE DESENVOLVIMENTO DE SOFTWARE
PROF.: JANETE AMARAL/ DAVID 
FALCÃO
TURNO: VISTO
TURMA: SALA: 
TECNOLÓGICO ALUNO: 
DATA: ___/___/___ LEITURA COMPLEMENTAR
CONSTRUÇÃO DE SOFTWARE
TRADUÇÃO SWEBOK
INTRODUÇÃO
O termo Construção de Software refere-se à criação detalhada do trabalho do software através da 
combinação de codificação, verificação, teste de unidade, teste de integração e depuração.
A Área de Conhecimento - Construção de Software está ligada a todas as demais áreas. Mas está mais 
fortemente ligada com as áreas Projeto e Teste de Software. Isto porque o processo de construção de 
software em si envolve significante atividade de projeto e de teste. Ela também utiliza as saídas das 
atividades do projeto e fornece entradas para as atividades de teste.
Os limites detalhados entre projeto, construção e teste variam dependendo do ciclo de vida do processo 
de software que está sendo utilizado no projeto.
Embora alguns projetos detalhados possam ser realizados antes da construção, muito do trabalho de 
projeto é feito dentro da atividade de construção em si. Desta forma, a Área Construção de Software é 
totalmente ligada com a Área Projeto de Software. Através da construção, engenheiros de software 
testam seu trabalho (teste de unidade e teste de integração). Assim, a Área Construção de Software 
também está muito ligada com a Área Teste de Software.
A Construção de Software tipicamente produz o maior volume de itens de configuração que necessitam 
ser gerenciados no projeto de software (arquivos fonte, conteúdos, casos de teste e outros). Desta 
forma, a Área Construção de Software também está fortemente ligada com a Área Gerência de 
Configuração de Software.
Uma vez que a construção de software está fortemente apoiada em métodos e ferramentas, ela é 
provavelmente a mais intensiva no uso de ferramentas das áreas de conhecimento, estando, portanto, 
ligada à Área de Ferramentas e Métodos.
Enquanto a qualidade de software é importante em todas as Áreas de Conhecimento, o código é a 
última liberação de um projeto de software, e desta forma a Qualidade de Software esta fortemente 
ligada à construção de software.
Dentre as disciplinas relacionadas com a Engenharia de Software, a Área Construção de Software é a 
mais relacionada com a ciência da computação, no uso do conhecimento de algoritmos e das práticas 
de codificação. Ambas são frequentemente consideradas como pertencentes ao domínio da ciência da 
computação. 
DETALHAMENTO DOS TÓPICOS PARA CONSTRUÇÃO DE SOFTWARE
A estrutura da Área Construção de Software é apresentada a seguir, juntamente com uma breve 
descrição dos principais tópicos associados. A Fig.1 apresenta uma representação gráfica da 
decomposição de alto nível desta área de conhecimento.
CONSTRUÇÃO DE SOFTWARECONSTRUÇÃO DE SOFTWARE
Figura 1
1. Fundamentos da Construção de Software
Os fundamentos da construção de software incluem:
• Minimização da complexidade
• Antecipação de Mudanças
• Construção para Verificação
• Padrões de Construção
Os 03 primeiros conceitos são aplicados tanto ao projeto como à construção. A seção seguinte define 
estes conceitos e descreve com eles são aplicados à construção de software.
1.1. Minimização da Complexidade
O principal fator que leva as pessoas a convergirem seus planos para aos computadores é a 
severamente limitada habilidade das pessoas de reterem em suas memórias, especialmente por longos 
períodos de tempo, estruturas e informações complexas. Isto conduz a um dos mais fortes 
direcionadores na construção de software: a Minimização da Complexidade.
A necessidade de se reduzir a complexidade é aplicada em todos os aspectos da construção de 
software, sendo particularmente crítica para o processo de verificação e teste da construção de 
software. 
Na construção do software, a redução da complexidade é obtida através da ênfase na criação de código 
simples e legível. A minimização da complexidade é realizada através do uso de padrões e através de 
várias técnicas específicas. 
1.2. Antecipação de Mudanças
Muitos softwares mudam com o tempo e a antecipação de mudanças direciona muitos aspectos da 
construção de software. Software é inevitavelmente parte das mudanças do ambiente externo e 
mudanças no ambiente externo afetam o software de diversas maneiras.
1.3. Construção para Verificação
 
Construção para verificação significa a construção de software no qual as falhas possam ser 
descobertas com facilidade pelos engenheiros de software enquanto escrevendo o software, tanto 
quando durante os testes independentes e atividades operacionais. Técnicas específicas que suportam 
a construção para verificação incluem as seguintes: padrões de codificação para suportar revisões de 
GERENCIANDO GERENCIANDO 
A CONSTRUÇÃOA CONSTRUÇÃO
•• MODELOS DE CONSTRUÇÃOMODELOS DE CONSTRUÇÃO
•• PLANEJAMENTO DA CONSTRUÇÃOPLANEJAMENTO DA CONSTRUÇÃO
•• MEDIÇÃO DA CONSTRUÇÃOMEDIÇÃO DA CONSTRUÇÃO
•• PROJETO DA CONSTRUÇÃOPROJETO DA CONSTRUÇÃO
•• LINGUAGENS DA CONSTRUÇÃOLINGUAGENS DA CONSTRUÇÃO
•• CODIFICAÇÃOCODIFICAÇÃO
•• TESTE DA CONSTRUÇÃOTESTE DA CONSTRUÇÃO
•• REUSOREUSO
•• QUALIDADE DA CONSTRUÇÃOQUALIDADE DA CONSTRUÇÃO
•• INTEGRAÇÃOINTEGRAÇÃO
•• MINIMIZAÇÃO DA COMPLEXIDADEMINIMIZAÇÃO DA COMPLEXIDADE
•• ANTECIPAÇÃO DE MUDANÇASANTECIPAÇÃO DE MUDANÇAS
•• CONSTRUÇÃO PARA VERIFICAÇÃOCONSTRUÇÃO PARA VERIFICAÇÃO
•• PADRÕES DE CONSTRUÇÃOPADRÕES DE CONSTRUÇÃO
FUNDAMENTOS DA CONSTRUÇÃOFUNDAMENTOS DA CONSTRUÇÃO 
DE SOFTWAREDE SOFTWARE
CONSIDERAÇÕESCONSIDERAÇÕES 
PRÁTICASPRÁTICAS
código, teste de unidade, organização do código para suportar testes automáticos e restrições no uso 
de estruturas de linguagem complexas ou difíceis de serem entendidas, dentre outras. 
1.4. Padrões de Construção
 
Padrões que afetam diretamente os problemas de construção são:
• Linguagens de programação (ex: padrões para linguagem de programação como Java e C++)
• Métodos de Comunicação (ex: padrões para formatos e conteúdos padrões para formatos de 
documentação e conteúdos)
• Plataformas (ex: padrões de interface de programação para chamadas de sistema operacional) 
• Ferramentas (ex: padrões diagramáticos para notações como UML (Unified Modeling Language))
Uso de padrões externos. A construção depende do uso de padrões de construção externos, 
linguagens, ferramentas de construção, interfaces técnicas e interações entre a construção de software 
e outras áreas de conhecimento. Padrões vêm de numerosas fontes, incluindo especificação de 
interface de hardware e software, tais como Object Management Group (OMG) e organizações 
internacionais, tais como IEEE ou ISO.
Uso de padrões internos. Padrões podem ser criados para toda a organização (padrões corporativos) 
ou padrões para uso num projeto específico. Estes padrões suportam a coordenação de atividades de 
grupo, minimização da complexidade, antecipação de mudanças e construção para verificação.
2. Gerenciando a Construção
2.1. Modelos de Construção
Vários modelos foram criados para desenvolver software, alguns do quais enfatizam mais a construção 
de software que outros.
Alguns modelos são mais lineares, do ponto de vista da construção, tais como o modelo de ciclo de vida 
em cascata ou de estágios. Estes modelos tratam a construção como uma atividade que ocorre 
somente depois de significativo trabalho de requisito ter sido realizado – incluindo o trabalho de 
requisitos detalhados, trabalho de projeto extensivo e planejamento detalhado. Os enfoques mais 
lineares tendem a enfatizar as atividades que precedem a Construção (requisitos e projeto), e tendem a 
criar uma mais distinta separação entre as atividades. Nestes modelos, a principal ênfase da construção 
reside na codificação. 
Outros modelos sãomais iterativos, tais como a prototipação evolutiva, a extreme programming e 
SCRUM. Estes enfoques tendem a tratar a construção como uma atividade que ocorre 
concorrentemente com outras atividades do desenvolvimento de software, incluindo requisitos, projeto e 
planejamento ou sobrepondo a elas. Estes enfoques tendem a fazer um mix entre as atividades de 
projeto, codificação e teste, e frequentemente tratam a combinação de atividades como construção.
Consequentemente, o que é considerado construção, depende, de certa forma, do modelo de ciclo de 
vida utilizado.
2.2. Planejando a Construção
 
A escolha do método de construção é um aspecto chave no planejamento das atividades de construção. 
A escolha do método de construção afeta a ordem em que as atividades serão feitas e o grau para os 
quais são esperados que sejam realizadas as atividades antes do trabalho de construção começar. 
O enfoque da construção afeta a habilidade do projeto para a redução da complexidade, antecipar 
mudanças e construir para verificação. Estes objetivos podem também ser aplicados em processo, 
requisito e projeto - mas eles também são influenciados pela escolha do método de construção. 
O Planejamento da Construção também define a ordem em que os componentes serão criados e 
integrados, o processo de gerenciamento da qualidade do software, a alocação de tarefas para um 
específico engenheiro de software e outras tarefas, de acordo com o método escolhido.
2.3. Medindo a Construção 
Várias atividades e artefatos da construção podem ser medidos, incluindo o código desenvolvido, o 
código modificado, o código reusado, o código destruído, a complexidade do código, estatísticas de 
inspeção de código, correção de faltas, taxa de faltas encontradas, de esforço e de escalonamento.
Estas medidas podem ser úteis para o propósito de gerenciamento da construção, assegurando 
qualidade durante a construção, melhorando o processo de construção, tanto quanto por outras razões. 
3. Considerações Práticas
A construção é uma atividade em que o software tem que apresentar as arbitrárias e caóticas restrições 
do mundo real, e fazer exatamente assim. Pela proximidade com restrições do mundo real, a 
construção é mais direcionada por considerações práticas que as outras Áreas de Conhecimento, e na 
Engenharia de Software a área Construção é talvez a mais manual.
3.1. Projeto da Construção 
Alguns projetos alocam mais atividade de projeto para construção; outros mais explicitamente para a 
fase de projeto. Independente da exata alocação, alguns trabalhos de projeto detalhado poderão ocorrer 
no nível de construção e este trabalho tende a ser direcionado pelas restrições impostas pelos 
problemas do mundo real que estão sendo endereçados pelo software.
Exatamente como trabalhadores de construção construindo uma estrutura física devem fazer 
adaptações de pequena escala em falhas não antecipadamente observadas nos planos de construção, 
os trabalhadores de construção de software devem fazer modificações em menor ou maior escala, 
adicionando detalhes do projeto de software durante a construção.
3.2. Linguagens de Construção
As linguagens de construção incluem todas as formas de comunicação pelas quais o homem pode 
especificar a solução de um problema executável para um computador. 
O tipo mais simples de linguagem de construção é a linguagem de configuração, na qual o engenheiro 
de software escolhe um limitado conjunto de opções predefinidas para criar uma nova ou customizada 
instalação de software. Os arquivos de configuração baseados em texto utilizados nos Sistemas 
Operacionais Windows e Unix são exemplos disso.
Linguagens de Programação são os mais flexíveis tipos de linguagem de construção. Elas também 
contêm um mínimo de informação sobre a área específica da aplicação e do processo de 
desenvolvimento, e assim, requerem mais treinamento e skill para usá-las eficientemente.
3.3. Codificação
As seguintes considerações são aplicadas para a atividade de codificação da Construção de Software:
• Técnicas para a criação de código fonte entendível, incluindo nomes e layout de código fonte
• Uso de classes, tipos enumerados, variáveis, constantes e outras entidades similares.
• Uso de estruturas de controle
• Manuseio de condições de erro – erros planejados e exceções (por exemplo, entrada de dados 
errados) 
• Prevenção de rupturas de segurança em nível de código (por exemplo, sobrecarga de buffer ou 
excessos no índice de array)
• Uso de recursos via uso de mecanismos de exclusão e disciplina no acesso serializado de recursos 
reusáveis (incluindo threads ou database locks)
• Organização do código fonte (em comandos, rotinas classes, pacotes ou outras estruturas)
• Documentação de Código
• Sintonização de Código
3.4. Testando a Construção
A construção envolve duas formas de teste, que são frequentemente realizadas pelo engenheiro de 
software que escreveu o código: 
• Teste de Unidade
• Teste de Integração
O propósito do teste de construção é reduzir o gap entre o tempo em que as faltas foram inseridas no 
código e o tempo em que as faltas foram detectadas. Em outros casos, os casos de teste podem ser 
criados antes do código ser escrito.
Testar a construção tipicamente envolve um subconjunto de tipos de teste, que serão descritos na área 
de Conhecimento Teste de Software.
Neste momento, testar a construção de software não inclui tipicamente teste de sistemas, teste alfa, 
teste beta, teste de stress, teste de configuração, teste de usabilidade ou outros mais especializados 
tipos de teste. 
3.5. Reuso
Como estabelecido na introdução de (IEEE1517-99): “Implementar reuso de software engloba mais do 
que criar e usar biblioteca de recursos. Requer a formalização de práticas de reuso pela integração de 
processos e atividades de reuso dentro do ciclo de vida do software”. Portanto, reuso é importante o 
suficiente na Construção de Software para ser incluído aqui como um tópico.
As tarefas relacionadas com o reuso na construção de software durante a codificação e testes são:
• Seleção das unidades reusáveis, banco de dados, procedimentos de teste ou dados de teste.
• Avaliação de código ou reusabilidade de teste
• Registro de informações de reuso em novos códigos, procedimentos de teste ou dados de teste.
3.6. Qualidade da Construção
Existem várias técnicas para assegurar a qualidade do código enquanto ele é construído. As técnicas 
primárias utilizadas para construção, incluem:
• Teste de Unidade e Teste de Integração
• Desenvolvimento Teste Antes (Test-First)
• Passo-a-passo de código
• Uso de assertivas
• Depuração
• Revisões técnicas
• Análise Estática
A técnica específica ou as técnicas selecionadas dependem da natureza do software que estar sendo 
construído, ou do skill do engenheiro de software que está realizando a construção.
As atividades de qualidade da construção são diferenciadas de outras atividades de qualidade por seu 
foco. As atividades de qualidade da construção focam em código e nos artefatos que são relacionados 
ao código: projetos de pequena escala — em oposição a outros artefatos que são menos diretamente 
conectados ao código, tais como, requisitos, projetos de alto nível e planos.
3.7. Integração
A principal atividade durante a construção é a integração de rotinas, classes, componentes e 
subsistemas construídos separadamente. Adicionalmente, um determinado software pode necessitar 
ser integrado com outros softwares ou hardwares.
As preocupações relacionadas com a integração da construção incluem o planejamento da seqüência 
em que os componentes serão integrados, criando plataformas para suportar versões intermediárias do 
software, determinando o grau de teste e qualidade do trabalho realizado em componentes antes deles 
serem integrados, e determinando pontos no projeto em que as versões intermediárias do software 
serão testadas.

Outros materiais

Perguntas Recentes