Category: Construção

A importância da boa documentação de software

Documentação de Software

/* Quando falamos da importância da boa documentação de software, em projetos desta natureza, a imagem acima é talvez a melhor ilustração. É uma imagem “batida”, mas é sempre bom revisitá-la. */

Em projetos de software, quando ha especificação antes da construção, é muito comum o nível da documentação não estar bom, e isso gerar efeitos muito ruins no projeto. (more…)

Acoplamento e Coesão em Módulos e Funcionalidades

Acoplamento e Coesão em Módulos e Funcionalidades

No último post falamos sobre Acoplamento e Coesão, que são medidas que devemos sempre levar em grande consideração no projeto de qualquer software.

E nada melhor que entender a teoria aplicada, ou seja, vê-la na prática. Vamos começar a refletir sobre isso.

Neste post vamos falar sobre Acoplamento e Coesão em Módulos e Funcionalidades.

Acompanhe esta série de posts, pois falaremos ainda sobre estas duas medidas aplicadas em vários outros modelos/artefatos do processo de produção de software.

Qualquer software – seja um aplicativo comercial, um sistema de gestão, um website, um aplicativo mobile ou até mesmo um jogo – é composto, basicamente, de Módulos e Funcionalidades.

Um software é um todo. Módulos são conjuntos dentro deste todo. Funcionalidades são elementos deste conjunto. (more…)

Acoplamento e Coesão

Acoplamento e CoesãoAcoplamento e Coesão talvez sejam as características mais importantes de qualquer sistema.

Muitos sistemas são como um Castelo de Cartas.

Num Castelo de Cartas, ao tirar uma carta da estrutura, a probabilidade de estragos no castelo é alta. Se a carta estiver na base (parte inferior) do castelo, é quase certo que o castelo irá desmoronar.

E nos sistemas, não é muito diferente. Todo profissional da área já passou por algum sistema onde corrigi-se um bug e aparecem outros vinte; exclui-se uma funcionalidade e outras várias param de funcionar ou apresentam defeitos etc. (more…)

UML – Relacionamento entre Classes – Agregação

UML - Relacionamento de Agregação entre ClassesVocê já se perguntou o que é o relacionamento de Agregação entre Classes?

É algo que parece abstrato, mas é mais simples do que imaginamos.

Mas o uso inadequado da Agregação gera Alto Acoplamento e Baixa Coesão na estrutura de um software.

Este é o terceiro post sobre relacionamentos entre classes na UML – aqui você pode ver o primeiro sobre Dependência entre Classes, e aqui pode ver o segundo sobre Composição entre Classes. (more…)

O que é Regra de Negócio?

Deduzo que antes do lançamento do microcomputador o termo regra de negócio era algo interpretado totalmente isolado dos softwares empresariais, ou talvez nem fosse um termo conhecido pelas pessoas.

Nos tempos atuais é difícil encontrar alguém que entende regra de negócio como algo isolado do software. Quando se fala “regra de negócio”, praticamente “sempre” é no contexto de um sistema.

É possível uma empresa mais arcaica viver sem software, mas não consegue viver sem regras de negócio.
(more…)

Sintaxe e Semântica – Forma e conteúdo na produção de software

Sintaxe e Semântica - Forma e conteúdo na produção de software

Sintaxe e Semântica

Tudo na vida possui forma e conteúdo. Mas um bom conteúdo com forma ruim é problema, e uma forma bacana com conteúdo ruim, pior ainda.

Projetar software é lidar com isso toda hora. Modelos, especificações, código: precisam de uma boa forma (sintaxe) e um bom conteúdo (semântica). Entender como ter qualidade na sintaxe e na semântica é fundamental!

Na Engenharia de Software quando falamos de sintaxe geralmente nos referimos à forma de escrever código fonte (palavras reservadas, comandos, recursos diversos).

Aprendemos na escola que sintaxe é algo sobre regras para escrever em linguagem natural na produção de textos, então é natural tal “analogia”; mas é pobre.
(more…)

Entendendo definitivamente o que é um Caso de Uso

O que seria um “caso de polícia”? Seria uma estória que descreveria uma cena policial, um crime ou investigação, por exemplo.

O que seria um “caso de novela”? Seria uma estória que descreveria uma trama, por exemplo, que se passa numa novela. Quando alguém quer contar alguma coisa a alguém, nos detalhes necessários, é comum dizer: “vou lhe contar um caso”.

O que é Caso de Uso? Vai na mesma linha. Tem como objetivo “contar a alguém”, descrever como será o uso de uma funcionalidade de um sistema.

A diferença é que, para contar este caso, existe um padrão para fazê-lo, um conjunto de regrinhas que serve para padronizar o “conto”, de maneira que o leitor da “estória que está sendo contada” – que poderá ser o programador do sistema que utilizará o caso de uso para codificar a funcionalidade ou o usuário que utilizará o caso de uso para validar a funcionalidade ou outro profissional – entenda a funcionalidade de uma maneira única, seguindo um padrão específico.
(more…)

O que é um Requisito Não-Funcional

O que é um Requisito Não-Funcional? Como o próprio nome diz, é uma “não funcionalidade”, ou seja, trata-se de algo que não é uma funcionalidade, mas que precisa ser realizado para que o software atenda seu propósito.

Existe uma definição propagada na literatura de Engenharia de Software que afirma que um Requisito Funcional define o que o sistema fará, e o Requisito Não-Funcional define como o sistema fará.

Alguns afirmam que um Requisito Não-Funcional especifica como um Requisito Funcional será implementado; também não é uma boa definição, pois uma funcionalidade teoricamente pode ser implementada sem nenhum Requisito Não-Funcional no projeto e isso não gerar ônus nenhum.

Acho que nenhuma dessas definições é suficiente, não dá para entender muito bem; tem outra que diz que requisitos não funcionais são atributos de qualidade para o sistema, essa eu já acho melhor, mas ainda um pouco subjetiva.

(more…)

Design Pattern Facade

Façade

Façade

Façade (ou Fachada, em português) é um termo muito oriundo da área de Arquitetura.

A grosso modo, podemos entender como a parte de fora de uma construção, que isola o mundo exterior o mundo interior.

Quando levamos o conceito para a Engenharia de Software, focando a arquitetura/estrutura de um sistema, do ponto de vista de semântica, a ideia é a semelhante.

Estruturalmente falando, isolamos partes do sistema (sub-sistema) com o uso de uma fachada (façade) e somente através dela (passando por ela) é que temos acesso ao sub-sistema.

/* Quando me refiro a “sub-sistema” pode se tratar de várias coisas: uma classe/objeto, um conjunto de classes/objetos [biblioteca, framework, API etc.], um módulo de um sistema, um conjunto de webservices etc. Neste post vamos nos referir sempre a sub-sistema, para padronizar o uso do termo no texto e facilitar o entendimento. */
(more…)

Boas práticas de Programação Orientada a Objetos – Semântica

Programação Orientada a Objetos - O que é um ObjetoQuando pensamos no conceito de Programação Orientada a Objetos – POO (na realidade é um paradigma) – é comum haver certa confusão sobre do isso realmente se trata.

Entender o conceito de Objetos, no contexto da programação e da modelagem, é fundamental para se entender “de fato” o que é Polimorfismo, Herança, Abstração e Encapsulamento, que formam a base da POO.
(more…)