Desenvolvimento de Software

Em 2008 escrevi um post com boas praticas de desenvolvimento de software, após alguns anos esta na hora de dar uma revisada nas dicas de Desenvolvimento de Software, pois as linguagens e ferramentas evoluíram.

Muitas das dicas acredito que são aplicáveis a maioria das linguagens atuais,ou seja, se aplicam a qualquer desenvolvimento de software,

outras dicas são mais direcionadas para o Microsoft .Net.

Durante esses últimos anos pude colocar em pratica diversas abordagens de desenvolvimento software, porém algumas boas praticas sempre me ajudarem independente do ambiente e frameworks utilizados.

Você deve conhecer e adotar frameworks para não reinventar a roda, mesmo após adotar um framework é bom ficar sempre atento para atualizações, pois um framework pode ser o melhor hoje, porém após algum tempo podem surgir novos frameworks com melhor velocidade e qualidade.

Outro ponto importante é verificar diferentes opções, pois para alguns casos um framework pode ser melhor que outro. O desenvolvimento de software deve estar sempre evoluindo, o que pode não ser possível hoje daqui a seis meses pode ser muito simples de ser realizado.

Todo sistema precisa de alguns componentes básicos

  • Auditoria de Ações executas
  • Log de Erros
  • Controle de Acesso
  • Envio de mensagens email, sms, etc.
  • Acesso a dados
  • Geração de Relatórios

Estrutura do Seu Sistema

Uma boa estrutura de projetos é quando você baixa sua solução em uma maquina nova e a mesma compila sem nenhuma configuração adicional.

  • Tenha uma padronização de diretórios para seus projetos
    • Diretório para Dlls externas
    • Diretório para Scripts de Banco de Dados.
    • Diretório com as Documentações do Projeto

Melhorando seu Código

  • Não reinvente a roda, procure utilizar Frameworks para problemas conhecidos
  • Mantenha seu código simples, com métodos pequenos menos de 10 linhas é bom e menos de 5 linhas é ótimo.
  • Utilize testes unitários para as partes importantes do seu sistema
  • A preocupação com a qualidade deve ser aplicada a toda a parte do seu sistema como SQL, HTML e CSS.
  • Scripts de banco devem ser desenvolvidos para não ocasionar erro se forem rodados mais de uma vez.
    • Ao adicionar uma tabela deve ser verificada se tabela existe
    • Ao adicionar uma coluna deve ser verificado se a coluna existe na tabela.
    • Ou seja, cada alteração deve ter uma verificação para não ocorrer erro
    • O mesmo cuidado deve existir para inserts, não sendo necessário para deletes e updates.

Precisa de Ajuda para implementar essas dicas na sua empresa entre em contato.

O Poder da Simplicidade

Para começar a produzir um código melhor ao invés de começar a usar arquiteturas mirabolantes, frameworks maravilhosos. Comece com princípios simples:

  • Utilize nomes autoexplicativos para suas variáveis, métodos e classes.
  • Mantenha cada método com menos de 10 linhas, com somente uma única responsabilidade
  • Passe as dependências como parâmetros na construção do objeto ou chamada do método.
  • Não escreva o mesmo trecho de código duas vezes

Com esses 4 princípios básicos você automaticamente aos poucos precisara utilizar técnicas, arquiteturas e frameworks para resolver as suas necessidades/problemas.

  • Nunca crie nomes abreviados ou com nomes genéricos
    • Qualquer pessoa deve saber a finalidade da variável ou método apenas pelo nome.
    • A melhor documentação é um código bem feito
    • Toda regra tem sua exceção como: RG, CPF, CEP,etc.

O que não é medido não pode ser melhorado

Como podemos melhorar algo senão sabemos o que esta errado, podemos ter vários pontos de melhorias:

  • Aumentar velocidade da equipe
  • Diminuir quantidade de bugs por entrega
  • Melhorar qualidade do software
  • Melhorar a qualidade do código
  • Diminuir o tempo de resolução de bugs
  • Melhorar as estimativas

Então precisamos primeiro saber quais são nossos problemas, para depois atacar as causas, pois não podemos tentar resolver a melhoria das nossas estimativas usando uma técnica/ferramenta que foi criada para melhorar a qualidade do código. Seria como um maratonista passar a realizar exercícios criados para um corredor de 100 metros com o intuito de melhorar sua resistência.

Voltando aos problemas citados acima, alguns podem ser resolvidas com engenharia de software outros com metodologias/frameworks de desenvolvimento e por fim outros necessitam de ferramentas.

Para aumentar a qualidade do software e velocidade da equipe podemos usar Scrum com XP e/ou TDD por exemplo.

Para melhorar as estimativas Scrum pode ajudar e também podemos usar pontos de função, em ambos os casos quanto maior o histórico da equipe melhor sera a estimativa.

A melhoria de código e do software requer aplicação de boas praticas de desenvolvimentos, princípios SOLID e design pattner. Podemos incluir também TDD e XP.

O ciclo de vida do software também deve ser gerenciado com ferramentos como TFS, podendo assim garantir que somente software testado possa ser enviado para o controle de versão.

 

 

SQL Azure – Scritps uteis

