Escolar Documentos
Profissional Documentos
Cultura Documentos
Instituto de Informática
Fábrica de Software
Goiânia
2021
Agradecimentos
Palavras–chave
Processos de Engenharia de Software, Processo de Desenvolvimento de
Software, Metodologia de Desenvolvimento de Software, Fábrica de Software.
Abstract
Keywords
Software Engineering Process, Software Develompent Process, Software
Develompent Methodology, Software Factory.
Sumário
Lista de Figuras 8
Referências Bibliográficas 61
C Glossário do Processo 77
Lista de Figuras
2.1.3 Atividades
As atividades transversais ao projeto podem ser consideradas como um
subprocesso do PDS que é executado ao longo de todo o projeto, como ilustra a
Figura 1.1. Há dois tipos básicos de atividades transversais, cada um envolvendo a
execução de diversas tarefas no projeto:
3.1.3 Atividades
A fase de Concepção do Software é definida como um subprocesso do PDS.
As atividades e tarefas desta fase do processo estão representadas na Figura 3.1:
• Objetivos da informação - Que dados serão necessários para seu perfeito fun-
cionamento? Como devem ser obtidos e organizados? Quem será responsável
por mantê-los atualizados?
• Funções e desempenho - Que funções o software deve desempenhar para trans-
formar dados em vantagem competitiva para a empresa? Existem característi-
cas especiais de desempenho do sistema que possam ser críticas para o negócio
da empresa?
4.1.3 Atividades
A fase de Elaboração do Software é definida como um subprocesso do PDS.
As atividades e tarefas desta fase do processo estão representadas na Figura 4.1:
projeto precisa ter um entendimento claro e completo dos requisitos para que os
produtos do projeto sejam consistentes com esses requisitos. Todavia, o documento
de especificação de requisitos não contempla todos os detalhes e expectativas das
partes interessadas. Além disso, requisitos podem ser alterados ao longo do projeto.
Por isso, é necessário manter comunicações contínuas entre clientes e a equipe do
projeto durante todo o ciclo de vida de desenvolvimento de software.
Nem todos os requisitos precisam ser especificados na fase de Elaboração, já
que requisitos podem ser adicionados, modificados e excluídos, mediante negociação
entre as partes interessadas, em qualquer fase do projeto. A fase de Elaboração tem
como meta especificar pelo menos 70% dos requisitos de maior prioridade para as
partes interessadas no projeto.
4.2 Orientações Metodológicas 41
sentantes dos stakeholders devem ajudar a equipe técnica na eliciação dos requisitos,
identificando todas as atividades que estão envolvidas no sistema e definindo os de-
tlhes dessas atividades: quem faz, por que faz, como faz, quando faz, quantas vezes
faz, quais dados usa e identificando, ainda, possíveis exceções e caminhos alternativos
na realização de cada atividade do sistema de informação.
De fato, uma ERS pode ser qualquer combinação dessas diversas alternativas
para documentação de requisitos. Qualquer que seja a forma adotada para especi-
ficação dos requisitos, é importante que essa especificação seja clara e demonstre
(a) a necessidade do cliente; e (b) a solução conceitual acordada para atender essa
necessidade.
Dessa forma, a especificação de requisitos deve ser flexível o suficiente para
que cada equipe, projeto ou organização defina a melhor maneira de realizá-la. Em
geral sistemas grandes são especificados por documentos textuais complementados
por descrições e modelos gráficos, enquanto sistemas menores são definidos apenas
por meio de casos de uso ou histórias de usuário do software e protótipos de interface
com o usuário.
A Especificação de Requisitos de Software pode ser documentada com base
no template proposto no Apêndice A.2.
5.1.3 Atividades
A fase de Construção do Software é definida como um subprocesso do PDS.
As atividades e tarefas desta fase do processo estão representadas na Figura 5.1:
6.1.3 Atividades
A fase de Transição do Software é definida como um subprocesso do PDS.
As atividades e tarefas desta fase do processo estão representadas na Figura 6.1:
análise estática automatizada por meio de ferramentas que avaliam a qualidade dos
artefatos.
Testes de aceitação do software são obrigatórios na execução da transição
de software e devem ser feitos em ambiente análogo ao de produção, utilizando
uma massa de dados realista e envolvendo a participação ativa de representantes da
organização adquirente do software.
Esses testes servem para avaliar a capacidade do software de cumprir suas
responsabilidades quanto usado em ambiente de produção, executando suas funções
corretamente e com o nível de desempenho e qualidade especificado para o software.
Eles devem estabelecer a confiança de que o sistema é adequado ao seu propósito,
atendendo as necessidades dos seus usuários, e que será útil para realizar as tarefas
planejadas e atingir os objetivos pretendidos.
Se houver um sistema legado que está sendo substituído a partir da
implantação do novo software, pode ser necessário conduzir uma operação paralela
do sistema legado e do novo sistema, comparando os resultados para assegurar que
o novo sistema apresenta, de fato, ganhos em relação ao sistema legado.
Referências Bibliográficas
[GIT]GIT. Git - a free and open source distributed version control system. https:
//git-scm.com/.
[Github 2020]Github. Github - Where the world builds software. 2020. Disponível em:
<https://github.com/>.
[IEEE 2012]IEEE. TR 24774 – Systems and Software Engineering – Life Cycle Manage-
ment – Guidelines for Process Description. [S.l.], 2012.
APÊNDICE A
Templates de Documentos do Processo
Identificação do Projeto
Projeto
{Nome do projeto}
Unidade Demandante
{Unidade que solicitou o projeto}
Gestor do Projeto
{Nome do Gestor do projeto}
Patrocinador
{Pessoa que fornece os recursos necessários para implementação do projeto}
Histórico de Registro
Versão Data Autor Descrição
Data do histórico: {Autor da
1.0 Elaboração do documento
dd/mm/aaaa} elaboração/modificação}
Data do histórico: {Autor da
{1.1} {Motivo da modificação}
dd/mm/aaaa} elaboração/modificação}
1. Justificativa
{Descrever o problema ou a oportunidade que justifica o desenvolvimento deste projeto. Pode
conter uma breve descrição da situação atual. Lembre-se de contextualizar a importância do
projeto para organização e, caso julgue necessário, explique os impactos deste projeto não
seja executado. Se o projeto é derivado de demanda legal ou solicitado pela alta administração,
essa informação deve ser ressaltada, pois impacta na prioridade do projeto.
A justificativa do projeto deve responder às seguintes questões:
● Por que o projeto é necessário?
● Quais os motivos que geraram a sua necessidade?
● Quais os benefícios?}
2. Objetivo do Projeto
{Descrever o que se pretende realizar para resolver o problema central ou explorar a
oportunidade identificada.
Para a correta definição do objetivo específico siga a regra “SMART”:
● Specífic (específico): Deve ser redigido de forma clara, concisa e compreensiva;
● Measurable (mensurável): O objetivo específico deve ser mensurável, ou seja, possível
de ser medido por meio de um ou mais indicadores;
● Agreed (acordado): Deve ser acordado com as partes interessadas (Stakeholders);
● Realistic (realista): Deve estar centrado na realidade, no que é possível de ser feito
considerando as premissas e restrições existentes;
● Time Bound (Limitado no tempo): Deve ter um prazo determinado para sua finalização}
3. Alinhamento Estratégico
{Relacionar com quais objetivos do Planejamento Estratégico vigente o projeto está
contribuindo. Podem ser citados objetivos estratégicos corporativos ou setoriais desde que
identificados.}
5. Escopo
{Descrever os resultados esperados e produzidos no projeto como, por exemplo, os produtos e
serviços a serem entregues, a documentação elaborada.}
6. Não-Escopo
{O que não será atendido pelo projeto: produtos e serviços não incluídos no escopo, o que não
será implementado pelo projeto.}
7. Premissas
{Premissas são previsões que são feitas e assumidas como verdadeiras para viabilizar a
continuidade do planejamento do projeto. Normalmente implicam em risco para a execução do
projeto, por isso devem ser monitoradas ao longo do projeto. Devem ser descritas em tópicos.}
8. Restrições
{Restrições são condições ou situações que limitam seu planejamento e desenvolvimento e
não podem ser eliminadas ou alteradas no decorrer do projeto. Devem ser descritas em tópicos
e acompanhadas de metas valoradas. Ex.: Orçamento predefinido ou datas impostas.}
9. Projetos Inter-relacionados
{Relacionar outros projetos que, de alguma forma, dependem ou fornecem dados, produtos
e/ou serviços para o projeto.}
Versão _XX.xx_
Aprovação
<Data>
<Data>
<Data>
<Data>
Histórico de Revisões
Data Versão Descrição Autor
Apêndice A 67
Tabela de Conteúdo
1. Introdução 4
1.1 Propósito 4
1.2 Escopo 4
1.3 Público-alvo 4
1.4 Definições, Acrônimos e Abreviações 4
1.5 Referências 4
1.6 Identificação e Localização do Documento 4
1.7 Organização do Documento 4
3. Chamada 5
3.1 Requisitos Funcionais 5
4. Requisitos Não-Funcionais 6
4.1 Usabilidade 6
4.2 Confiabilidade 6
4.3 Desempenho 6
4.4 Reusabilidade 6
4.5 Segurança 6
4.6 Acessibilidade 6
5. Requisitos de Interface 6
5.1 Interfaces com o Usuário 6
5.2 Interfaces de Hardware 7
5.3 Interfaces de Software 7
5.4 Interfaces de Comunicação 7
6. Requisitos de Documentação 7
6.1 Manual de Usuário 7
6.2 Ajuda On-line 7
7. Requisitos de Licença 7
1. Introdução
1.1 Propósito
Este documento especifica os requisitos contemplados pela ferramenta, fornecendo todas as informações
necessárias para o projeto, implementação em software, testes e aprovação do sistema.
1.2 Escopo
O documento descreve os casos de uso de uma ferramenta. Os requisitos especificados neste documento estão
relacionados com os casos de uso contidos no documento de especificação de casos de uso.
Explicitar o que o produto faz (e o que não faz). Descrever a aplicação (pontos relevantes, objetivos e metas).
1.3 Público-alvo
Incluir público alvo
1.5 Referências
Listar todos os documentos referenciados em qualquer outra parte do DR. Identificar cada documento por
título, número, data, autor e etc. Especificar a fonte a partir da qual o documento pode ser obtido
2.3 Restrições
Descrever quais itens podem limitar as possibilidades do desenvolvedor.
Políticas organizacionais, criticalidade da aplicação, considerações sobre segurança, ...
3. Chamada
Apêndice A 69
4. Requisitos Não-Funcionais
4.1 Usabilidade
[R14]
4.2 Confiabilidade
[R15]
[R16].
4.3 Desempenho
4.4 4.4Reusabilidade
A ser definido.
4.5 Segurança
A ser definido.
4.6 Acessibilidade
[R17]
5. Requisitos de Interface
5.3Interfaces de Software
5.4Interfaces de Comunicação
6. Requisitos de Documentação
7. Requisitos de Licença
[R24]
[R12]
[R9]
[R11]
[R10] [R13]
Apêndice A 71
Identificação do Projeto
Projeto
{Nome do projeto}
Unidade Demandante
{Unidade que solicitou o projeto}
Gestor do Projeto
{Nome do Gestor do projeto}
Patrocinador
{Pessoa que fornece os recursos necessários para implementação do projeto}
Histórico de Registro
Versão Data Autor Descrição
Data do histórico: {Autor da
1.0 Elaboração do documento
dd/mm/aaaa} elaboração/modificação}
Data do histórico: {Autor da
{1.1} {Motivo da modificação}
dd/mm/aaaa} elaboração/modificação}
1. Justificativa
{Descrever o problema ou a oportunidade que justificou o desenvolvimento deste projeto. Pode
conter uma breve descrição da situação atual. Lembre-se de contextualizar a importância do
projeto para organização e, caso julgue necessário, explique os impactos causados.
A justificativa deve responder às seguintes questões:
● Por que o projeto foi necessário?
● Quais os motivos que geraram a sua necessidade?
● Quais os benefícios gerados?
No orçamento?
Atendeu o escopo?
B.2 Jenkins
Jenkins é uma ferramenta de auxílio à construção de software que permite
automatizar as etapas de compilação e teste de software e estabelece uma base para a
integração e a entrega contínua do código [Jenkins Community]. A entrega contínua
de software trata de implementações e alterações contínuas no código, ou seja, um
conjunto de práticas cujo objetivo é garantir que alterações ou novas versões de
software sejam colocadas no ambiente de produção a qualquer momento.
A ferramenta Jenkins permite empregar histórias de usuários, testes de
unidade e atividades de garantia da qualidade, visando automatizar a preparação de
uma nova versão do software e realizar a integração e entrega contínua do código,
disponibilizando-o para uso. As principais características desta ferramenta são: builds
periódicos; testes automatizados; análise de código; identificação precoce de erros;
participação ativa da comunidade; e integração com outras ferramentas (via plugins).
Jenkins é um mecanismo de automação que oferece suporte a vários padrões
de automação. Para utilizar os recursos do Jenkins dentro de um fluxo de entrega
automatizada de software, primeiramente é preciso definir as etapas de construção. É
importante que o processo de desenvolvimento e entrega de software esteja definido
antes da construção do pipeline, identificando todas as etapas e atividades pelo qual
o produto passa desde o requisito definido pelo cliente até a entrega final do software
em ambiente de produção.
Um conceito essencial para uso de Jenkins em um projeto de software é o
de (pipeline), que é um conjunto de plugins que oferece suporte à implementação e
integração de entrega contínua. Um pipeline de entrega contínua é uma expressão au-
tomatizada do processo que obtém o software do controle de versão e o disponibiliza
para seus usuários e clientes. Cada mudança no software (comprometida no sistema
de gestão de código fonte) passa por este processo complexo para ser liberada, en-
volvendo a construção do software de maneira confiável e repetível, encaminhando
o software em "construção" por vários estágios de teste e implantação.
Apêndice B 75
B.3 SonarQube
A análise estática de código é um processo de avaliação da qualidade
de um software ou componente, considerando sua forma, estrutura, conteúdo ou
documentação. A inspeção de código é uma técnica de análise estática que se baseia
no exame visual dos produtos de desenvolvimento para detectar erros, violações dos
padrões de desenvolvimento e outros problemas. Apesar de comprovadamente eficaz
na detecção de defeitos, a inspeção é uma técnica que consome muitos recursos,
notadamente o tempo de profissionais treinados e experientes. Ferramentas para
apoio à inspeção de software contribuem para a eficiência desta técnica.
SonarQube [SonarSource S.A] é uma plataforma de código aberto desenvol-
vida para realizar inspeção contínua da qualidade do código. Ela permite executar
revisões automáticas, com análise estática do código, para detectar defeitos e odores
de código em mais de vinte linguagens de programação.
A plataforma disponibiliza relatórios sobre código duplicado, padrões de
codificação não contemplados, cobertura de código de testes de unidade, comple-
xidade de código, comentários, bugs e vulnerabilidades de segurança. Ela permite,
ainda, registrar o histórico de métricas e fornece gráficos de evolução da qualidade
do código.
A ferramenta tem integração automatizada com diversos tipos de sistemas
de apoio ao desenvolvimento de software, como ferramentas para gestão de depen-
dências (como Maven, Ant, Gradle e MSBuild) e ferramentas de integração contínua
de código (como Jenkins, Bamboo e Hudson).
Em um processo de desenvolvimento apoiado por SonaQube, os desenvol-
vedores implementam e mesclam código fonte em seus respectivos ambientes de
trabalho e fazem check-in de seu código no repositório de gestão de código fonte. A
ferramenta de integração contínua (Jenkins, por exemplo) verifica, constrói e executa
testes de unidade, acionando a ferramenta SonarQube integrada para analisar os re-
sultados. Esta ferramenta posta os resultados no servidor SonarQube que fornece
Apêndice B 76
feedback aos desenvolvedores por diferentes meios, tais como a interface SonarQube,
e-mail ou notificações no IDE, dependendo do tipo de versão da ferramenta utili-
zada. O SonarQube está disponível gratuitamente sob a licença GNU Lesser General
Public License, mas existe versões corporativas, com licenciamento pago.
APÊNDICE C
Glossário do Processo
Laudo: documento que contém um parecer técnico refletindo uma opinião espe-
cializada sobre um determinado assunto. No processo de software, laudos são ti-
picamente emitidos nas atividades de monitoramento da execução do projeto de
desenvolvimento de software.
Liberação de Software: disponibilização de uma baseline de software para uso
em ambiente de produção (liberação externa) ou em ambiente de desenvolvimento
(liberação interna).
Linha de Base: vide Baseline.
Manter: verbo usado para representar ações de criar, consultar, excluir ou alterar
alguma entidade ou informação, de modo a manter esta entidade ou informação
atualizada e consistente com o mundo real representado.
Metodologia de desenvolvimento de software: uma especificação de processo,
associada aos produtos de trabalho a serem usados e gerados, além da designação
de papéis de pessoas e definição de ferramentas e padrões aplicados em um esforço
de desenvolvimento de software [ISO/IEC/IEEE 2017].
Parte Interessada no Projeto: indivíduos, grupos ou organizações cujas neces-
sidades devem ser satisfeitas pelo projeto ou que são potencialmente afetados pelos
resultados do projeto de desenvolvimento de software. Deve haver uma definição
explícita de representante para cada parte interessada no projeto.
Processo de Desenvolvimento de Software: um processo de Engenharia de
Software que identifica necessidades de usuários e constrói um produto de software
visando ao atendimento destas necessidades [ISO/IEC/IEEE 2017].
Processo Padrão: ativo de processo organizacional que compreende um conjunto
de definições básicas obrigatórias que orientam os trabalhos de uma organização,
garantindo a homogeneidade na realização desses trabalhos.
RUP: sigla para Processo Unificado da Rational (ou Rational Unified Process). Pro-
cesso de desenvolvimento de software criado pela empresa Rational [Kruchten 2004]
e que se tornou uma das principais referências para definição deste tipo de processo.
Software: um sistema de documentos que define, para um dado problema computa-
cional, uma solução executável em (pelo menos) uma máquina alvo. Cada elemento
(programas, dados e especificações) que compõe o software é um documento que des-
creve ou prescreve algum aspecto do sistema formado pelo software. Um documento
necessário em qualquer software é o seu código fonte.
Stakeholder do projeto: vide parte interessada no projeto.
Transição de Software: fase do desenvolvimento de software que avalia a maturi-
dade de uma baseline de configuração de software gerada no projeto, determinando
a sua adequação para ser utilizada no ambiente de produção.
Apêndice C 80