O que torna um projeto grande? [fechadas]

32

Por curiosidade, qual é a diferença entre um projeto de tamanho pequeno, médio e grande? É medido por linhas de código ou complexidade ou o quê?

Estou construindo um sistema de troca e, até agora, tenho cerca de 1000 linhas de código para login / registro. Mesmo que haja muito LOC, eu não consideraria um projeto grande porque não é tão complexo, embora este seja o meu primeiro projeto, por isso não tenho certeza. Como é medido?

Jonathan
fonte
2
Sim ............ Mais complexidade significa mais linhas de código.
Robert Harvey
3
O primeiro KLOC é o mais difícil ...
Em seguida, você deve perguntar "O que torna um projeto complexo? Linhas de código? Camadas de abstração?"
Steven Evers
Você menciona 1.000 linhas de código como um "lote". Isso realmente não significa nada sem contexto. Eu trabalhei em vários projetos que tinham mais de um milhão de linhas de código. Também trabalhei no que eu chamaria de projetos "pequenos" que possuem apenas 50.000 linhas, mas devido à complexidade, eles não seriam considerados "pequenos" devido à quantidade de recursos necessários para projetar, codificar, e teste. Mas, na minha experiência pessoal, não consigo pensar em nenhum caso em que consideraria muito mais que 1.000 linhas. Menciono apenas isso para fornecer uma perspectiva para o seu primeiro projeto. Boa sorte!
TMarshall
Eu diria que a "grandeza" de um projeto depende mais de 1 fator de ...
kiwixz

Respostas:

20

Complexidade.

Quanto mais complexidade, mais difícil é aprender tudo no projeto.


fonte
5
Isso é semelhante a uma imo de tautologia. Um sistema complexo é sinônimo de sistema grande; a menos que se trate de complexidade do código, é possível que tudo esteja bem dissociado e tenha uma única responsabilidade; nesse caso, a complexidade do código pode ser realmente menor para grandes projetos. Portanto, dizer que complexidade significa que o projeto é grande não está realmente dizendo nada.
Henrik
... ou naturalmente qualquer outra medida de complexidade.
Henrik
@ Henrik, "sistema complexo" não é equivalente a "sistema grande".
1
Não, é um sinônimo.
Henrik
@ Henrik, eu não concordo. Um sistema pode ser grande, mas regular - ou seja, muitas coisas são resolvidas quase da mesma maneira, onde você pode prever como as coisas são feitas com base em sua experiência com o restante do sistema - e um sistema pode ser pequeno, mas ainda muito complexo.
34

Aproximadamente como eu concordaria, lembre-se de que isso é mais ou menos arbitrário. O "tamanho" do projeto em um composto de outros fatores, como complexidade, linhas de código-fonte, número de recursos / valor comercial, etc. Um produto muito pequeno pode oferecer uma grande quantidade de valor, etc. Dito isto:

  • 2m + sloc é um projeto grande a enorme. Estes são geralmente tão complexos que poucas ou nenhuma pessoa é 'fluente' em todo o sistema; em vez disso, a responsabilidade tende a ser modularizada ao longo da estrutura do código. Esses projetos geralmente oferecem um enorme valor comercial e podem ser de missão crítica. Às vezes, também estão sob uma forte carga de dívida técnica e outras preocupações herdadas.

  • O sloc de 100k a 2m é um projeto de tamanho médio. Esse é o meu meio termo: o projeto é complexo o suficiente para exigir algum conhecimento especializado e provavelmente acumulou algum grau de dívida técnica; é provável que também ofereça algum grau de valor comercial.

  • 10k - 100k é um projeto pequeno, mas não muito pequeno para ter complexidade suficiente para que você queira uma consideração especializada; se você é de código aberto, considere levar as pessoas em quem confia para revisar seus commits.

  • Qualquer coisa com menos de 10k sloc é pequena, na verdade. Isso não significa que ele não possa fornecer nenhum valor, e muitos projetos muito interessantes têm impressões muito pequenas (por exemplo, Camping, cuja fonte é ~ 2 kb (!)). Geralmente, os não especialistas podem gerar preocupações de valor - corrigir bugs e adicionar recursos - sem precisar saber muito sobre o domínio.

