是什么使项目变大?[关闭]


32

出于好奇,小型,中型和大型项目有什么区别?它是通过代码行或复杂性来衡量的还是什么?

我正在建立一个物物交换系统,到目前为止,大约有1000行代码用于登录/注册。即使有很多LOC,我也不会认为这是一个大项目,因为它不是那么复杂,尽管这是我的第一个项目,所以我不确定。如何测量?


2
是的............更多的复杂性意味着更多的代码行。
罗伯特·哈维

3
第一个KLOC是最难的...

接下来,您必须问“什么使项目变得复杂?代码行?抽象层?”
史蒂文·埃弗斯

您将1000行代码称为“很多”。如果没有上下文,那真的意味着什么。我参与了多个项目,这些项目的代码行数超过一百万。我还从事了只有50,000行左右的“小型”项目的工作,但是由于复杂性,由于设计,编码,并测试。但是以我的个人经验,我想不出我认为有1000条线路很多的情况。我只想为您的拳头项目提供一些观点。祝好运!
TMarshall,2011年

我要说的是,一个项目的“量纲”依赖于多个因素1 ...
kiwixz

Answers:


20

复杂。

复杂程度越高,学习项目中所有内容的难度就越大。


5
这类似于重言式imo。复杂的系统是大型系统的代名词。除非讨论代码复杂性,否则很可能使所有内容都很好地分离并负有单一责任,在这种情况下,大型项目的代码复杂性实际上可能更低。因此,说复杂性意味着项目很大,实际上并没有说什么。
亨里克

...或者自然而然地采用任何其他复杂性衡量标准
亨里克·

@Henrik,“复杂系统”不等同于“大型系统”。

1
不,这是同义词。
亨里克

@亨里克,我不同意。一个系统可以很大但很规则-即可以用几乎相同的方式解决很多事情,在这里您可以根据对系统其余部分的经验来预测事情的完成方式-一个系统可以很小但仍然很复杂。

34

我大致如何看待事情-请记住,这或多或少是任意的。项目的“大小”由其他因素组成,例如复杂性,代码的源代码行,功能/业务价值的数量等。非常小的产品可以交付大量的价值,等等。

  • 2m + sloc是一个大型项目。这些通常是如此复杂,以至于只有很少一部分人能熟练地使用整个系统。相反,责任倾向于按照代码的结构模块化。这些项目通常提供巨大的业务价值,并且可能是关键任务。他们有时还承受着沉重的技术债务和其他遗留问题的压力。

  • 100k-2m sloc是一个中型项目。这是我的中间立场:该项目非常复杂,需要一些专家知识,并且可能已经累积了一定程度的技术债务;它也可能带来一定程度的商业价值。

  • 10k-100k是一个很小的项目,但又不能太小而没有足够的复杂性,您需要专家考虑;如果您是开源的,请考虑让您信任的人来审查您的提交。

  • 少于1万个sloc的东西确实很小。这并不意味着它根本无法提供任何价值,而且许多非常有趣的项目都留下了很小的烙印(例如Camping,其来源约为2 kb(!))。非专家通常可以引起对价值的关注-修正错误并添加功能-无需对域有太多了解。


4
如果可以的话,我会投票两次。这些数字当然是任意的,但我认为有关“程度”不同程度的含义的描述是不明确的。
埃里克·安德森

1
@EricAnderson从描述的角度来看,这绝对比在sloc的度量上容易。一个100k sloc的Erlang程序很容易比一个100k sloc的C ++程序“大”一个数量级,这只是基于它的作用而不论代码在更高级别上的可读性如何。在某个时候,阅读代码并不像仅仅记住系统内部正在发生的事情那样困难,因为有许多功能和逻辑中心。
zxq9

@ zxq9我有点不同意。是的,这意味着语言选择可以使大型项目变小。如今,过去用于大型计算机的速度太慢了,而过去用于大型软件项目的速度已经很微不足道了。不变的是项目的成本/复杂性。尽管SLOC并不是一个完美的衡量标准,但它仍与软件项目的成本和复杂性密切相关。就像大型计算机不一定更好一样,大型软件项目也不一定。如果可能的话,将项目分成独立的组件,然后选择合适的技术将它们缩小。
吴永威


12

可以通过几种方式估算复杂度:

  1. 预算。例如,预算为10,000,000美元以上的项目可能与10,000美元以下的项目有很大不同。这可能包括人工,软件,硬件和执行项目时产生的其他成本。
  2. 完成项目所需的工作时间。会花费一百万小时还是其他时间?这也可以看作是时间因素,其中一些项目可能要花几年的时间,而有些项目则需要不到一周的时间。请注意,人员时间可能会像有人认为的那样令人误解,因为员工人数会增加一倍,因此该项目的工作量是工作量的两倍,然后将进度表切成两半,这在我看来很少起作用。
  3. 使用该项目正在构建的硬件,其他系统和人员的数量。如果将某些东西绑定到101个系统中,那么它可能会更加复杂,如果它独立存在并且不绑定任何其他东西。

