读取SQLite源代码是IMO不可能完成的任务。但是,它是一个非常有用的非常复杂的软件(毕竟它是一个完善的嵌入式数据库),可以从其他代码中下载,编译和使用,并且它会不断更新。
人们如何管理和维护这种极其复杂且难以阅读的代码?
读取SQLite源代码是IMO不可能完成的任务。但是,它是一个非常有用的非常复杂的软件(毕竟它是一个完善的嵌入式数据库),可以从其他代码中下载,编译和使用,并且它会不断更新。
人们如何管理和维护这种极其复杂且难以阅读的代码?
Answers:
复杂和复杂之间有很大的区别。以下链接对此进行了总结。:)
http://codebetter.com/blogs/dru.sellers/archive/2009/09/25/complex-vs-complicated.aspx
从更个人的角度来说,我使用的代码库超过一百万行。我从第1行一直到它的当前状态。您越熟悉(在代码中阅读越久),就越容易。我无法告诉您每一行的功能,但是可以告诉您开始寻找给定的任务或错误。它是自然而然的。
这个故事的寓意是,就像编程世界中的任何事物一样,它也需要时间。如果您希望了解SQLite并只是了解和理解它,那么您就在自欺欺人。需要花时间弄清楚一切如何协同工作。好的代码和坏的代码之间的区别是该过程需要花费多长时间。
最后,一些开发人员没有能力跳入代码库并开始弄清楚它。许多人会因代码库的庞大规模或体系结构而感到不知所措。其他人只要跳进去就不会有问题。这完全取决于开发人员的优势。
对于SQLite的特定情况,他们选择在开发和维护中使用的主要工具是自动化测试。他们以测试套件中100%的覆盖率(分支覆盖率,而不是语句覆盖率)为荣。根据他们的说法,它是世界上测试最好的软件产品之一。因此,他们可以立即知道自己添加或更改的内容何时导致回归,并因此而无所畏惧地发展。
http://sqlite.org/testing.html
令人震惊的数字- 测试行数是生产代码的约640 倍。
编辑:看来这个问题已经死了!一年多以后,同一页报告他们的测试代码行是生产的1177倍!
您无需对整个项目有深入的了解即可维护它。通常,使用大型,复杂的软件,人们将拥有自己要照顾的特定“区域”,并且对系统的其余部分只有“通过”的知识。
SQLite的实际上是对“大型软件项目”的规模相对较小,但如果你看看像在Windows操作系统中,你会看到人们谁刚刚工作的内核,人谁只是在外壳上工作,人谁只是工作在Internet Explorer上,那些只在Window Manager上工作的人等等。在“ shell”中工作的人将无法一口气修复内核中的错误。
这些项目随着时间的推移而发展还有一个好处:它们并不总是从复杂的项目开始。这意味着新开发者通常可以由更有经验的开发者进行“培训”。
当您加入一个庞大的开发人员团队时,将为您提供要处理的项目的特定方面(可能是错误或新功能),并且在前几个迭代中您将有另一个开发人员成为您的“伙伴”。您的好友将对您正在工作的区域有很好的了解,并可以帮助您找到自己的出路。
对于像SQLite这样的开源项目,实际上要困难一些,因为现有开发人员没有动力去“培训”新开发人员。因此,您会发现自己更多了。但是您仍然可以在开发者论坛或邮件列表上找到帮助(例如,仅发布诸如“我想实现这样的功能”或“我发现了XYZ错误,该从哪里开始寻找?”之类的问题,那么您很可能会得到帮助。某种形式的帮助。
其他答案中未提及的一件事是“它们自然而然地出现”。大多数人都想编写好的代码,但是他们习惯于编写坏的代码。我遇到的一些程序员自然是LINEAR思想家+有时非常有意识地他们提出了复杂的解决方案。在工作需要的时候,大多数这样的人不会花时间阅读或学习他们所学的书。