转载:https://www.cnblogs.com/imyalost/p/16775825.html

最近在重学软件工程相关的知识,一方面是对自己过往工作经历的一个梳理总结;另一方面,是在和同行交流过程中,发现自己对于一些知识的理解还存在不足。

后续一段时间的文章内容,会以软件工程方面为主,当然也会穿插一些工具使用和技术落地的实践。

 

如何理解软件工程?

我最初入行做软件测试,是培训机构学习了3个月后就一脸懵的出来找工作的。

虽然在培训机构学了一些用例设计、测试方案编写和基础SQL/Linux命令,但缺乏实战经验。磕磕绊绊找了一个软件测试的工作后,迷茫的工作了两年。

工作中犯过不少现在看来很基础的错误,也找不到方向学习提升自己,总有一种疲于奔命的感觉。我曾经遇到过很多问题,比如:

  • 用例是写好了,但上线后总有遗漏的点;
  • 缺乏理论指导,遇到新的业务很难快速上手;
  • 工作没有计划性,想到哪儿坐到哪儿,效率和质量比起其他同事都差;
  • 不知道如何与研发团队其他同事协作,职业发展遇到瓶颈,无法得到晋升;

后来在一个很好的leader提醒下,系统的学习了很多基础的软件工程相关知识,才开始明白软件研发交付更本质的东西。

系统的学习之后我才知道,无论是日常的版本迭代还是一些独立的技术项目,其实背后都有软件工程的方法论在指导着项目有条不紊的迭代交付。

现在和一些同学交流技术落地的问题,我也更喜欢用软件工程实践来这样提出自己的建议。

学习让我明白,从项目立项评审到编码测试上线,都需要通过合理的流程规范和有效的组织协调来保驾护航。

在整个项目的生命周期各环节,业内都有许多解决问题的最佳实践,在不同的领域也有不同的工具来辅助提高过程效率。比如:

  • 提到架构设计,大家会想到抽象思维、分而治之、复用和迭代;
  • 提到复杂场景高并发下的性能测试,大家会想到生产全链路压测;
  • 提到服务治理,大家会想到配置中心/注册中心如Apollo/nacos/sentinel;
  • 提到应用管理和流水线交付,大家会想到Jenkins/docker/k8s或CICD相关的知识;

从技术的角度来看,上面罗列的几点都是道法术器中的法术器,而软件工程则是培养这一切诞生并茁壮成长的道。

 

为什么要学习软件工程?

亚马逊的创始人杰夫·贝索斯(Jeff Bezos)曾经在一次演讲中说:“人们经常问我,未来 10 年什么会被改变?

我觉得这个问题很有意思,但也很普通。从来没有人问我,未来 10 年,什么不会变?”这个回答同样适用于软件研发交付领域。

经常有同学问我该如何学习提升自己,我一般会给出下面2条建议:

  • 短期,学习可以快速变现的技术,比如自动化测试的市场需求很大,就去学习框架/代码/工具相关的技术;
  • 长期,学习那些底层不变的技术,如操作系统、通信协议、数据结构、软件工程、网络、数据库相关知识;

因为技术是为了解决问题而不断迭代变化的,但从最早的开发语言诞生直到现在,底层的如操作系统、通信协议和网络几乎没什么变化,这些知识可以受用十年以上甚至更久。

做测试的同学应该都知道,影响质量的三要素是时间、范围和成本。

PS:图来自极客时间,侵删。

实际的软件研发项目中,除了上述三点之外,还需要考量技术落地难易程度、团队成员的适应能力以及成员利益之间做平衡(trade-off)。

而软件工程的诞生,则是为了解决软件研发过程的质量不可控,其目标就是为了要聚焦于质量,构建和维护高质量软件。

软件工程是软件行业知识体系的内核,无论你想走技术路线,还是转向做管理,想要走的更快更稳,都绕不开软件工程。

 

如何系统的学习软件工程?

PS:图来自极客时间,侵删。

如上图所示,要构建和持续维护高质量的软件系统,需要从工具、方法、过程来入手。

“过程”指的是将软件研发过程中包含立项、计划、沟通、编码、测试和部署等工作通过有效的流程规范组织起来。

无论是早起的瀑布模型、双W模型,还是近几年流行的敏捷开发、流水线交付,都可以看作是对过程的控制和管理。

“方法”指的是在软件项目整个过程中,如何构建并交付高质量系统的一整套理论。比如:

  • 用户需求分析;
  • 系统架构设计;
  • 软件测试验收;
  • 软件构建部署;

“工具”自不用多言,所有能辅助我们提高解决问题效率的都可算作工具。比如:

  • 要验证代码覆盖率,我们常用的工具有jacoco、coverage.py;
  • 提高用例执行和回归效率,我们用到的自动化测试工具如selenium;
  • 需求/用例/缺陷管理工具如禅道、jira、TAPD等;

原文地址:http://www.cnblogs.com/ceshi2016/p/16863442.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性