虽然听起来听起来是衡量此需求的一种不错的方法,但是在我相信采用非瀑布方法论的情况下,完成一个项目通常会发现更多的需求。


11

一个项目的规模最好用系统的需求数量来衡量,而这些需求无法进一步降低。

当然,更多的需求通常意味着更多的复杂性,但并非总是如此。


1
这可能不是一个好方法:与其他类型的产品相比,对编译器和OS内核的需求可能会过大。
mojuba 2010年

2
@mojuba:“大”是一个广义术语,我想写一个编译器或一个操作系统将是一个“大”项目
David_001 2010年

@ David_001:以Turbo Pascal编译器f.ex.为例,它的二进制文件大小只有一点,即70 KB,而TP是一种成熟的面向对象编程语言。我们从未见过源代码,但是70kb的可执行文件并不是一个大项目。
mojuba 2010年

@ David_001:并不是我完全不同意你的看法。“大”项目的任何定义都将与“大”这个词本身一样模糊。
mojuba

@mojuba:当我使用Turbo Pascal时,它根本不是面向对象的。
David Thornley,2010年

4

我通过将整个项目看成一个单一的整体图有多么困难来衡量一个项目的规模。例如,对于正在研究的机器学习问题,我有一个探索性/原型代码库。它只有5k行代码,但是感觉就像是一个巨大的项目。有大量的配置选项以不可预测的方式交互。您可以在代码库中的某个地方找到几乎已知的每种设计模式来管理所有这些复杂性。设计通常不是最理想的,因为事物是通过进化而增长的,并且没有得到应有的重构。我是在此代码库上工作的唯一人,但是我常常对事物之间的交互方式感到惊讶。

另一方面,我的一个爱好项目的代码大约是其3-4倍,但感觉却要小得多,因为它基本上是一个相互正交的数学函数库。事情不会以复杂的方式进行交互,因此孤立地理解每个功能是很不错的。看到一张大图很容易,因为没有太多可看的。


3

任意答案:该项目有多大,您希望从一开始就使用事件源和SOA完成多少工作。或者该系统的作者已经阅读了Evan的书“ DDD:解决软件核心中的复杂性”;)


2

共性与范围

我认为复杂性和范围决定了项目的规模。但是,有几种无形资产也会影响项目的规模。

要求

我面临的最大失败是缺乏需求。在我的特殊情况下,销售经理正在确定需求。他的重点是销售...得得到销售。在他看来,客户的要求似乎并不那么复杂,因为我们已经建立了类似的东西。含糊的要求导致工作价格低估,并超出了期望值。

缺乏CCMU

CCMU是我所说的“ Coo Ca Moo ”(清除完全的相互理解)。您需要与客户建立CCMU。

如果您的小型项目的CCMU较差,那么您可以完成2,3,4或更多次该项目。这样,一个简单的20个小时的工作就变成了一个60个小时的项目,需要压力很大的员工和非常不满意的客户。

范围蠕变

这种情况比您想像的更多。客户认为,既然您已经在进行A,B和C,添加D甚至F就不那么困难。如果不检查此行为,它也可以将一个小项目变成一个中等大小的项目。根据销售经理出售工作的方式,这些范围预期对客户可能看起来“免费”


1

奇怪的是,阅读很多这些答案后,我发现我对项目的规模有很大的不同。也许这是我在一家大公司中工作,但我倾向于将项目的规模视为对其客户可见性/期望程度的更大程度(取决于您的工作领域,这些人可以是同事或实际的付费客户)。


1

复杂性是正确的答案,但是如何估算呢?

因素有:

  1. 扩展点数
  2. 模块层数(功能,类,类系统,库,共享库,应用程序,网络应用程序等)
  3. 依赖项计数(包括平台)
  4. 具有相互依赖性计数。
  5. 必要的非代码资源(包括图形/艺术,驾驶脚本(如关卡设计脚本)以及完成应用程序版本所需的其他资源)。

您拥有的越多,项目就越复杂。


0

众所周知,LOC 在很多测量中都不准确,但我认为您正在尝试测量的东西实际上是没有准确的测量方法的。也许替代方法可能是循环复杂性

但最终,我认为项目的“规模”很难量化。这几乎就像问您如何确定狗是否大。不仅有多种测量方法(质量,体积等),而且我个人认为它不是很有用。现实情况是,我的标准可能类似于“如果我在黑暗的小巷中看到它,我有多可能从这只狗身上逃跑?”

出于记录,我通常不会认为1k行代码太多。这将是相当大的代码块,但是在宏大的方案中并不会那么多。当然,我想这确实取决于语言。例如,1K行代码是在像C语言比在像Pyhon语言更少的代码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.