欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

软件开发工程师问题定位

程序员文章站 2024-03-22 12:03:34
...

1.介绍

软件工程师其实有很多时间是在解决问题,尤其是在做room相关开发,基本都是在优化,解决问题,如果没有太多经验解决问题是一件很费劲的事情。

问题主要有几个步骤:1.定位问题,2.寻找解决方案,3.验证解决方案,4.提交代码,5.等待测试复验

这些步骤中对我们研发来说最难的是定位问题,这也是最废时间的工作,今天我要介绍的也就是如何定位问题。


2.问题类型

1.UI类显示问题

2.逻辑类问题

3.anr问题

4.内存泄漏

5.网络类问题


3.各类问题解决方案

1.UI类显示问题:

UI有可能是动态添加也有可能是静态布局,如果是动态布局不能获取到UI控件id,如果是静态添加一般可以找到关键key。静态布局可以捕获当前布局控件id,动态布局无法获取。

如下第一个用例:没有关键字

软件开发工程师问题定位


通过Android Studio Tools->Layout Inspector 捕获当前页面布局,点击到当前箭头可以看到当前箭头的id入左边所示:all_apps_handle.得到该关键字之后全局搜索all_apps_handle,这样就可以找到对应布局从而改变该控件大小。

2.动态布局关键字无法搜索到

软件开发工程师问题定位

如图计算器控件,这种控件无法捕获当id因为每天设置id,也无法通过关键字计算器来搜索。这种时候可以通过他的父控件搜索到相关地方,找到数据加载从而一步步查找。

3.通过最直接关键字搜索

软件开发工程师问题定位

如上图壁纸,这种是静态设置的不会改变的布局,通过全局搜索壁纸关键字得到wallpaper_button_text

再搜索wallpaper_button_text得到如下布局

<TextView
            android:id="@+id/wallpaper_button"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:drawablePadding="5.7dp"
            android:drawableTop="@drawable/wallpaper_button"
            android:fontFamily="sans-serif-condensed"
            android:gravity="center_horizontal"
            android:stateListAnimator="@animator/overview_button_anim"
            android:text="@string/wallpaper_button_text"
            android:textColor="@android:color/white"
            android:textSize="13.1sp" />

2.逻辑类问题

逻辑问题是一种比较难解的问题,尤其是一些在特殊条件才能出现的问题,逻辑类问题最好就是先搜索相关日志,这个日志就是问题发生流程的逻辑。

例如下面问题桌面图片排序错乱问题,这个是必须的问题。

软件开发工程师问题定位

(1)必现逻辑问题:这个比较好定位可以,抓一段这个操作的日志,再搜索sort这类关键字这个关键字要和包名相关,找出有怀疑的地方。如果没有搜索到sort相关日志,定位最直接相关控件动作从而从这个逻辑开始往下追踪,日志和id相结合从而搜索分析逻辑,再怀疑的地方添加相关日志最终找到逻辑问题。

(2)概率性逻辑问题:如果是像跑monkey或偶尔复现的逻辑类问题没有太好办法先分析日志找到相关地方,其实这种分析日志也是有些难比较不知道时间发生点,没有办法复现查看流程。但最好还是要搜索日志中关键字,例如桌面图标经过一系列更换位置和编辑后偶尔出现位置重叠现象。想这种问题我们最好能拿到应用database应用像这类位置相关的会保存到数据库中通过获取查看数据库可以确定是位置重叠,其次就是看有那些逻辑是改变位置的地方,按照想法我们要想给图标排位置最先要判断移动的地方是不是可以排,所以最关键的就是这个判断的地方,我们可以在此添加相关日志如果无法复现没关系给测试去复现,如果复现了则看你添加的日志,当然你的日志不仅仅只是判断的地方其他怀疑点也是要加的,一定要通过一个关键的上下梳理逻辑。


3.anr问题

anr是UI无响应,有以下几种导致anr(1)UI操作过程中太多耗时操作(2)广播接收后再onReceive方法中做了过多耗时操作(3)service中做了过多耗时操作。具体分析方法和解决方案:点击打开链接


4.内存泄漏

内存泄漏和内存溢出是两种问题:

(1)内存泄漏是申请对象后没有及时释放:点击打开链接

(2)内存溢出是使用的内存超过系统限制:点击打开链接

内存优化方案:点击打开链接


5.网络类问题

话不多说分享一个链接大家看看:点击打开链接