Android/iOS 的代码审计

Code Audit for Android/iOS

我刚刚接到一项工作任务,要帮助审核移动应用程序的代码库。我不是移动应用程序程序员,虽然我已经做了很多年的软件开发人员,但对移动应用程序一无所知。我想知道是否有任何提示或工具可用于此代码审核。

我已经看到 the replies to this older post 的 Java EE 应用程序,它不能应用于我的案例,因为它们主要基于让 maven 构建应用程序,而在我的案例中,它们使用 Gradle。此外,这些回复来自 2011 年,也许还有更新的回复,我真的很高兴听到。

在我看来,任命一个没有目标环境经验的人本身就是一派胡言,所以我要在这里质疑管理层。

我希望您至少了解这些应用程序的编写语言:对于Android和[=47可能Java =] for iOS(你的问题没有提到你过去的经验涉及哪些技术)。如果没有,您只能对注释、文件大小以及可能的一些命名约定发表评论,与真正的审计相比,这没什么意义。

除了编程语言之外,iOS 和 Android 的设计方式非常不同,具有不同的约定和模式。实际上,我认识的人中很少有人在这两种环境中都非常出色,这是有原因的:这些是​​不同的世界,您可以轻松地在每个世界上花费全部时间来学习 API、公共库、设计理念、变通方法对于常见问题,并了解一些内部工作原理。

我不知道你需要多少时间来完成这个任务,但我建议你学习如何在目标环境上编写一个基本的应用程序,并了解关键组件。

我的做法一般是:

  • 从团队中收集一些背景信息
  • 获取来源
  • 构建应用程序并体验它在做什么(我通常在此阶段手绘屏幕流程图,稍后在代码中导航时它很有用),还要注意错误、缓慢的功能、非用户友好的东西(反馈对团队很重要)
  • 进入源码,查看其宏观布局: .查看构建脚本以查看它使用的外部库 .注意一般的包层次结构,检查命名是否一致,包没有被垃圾超载 .大体看class命名:是否一致? do class names 有助于弄清楚里面到底是什么 .做一些关于文件大小的基本统计:它可以快速表明一些设计缺陷
  • 现在关于代码本身: .阅读它直到您对它的一般工作方式感到满意为止(绘制技术流程图会有所帮助),我喜欢从应用程序入口点开始(通常是 Android 中的 activity) .确保在测试应用程序时发现所读内容如何实现所见所闻 .记下你在阅读时发现的不良编码习惯(命名、评论,可以是任何东西:代码的糟糕程度没有限制 ^^) .记下 unreadable/overly-complex 位代码(但不要花几天时间来理解它们) .如果您注意到应用程序中的一些慢速功能,可能值得更仔细地查看这些代码 .睡个好觉,然后重新阅读你所有的笔记,并尝试提取一些关于应用程序设计的高级评论

现在,专门针对 Android,根据我的经验,这里列出了最常见的要查找的内容:

  • 组件生命周期处理问题(对于活动、服务、片段等组件):症状包括导致问题的设备旋转和应用程序切换
  • 线程处理问题(在 UI 线程上完成的事情,当它们真正应该在后台 运行 时)
  • 大量的活动/服务(许多人认为创建活动/片段/服务是架构方面的全部要求 - 只有非常简单的应用程序才是正确的)

具体细节我就不多说了,因为比我聪明的人都写过这方面的书。而且你必须编写应用程序代码才能真正掌握这些主题:很多,所以这就是你应该开始的:自己编写应用程序,否则:1/你的审计将无关紧要 2/团队会发现你缺乏技能非常快 - 根据本次审核的目的,您可能很难面对它们...