Joseph Weissman
fonte
4
Eu votaria duas vezes mais se pudesse. Os números são arbitrários, é claro, mas acho que as descrições do que diferentes graus de "grandeza" implicam são claras.
Eric Anderson
1
@EricAnderson É definitivamente mais fácil pensar nisso em termos de descrições do que na medida do sloc. Um programa Erlang de 100k sloc é facilmente uma ordem de magnitude "maior" que um programa C ++ de 100k sloc, baseado simplesmente no que ele faz, independentemente da facilidade com que o código é lido em um nível superior. A certa altura, ler o código não é tão difícil quanto lembrar o que está acontecendo dentro do sistema em um nível alto, porque existem muitos recursos e centros lógicos.
Zxq9 #
@ zxq9 Eu meio que discordo. É verdade que isso implica que a escolha do idioma poderia reduzir um grande projeto. O que costumava ser para grandes computadores agora é muito lento e o que costumava para grandes projetos de software pode ser trivial hoje em dia. O que é invariável é o custo / complexidade de um projeto. Embora o SLOC não seja uma medida perfeita, ele ainda está intimamente relacionado ao custo e à complexidade de um projeto de software. - Assim como as grandes máquinas não são necessariamente melhores, os grandes projetos de software também não. Se possível, divida um projeto em componentes independentes e escolha as tecnologias certas para torná-los ainda menores.
Yongwei Wu
14

O tamanho de um projeto é medido pelo grau de insustentabilidade.

mojuba
fonte
2
Isso é pessimista: D
Henrik
.... e essa medida é?
Casey Patton
1
@ Casey Patton, a medição é literalmente o custo de manutenção.
Mojuba
12

Complexidade que pode ser estimada de algumas maneiras:

  1. Despesas. Um projeto com um orçamento de US $ 10.000.000 + é provavelmente bem diferente de um projeto com menos de US $ 10.000, por exemplo. Isso pode incluir mão de obra, software, hardware e outros custos incorridos na execução de um projeto.
  2. Pessoal horas de trabalho para concluir o projeto. Vai demorar um milhão de horas ou algo mais? Isso também pode ser visto como um fator de linha do tempo em que alguns projetos podem levar anos que eu diria serem grandes em comparação com outros que podem levar menos de uma semana. Observe que o horário da pessoa pode ser enganador, como alguém pode pensar dobrando a equipe, para que haja o dobro do trabalho no projeto, em seguida, o cronograma pode ser dividido pela metade, o que raramente funcionaria em minha mente.
  3. Quantidade de hardware, outros sistemas e pessoas que usam o que o projeto está construindo. Se algo está atrelando a 101 sistemas, é provável que seja mais complicado do que se ficar sozinho e não se vincular a mais nada.

Embora os requisitos possam parecer uma boa maneira de medir isso, muitas vezes existem mais requisitos que serão encontrados à medida que um projeto é concluído, assumindo uma metodologia não-Waterfall, acredito.

JB King
fonte
11

Provavelmente, o tamanho de um projeto é melhor medido pelo número de requisitos que o sistema possui, onde os requisitos não podem ser mais reduzidos.

Claro, mais exigências principalmente significa mais complexidade, mas não é sempre o caso.

David_001
fonte
1
Isso pode não ser uma boa medida: os requisitos para compiladores e kernels de SO podem ser desproporcionalmente grandes em comparação com outros tipos de produtos.
Mjuba
2
@mojuba: "Big" é bastante um termo amplo, imagino que escrever um compilador ou um sistema operacional seria um projeto "grande"
David_001
@ David_001: pegue o compilador Turbo Pascal, f.ex., cujo tamanho binário em um ponto era de 70 kilobytes e, no entanto, o TP era uma linguagem de programação completa orientada a objetos. Nós nunca vimos as fontes, mas um executável de 70kb não pode ser um grande projeto.
Mjuba
@ David_001: não que eu discordo completamente de você em geral. Qualquer definição de um projeto "grande" será tão vaga quanto a própria palavra "grande".
Mjuba
@mojuba: Quando usei o Turbo Pascal, ele não era orientado a objetos.
precisa
4

Eu media o tamanho de um projeto pela dificuldade de ver todo o projeto como um único quadro geral. Por exemplo, tenho uma base de código exploratória / de prototipagem para um problema de aprendizado de máquina em que estou trabalhando. São apenas 5 mil linhas de código, mas parece um grande projeto. Existem inúmeras opções de configuração que interagem de maneiras imprevisíveis. Você pode encontrar praticamente todos os padrões de design conhecidos pelo homem em algum lugar da base de código para gerenciar toda essa complexidade. O design geralmente é subótimo porque a coisa cresceu muito com a evolução e não é refatorada com a frequência que deveria ser. Eu sou o único que trabalha nessa base de código, mas muitas vezes fico surpreso com a forma como as coisas interagem.

