Working in Ericsson

  人生的第一次实习是在爱立信度过的,也算是第一份工作。

  时间倒回到三月份,开学后就迫切的要通过一段实习改变自己在学校无聊的状态,于是在大街网上投了爱立信的实习,地点是天河软件园的Ericsson mobile data R&D。由于不是正式的校园实习招聘,所以流程也很简单,面试的JAVA开发,于是就给了我套卷子做。第一套是基础知识,还没写完就又给了我另一套,感觉是那种只有工作过一段时间的程序员才会的,设计到代码的重构以及测试。自己都不怎么懂。其中还包括了自己设计hash map,java字符串创建时对象的产生问题。卷子写完后立马就有人过来面试,说是面试其实就是针对刚才写的每一题和我进行了讨论,感觉教学的意味更大点儿,那时候才明白自己如此的不足,这个人也就是接下来入职到的Team的PO。

  立马入职后,就正式的加入了CMS的Component Team,同属于CMS的还有一个PrePack Team。其实还有其他的六七个Team同属于CMS分布在世界各地,这种跨时区的交流在以后的软件开发中会带来不小的麻烦。来到的第一天就是从stand up meeting开始的,从此也让我接触到了整个敏捷开发的管理流程,真正的认识到了软件工程的概念。

  作为一家大公司,虽然整体效率可能不高,但是在管理的规范上还是可圈可点的。作为广州的CMS,设有一个PM,然后算上我在内的10个人构成一个小的team,其中设有Scrum Master敏捷交流,PO架构师,两个全职QA。由PO根据上面的需求制定和分解没一个迭代的任务,在version one上进行管理,每三个礼拜为一个迭代sprint,迭代开始初要进行planning game分配任务估计时间,接下来每周五进行review大家开会说下一周的工作情况,到了迭代结束要进行DoD和Demo,对于每一个backlog都要从文档,测试,代码review,checkin等多个方面进行考核,全部通过这个backlog才算完成,当然其中最终要的一个环节就是demo,要保证开发的成功,这个也是PO进行验收的标准。除了这个会议,在迭代结束的时候也要进行review,大家探讨这个sprint中做的好的地方和不好的地方,并且提出可以改进的方法,在下个迭代中进行应用。通过不断的反省,的确能让一个团队工作的更好。另外每天早上还有雷打不动的站会,简单的回顾昨天完成的事情,说下今天的任务,而这些是在白板前面进行的,白板通过便钱的形式来展示每个task。

  整体上爱立信这边的工作都没那么紧张,早上9点多上班,晚上6,7点下班。而且公司提倡不加班,认为加班是低效率的体现。由于都是做企业级软件开发,所以也不像互联网行业有那么大的上线压力。除了日常管理方面,在软件开发方面爱立信也有一套晚上的体系,虽然有时候看起来臃肿,有些形式化,但不可否认,其的确能够提升软件质量。

  我们的项目是个基于J2EE的内容管理系统,公司是从另一家公司买来的,然后自己再进行二次开发。项目是基于spring,hibernate,linux,jboss架构的,数据库最初是orcale,现在改为了EDB。总体上都是基于开源软件的,比较奇葩的是UI,利用了google的jwt,可以说使用起来相当不舒服,远不如直接开发html来流畅。日常的开发过程中,利用CVS来对项目进行版本管理,利用GIT对测试代码进行管理,两者是分开的。开发人员所写的代码都要包含UT,并且找人code review之后才能提交,之后找到PO和QA进行demo,确认没有问题后交由PO测试,现阶段test plan由开发人员自己写,以便进一步的扩展为全民测试。QA除了测试开发的功能外,还有个重要的任务就是书写自动化的代码。整个项目还在进行持续集成CI,通过jenkins进行管理,通过sonar查看代码的质量,包括测试覆盖率,validation等,都有数字化的指标要求必须达到,从而保证软件的质量。

  自己在这实习的4个多月里基本上算是个打杂的,由于一开始自己对J2ee不熟悉,所以从开发一些辅助性的小插件做起。

  第一个是把Version one上的backlog在网页上生成美观的便笺,然后打印出来。简单的利用jsp和spring mvc来实现了功能,由于自己不熟悉css,所以用ps画的图,然后一点点的调整位置,显得十分笨拙,没有一个好用的可视化工具来解决这个问题。以后每天的展会都是在白板上看打印出来的便笺来进行的。整体上说地一个任务属于练手。

  第二个任务就比较复杂了,需要我实现一个解析查询xml,和orcale数据库中电子节目单信息的功能,并且还有交美观方便的展示效果。而项目的初衷就是cms系统中的epg有时候导入数据,导出数据和数据库中数据会有不一致。需要人工核对,而我的工作就简化了人的工作。这个项目算是真正意义上的j2ee了,利用了spring mvc,不过并没有用structs 和hibernate ,经过反反复复的修改后自己对j2ee和spring框架也算是比较熟悉了,并且一步步的理解一个系统,里面的层次是很重要的。应该力争从第一次设计上就考虑到以后的扩展,以为唯一不变的就是变化,磨刀不误砍柴功就是这个道理。

  第三个任务看起来工作量最大,但其实完成起来却很快,属于体力活。由于EPG的UI部分以前是没有UT的,所以我就负责补全所有的UT,这之中主要学到的技术就是mockito,利用模拟技术来生成虚假的对象,或者假装调用某API后返回了某一结果,这样在测试时对每个API进行了解耦,省去了对需要花费大量时间和api的实际调用(比如查找数据库等)。第二点是一个小技巧,由于测试时为了满足覆盖率的要求,要尽量覆盖到每个代码的分支。分支中除了if else之外,最多就是try catch了,而其测试起来有大量重复的工作,只为抛出不同的异常,并且一个项目中的异常通常就那么几种。于是po让我用java反射的机制重写这些抛出异常的api,只有一个函数抛出许多异常,这个函数通过回调执行其传进来的函数。这样许多函数的抛出的相同异常就变为了一个异常,这样很容易就可以使测试代码覆盖到所有的异常抛出代码,从而提高代码覆盖率的百分比统计值。

  第四个任务还是校验数据,主要是校验导入的数据是否都录入到了数据库中。一开始只是一个普通的小java程序,后来在po的要求下,做成了一个集成测试放到了持续集成上面跑。这个项目的困难点在于每次执行一次导入数据的时间都非常长,导致更改一次代码后,测试一次都要花一俩个小时,极大的托慢了效率。后来改为小数据后时间变为二三十分钟,还可以接受。通过整个项目进一步了解了ant,从拉数据,到构建项目等,再结合linux shell,构建了一个自动化的测试项目。

  第五个任务终于和CMS系统本身有关了。背景是为了接下来的上线,需要重构整个前台界面还有接口。之前在开发接口的过程中,由于设计到三个时区团队的交流,所以效率十分底下,通过这个事情让我开始明白《人月神话》中所说的道理了,这种设计本身真的是没有什么银弹的。再这之后为了摆脱地效率,我们团队开始直接开发UI,本来这是要由UX团队进行的工作。而我的任务是和另一个有经验的开发人员进行pair programing,修改一些UI的显示效果。界面是利用GWT进行开发的,并且经过了一层爱立信自己的封装,所以用起来格外麻烦。还好旁边有人指导,通过指导,我能股快速的熟悉要修改部分的架构和层次,并且学到了许多开发时的小技巧。比如要编写大量的get set函数时,可以用生成的。而自己以前都是苯苯的手写。还学到了一个好习惯,就是在更改代码或者增加新功能的时候,先对原有代码进行重构,通过良好的重构能够极大的帮助接下来的开发,看似是绕路了,但其实节省了功夫。由于自己的休假,没有帮到partener太多。但是真心的觉得这种开发方式真的很有利于新人的成长,和大家之间互相的学习。

  第六个任务,到了发布前最后的两个迭代,整个团队都在做hardning测试,修改bug,而我负责的主要是performance的此时,包括GUI和ingest的,用到了需要新的工具和方法,比如testlink,bugzilla,再测试一个job的performance时不仅要考虑到时间而且也要考虑到资源的使用,以及每一步具体的时间。对于资源的使用则需要利用工具来监控JVM对CPU & memory的使用,看似简单的测试要做好也不容易。测试中遇到问题还要进行验证和进一步的确认,并且保留现场如log啊,截图之类的,最后申报bug。

  还有其他一些小修小改的任务,探索性质的任务。比如数据库和jboss的连接超时断开问题。自己深入的了解了linux系统tcp的空间超时断开的问题,然后做实验,并产生报告,发布出来,告诉其他team参数的设置。总体上由于自己对项目了解不多,一开始帮不上什么忙,后来逐步的对项目有了了解,到了能帮忙的时候又快要离职了。作为实习生,基本上每天还是比较清闲的,没有太大压力。其他的同事通过观察也大致如此,而且休假时间貌似很多,挺令人羡慕。

  总结这几个月,自己的确收获到了不少,无论是知识还是管理技能,还是为人做事。知识上,接触到了以前没有接触过的技能,但是远远达不到熟悉的地步。所谓师傅领进门,修行还得靠个人。管理方面,深刻理解到软件工程,敏捷开发这个概念。从工程上,开发软件远不是写写代码这么简单,包括了人员的管理,人与人之间的交流,项目的设计,工程质量的保证等等。敏捷开发方面,个人理解就是小团队,快速迭代,快速的开发测试周期,经常反省,不断改进。接触到许多管理的工具和方法,在以后的做事中应该会对自己有指导。虽然规范化的流程和能会导致地效率,形式化。但是当一个事情做的越来越大事就不可避免的要有这些,小的公司小团队容易创新,好调头。所以,我认为要做一个项目,一开始可以用小团队,原型式的开发,快速迭代,当达到一定的效果后,扩大人手,规范化管理,把项目做大,保证项目的质量。最后在做人做事方面,一味的说ok不是办法,要敢于说no,所和人交流,真诚的交流,对事不对人,把问题说清楚,混日子的想法十分不好。作为一个管理者我认为也不能太老好人,几面讨好就什么事就做不了了。另外很关键的一点就是做事要认真,细致,从小事做起。不要觉得自己做的是个小事,就马马虎虎的干了,想着等做大事了自己再好好做。做什么事都要认真,认真的去完成每一件小事,因为小处见大。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值