什么是反向工程和理解复杂软件的最有效方法?

时间:2018-01-29 10:53:20

标签: c++ uml

让我根据自己的情况为这个问题做准备:我最近被聘请参加实习,这将让我为已经包含大量代码的项目做出贡献。软件中包含各种模块和资源,计划理解这是一项相当艰巨的任务;甚至在哪里开始这件事。

最初的想法告诉我将程序的主要部分分解为UML图表,从高级别开始并逐步完成,但即使这样,也需要一些时间。我已经查看了初始代码中的许多位置,需要花费大量时间来理解算法,或者通过各种类跟踪初始函数以了解其目的。

加入新项目时是否有任何方法或提示?有关工具/软件的任何建议,有助于提高效率和理解力吗?

3 个答案:

答案 0 :(得分:2)

按顺序:

  1. 和老板谈谈。告诉他们你将做以下事情:

  2. 与用户交谈。软件实际上为他们做了什么?

  3. 与开发人员交谈。该软件如何运作?有文件吗?

  4. 阅读文档(如果有)。

  5. 与测试人员交谈。有单元测试吗?是否有回归测试。如果没有,那么就开始构建一些。

  6. 你可以从一开始就开始为(5)和(4)做出贡献。

答案 1 :(得分:1)

要克服许多源代码的复杂性,您可以使用:

  1. 静态源代码分析工具,请参阅参考资料here - (如了解,NDepend等)
  2. 可视化工具 - 查看列表here(如Tom Sawyer Visualization

  3. 您也可以使用源代码模块化。源代码模块化是在源代码上重新构建聚类概念。

    来自(see reference 1

    的参考文献
      

    软件模块化过程的目的是分区a   软件系统进入子系统提供了一个抽象的视图   软件系统的体系结构,其中子系统由一组软件工件组成,这些工件彼此协作   实现高级属性或提供高级服务   其余的软件系统。

         

    但是,对于大型复杂软件系统软件   模块化不能手动,因为它很大   不同工件之间的交互次数和大尺寸   的源代码。因此,完全自动化或半自动化的工具是   需要执行软件模块化。

    请参阅我的完整答案here

答案 2 :(得分:1)

要使用可视化图形和强大的代码查询语言来了解现有代码库,以便像代码库一样向代码库询问,您可以使用documentation进行C / C ++,CppDepend进行java和JArchitect对于dotnet。