Ao utilizar o SQL Azure não temos todas as procedures que costumamos ter no SQL Server.

 

1) Para verificar o espaço usado ao invés da procedure sp_spaceused  é necessário usar o script abaixo:

select sys.objects.name, sum(reserved_page_count) * 8.0 / 1024
from sys.dm_db_partition_stats,
sys.objects
where sys.dm_db_partition_stats.object_id = sys.objects.object_id
group by sys.objects.name

 

2) Ao invés da procedure SP_Who precisamos usar o script http://sqlconcept.com/2012/11/23/fiddling-with-sql-azure/

3) Outra procedure muito importante que não temo é a sp_depends que lista as dependências de um objeto.

Página com a lista completas de procedures que o SQL Azure não suporta http://msdn.microsoft.com/en-us/library/windowsazure/ee336237.aspx#catalog

ASP.Net MVC Problema criando vários botões de submit com Html.ActionButton

Se você tentar usar o Html.ActionButton para criar um botão dentro de um BeginForm será criado outro formulário e o seu botão não vai funcionar como você deseja, que é redirecionar para uma action especifica.

Para isso você pode usar o link abaixo que tem uma implementação.
http://blog.ashmind.com/2010/03/15/multiple-submit-buttons-with-asp-net-mvc-final-solution/

Ou você pode usar a solução abaixo que esta no comentário da solução acima que eu considero bem melhor. “No comentário ele usou jquery, mas acho que não é necessário se você tiver somente um botão.”

<input data-action=”” type=”submit” value=”Botão” class=”btn primary” onclick=” this.form.action = $(this).data(‘action’); “>

A magica foi usar o data-action e o javascript do onclick que muda a url do form.

Visual Studio não lista novos testes

Maquina nova sempre traz surpresas, comecei a criar vários testes e os novos testes não apareciam por nada, dando uma pesquisada descobri essa configuração abaixo, que deve estar desmarcada para que os testes sejam listados assim que criados.

Tools > Options > Test Tools > Test Project > “Disable background discovery of test methods“.

Asp.Net 4 perdendo variaveis de sessão

Recententemente um sistema meu começou apresentar o comportamento de perder a sessão sempre que o usuário gerava um relatório, os relatórios criavam arquivos físicos no diretório app_data, pesquisando sobre o assunto verifiquei muita gente com esse problema. No meu caso resolvi o problema mudando a sessão de inproc para StateServer, embora pudesse alterar a criação do relatório para criar em memória não acho que compensaria financeiramente. Abaixo alteração do web.config.

<sessionState mode="StateServer"  stateNetworkTimeout="900" timeout="900" useHostingIdentity="true">  </sessionState>

Existe diferentes causas para esse problema:

  • Response.Redirect após alterar uma variável de sessão
  • Criar arquivos  , no meu caso  poderia ser esse ou o Antivirus
  • Antivirus
  • Mais alguns motivos nos links abaixo:

http://blogs.msdn.com/b/akshayns/archive/2008/09/29/common-reasons-for-the-session-loss-issue-in-asp-net-applications.aspx

http://support.microsoft.com/kb/316148

http://www.justskins.com/forums/losing-session-variables-129621.html


Entity Framework – Erro “An object with a null EntityKey value cannot be attached to an object context”

Quando você estiver utilizando EF e tentar atualizar um objeto que não foi criado do banco, com um post do mvc por exemplo, com Attach e SaveChanges você recebe a mensagem de erro

“An object with a null EntityKey value cannot be attached to an object context”  , para contornar isso você pode utilizar o método

context.AttachTo("Cargos", DadosCargo);
context.ObjectStateManager.ChangeObjectState(DadosCargo, EntityState.Modified);
context.SaveChanges();

HashTable Contains com Case Insensitive

Quando utilizamos um hashtable com assinatura padrão como está abaixo, quando utilizamos contains para verificar se uma chave existe a comparação é case sensitive.

Hashtable valores = new Hashtable();

Para tornar o Contains Case insensitive basta instancia-lo conforme  abaixo:

Hashtable valores = new Hashtable(new CaseInsensitiveHashCodeProvider(new CultureInfo(“pt-BR”)), new CaseInsensitiveComparer(new CultureInfo(“pt-BR”)));

Para mais detalhes veja http://msdn.microsoft.com/en-us/library/system.collections.caseinsensitivehashcodeprovider(v=vs.100).aspx

http://msdn.microsoft.com/en-us/library/84h4y0ta.aspx

ASP.NET MVC Erro conversão POST “The parameter conversion from type ‘System.String’ To Type X “

Comecei a receber esse erro numa nova tela e fiquei meio confuso no começo, depois de duas horas encontrei a resposta no link http://stackoverflow.com/questions/7983023/the-parameter-conversion-from-type-system-string-to-type-x-failed-because-n

Basicamente o nome  do seu parâmetro não pode ter o mesmo nome  de uma propriedade do objeto.

Tinha método  onde o nome  do parâmetro era cliente alterei para DadosCliente

De
  public ActionResult NovoCliente(Pessoas Cliente)
Para
  public ActionResult NovoCliente(Pessoas DadosCliente)