Por outro lado, um dos meus projetos de hobby tem cerca de 3-4x de código, e ainda parece muito menor porque é basicamente uma biblioteca de funções matemáticas que são ortogonais entre si. As coisas não interagem de maneiras complexas, e é bonito entender cada função isoladamente. É fácil ver o quadro geral na medida em que existe um, porque não há muito para ver.

dsimcha
fonte
3

Resposta arbitrária: Qual o tamanho do projeto, quanto você deseja ter feito com a fonte de eventos e SOA desde o início. Ou que os autores do sistema tenham lido o livro de Evan "DDD: Combatendo a complexidade no coração do software";)

Henrik
fonte
2

Compexidade e escopo

Complexidade e escopo Eu acredito que é o que determina o tamanho do projeto. No entanto, existem vários intangíveis que também podem afetar o tamanho de um projeto.

Exigências

A maior queda que enfrentei foi a falta de requisitos. Na minha situação específica, o gerente de vendas determinava os requisitos. Seu foco estava na venda ... tenho que conseguir a venda. Na sua opinião, o que o cliente estava pedindo não parecia tão complicado porque criamos algo semelhante. Requisitos vagas levam a empregos com preços baixos e expectativas excessivas.

Falta de um CCMU

O CCMU é o que chamo de " Coo Ca Moo " (entendimento mútuo claro e claro). Você precisa ter um CCMU com seu cliente.

Se você tiver um projeto pequeno com um CCMU ruim, poderá concluir o projeto 2,3,4 ou mais vezes. Assim, um simples trabalho de 20 horas se transforma em um projeto de 60 horas com uma equipe estressada e um cliente muito insatisfeito.

Escopo de fluência

Isso acontece com mais frequência do que você pensa. O cliente decide que, como você já está fazendo A, B e C, não deve ser tão difícil adicionar D ou até F. Se esse comportamento não for verificado, ele também poderá transformar um projeto pequeno em um projeto de tamanho médio. E, dependendo de como o gerente de vendas vendeu o trabalho, essas expectativas podem parecer "GRATUITAS" para o cliente.

Michael Riley - também conhecido por Gunny
fonte
1

É estranho, lendo muitas dessas respostas, acho que vejo o tamanho de um projeto de maneira muito diferente. Talvez seja o meu trabalho em uma grande corporação, mas tenho a tendência de ver o tamanho de um projeto como mais uma escala de sua visibilidade / conveniência para seus clientes (dependendo da sua área de trabalho, podem ser colegas de trabalho ou clientes reais).

Kavet Kerek
fonte
1

Complexidade é a resposta certa, mas como estimar?

Fatores são:

  1. Contagem de pontos de extensão
  2. Contagem de camadas de módulos (funções, classes, sistemas de classes, bibliotecas, bibliotecas compartilhadas, aplicativos, aplicativos de rede etc.)
  3. Contagem de dependências (plataformas incluídas)
  4. Contagem de interdependência de recursos.
  5. Recursos que não são de código necessários (incluindo gráficos / artes, scripts de direção - como scripts de design de nível - e outros recursos necessários para concluir uma versão do aplicativo).

Quanto mais você tem desses, mais complexo é o projeto.

Klaim
fonte
0

O LOC é notoriamente impreciso para muitas medições, mas acho que você está tentando medir algo que realmente não existe uma maneira precisa de medir. Talvez uma alternativa possa ser a complexidade ciclomática .

Em última análise, porém, acho difícil "quantificar" um projeto. É quase como perguntar como você determina se um cachorro é grande ou não. Não só existem várias maneiras de medir (massa, volume, etc.), mas eu pessoalmente não acho muito útil. A realidade é que meus critérios provavelmente serão algo como "Qual a probabilidade de fugir desse cachorro se o vir em um beco escuro?"

E, para que conste, geralmente não considero muito 1k linhas de código. Seria uma fatia considerável de código, mas não seria que muito no grande esquema das coisas. Claro, suponho que depende da linguagem. Por exemplo, 1k linhas de código é muito menos código em uma linguagem como C do que em uma linguagem como Pyhon.

Jason Baker
fonte