项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2023年北航敏捷软件工程社区-CSDN社区云 |
这个作业的要求在哪里 | 个人作业-提问回顾与个人总结-CSDN社区 |
我在这个课程的目标是 | 学习与掌握软件工程的理论与应用实践,学习如何工程化地构建软件 |
这个作业在哪个具体方面帮助我实现目标 | 总结本学期在项目开发和课程中学习的内容,回顾之前提出的问题并尝试给出答案。 |
对之前所提问题的解答
链接到之前的博客:软工第一次作业——阅读与提问-CSDN社区
问题一
现代企业软件开发过程中,代码复审是否已经可由同伴复审转向大部分自动化工具链复审+少部分同伴复审?
在小组SimDep作业中,我们经历了alpha、beta版本的团队合作。在这其中,我们使用提交PR与同伴复审的方式保证开发质量。除此,我们还使用自动化工具CI/CD,自动地审核、检查代码中可能存在的BUG。同时,同伴复审过程我们更加关注代码中是否存在严重BUG。因此,我认为现如今的软件开发过程,CI+同伴复审已经成为主流。
问题二
敏捷流程与瀑布模型是否在开发过程中存在冲突,且是否适合任何团队和产品?
对于该问题,我们小组的SimDep软件我认为更适合敏捷流程,不适合瀑布模型。因为,我们团队的需求、典型用户在alpha版本和beta版本都出现了修正。使用敏捷流程可以更好地改善软件,对开发过程中的需求迭代更具有适应性。相比之下,瀑布模型则难以很好地处理我们在beta阶段,to B客户提出的新需求。
问题三
需求的功能分析中,是否有办法量化/推断一个功能是属于杀手功能、外围功能、必要需求、辅助需求中的哪一种?
对于该问题,在SimDep软件里,我们推断功能属性的方法是与同类型产品进行比较和对用户需求进行分析。首先同类型产品比较可以更好地帮助我们找出杀手功能,同时也能分析出哪些功能是外围功能,例如SimDep的文件挂载为杀手级功能。对用户的需求进行分析是判断必要需求的好方法,例如,针对beta阶段的to b客户。我们新增的WebShell便属于必要需求,也是我们必须完成的项目。
问题四
产品的独立质量认证与人肉质量认证是否可以是相辅相成的关系,区块链等去中心化技术是否可以为所有产品提供独立质量认证?
在本次软件工程的开发过程中,我们未涉及独立质量认证等方面的内容。我们的SimDep平台,依靠单元测试和测试人员的集成测试、压力测试和负载测试保证出口质量。尚未使用到其他技术。同时,我们也贯彻**独立质量认证(测试)和人肉质量认证(将教程托管到平台上)**的双重认证模式,以提高软件在用户心中的可靠性。
问题五
绩效管理中产品的价值为什么不是评估机制中的一种?
因为产品的价值难以在收入上评估。一些例子,比如“微信”是花费了很多人的时间和努力开发出来的,但并未给公司带来直接的金钱收入,因此也无法评价模块开发者的绩效。而对于我们的SimDep平台,一开始进行产品分析时,同样难以评估其价值。但在完成该项目后,我们陆续地有用户进行使用,且联系到了企业用户,帮助他们在服务器管理上作出一定的贡献,这种价值很难量化评估。因此,产品的价值不应当作为评估机制的一种。
在项目中学到的知识点
需求
在需求分析阶段,NABCD分析,本人认识到需求是随时间在变化的。在alpha阶段,SimDep的目标瞄准简易云函数平台,为小白用户提供简单可用、可靠的云函数服务。而在beta阶段,我们针对to B客户的需求,将需求调整为图形化界面的函数、服务器资源管理平台
设计
我认识到了UI/UX和交互性的重要程度。SimDep的alpha版本存在界面不美观,引导不清晰,交互复杂臃肿等问题,这是我们在原型,使用流程和交互方式设计时留下的弊病。我们未考虑功能的易理解性,也未考虑交互流程的直观达意。因此,在Beta版本,我们首先重构了前端的UI/UX页面,使其更加美观。除此,我们还优化了项目创建、启动等流程,并在难以理解的地方加上解释,使得用户能够更轻易的理解不同模块、不同参数的具体能力。体现SimDep的易上手性。
实现
在实现阶段,我学习带了代码规范和项目结构的重要性。为此,我在Alpha版本负责为队友搭建简易友好的开发环境,并在开发环境的基础上,设置部署环境。这种行为使得开发人员仅需关注接口功能实现,无需考虑部署等其他问题,大大减少了开发人员的工作量。除此,我们实现使用CI自动地检查项目中的代码规范程度,优秀的代码规范使得后来的开发者能够理解代码意图,降低开发门槛,并保障开发质量。
测试
测试阶段,我学会了多种测试方式包括压力/负载测试、矩阵测试、场景测试等等。并知道如何完善地设计一份测试方案与实施。在这个过程中,制定符合要求的软件性能指标等等。
除此,在结对编程阶段进行单元测试,有效地降低了在模块交换时可能遇见的BUG。使得整个开发过程非常顺利。
发布
对于发布阶段,我认识到了宣发的重要性。在alpha版本,我们在不同的网站、平台进行了宣传,虽然账面数据貌似不错,但实际使用的客户较少,平台转化率低。在时候分析时,我们认为问题出在宣发的时间,以及宣发方式上。在Beta版本发布时,我们专注于to B的客户,并针对实际应用场景,提出更有意义的宣发内容,使得Beta版本的宣发工作进展更加顺利。
维护
针对软件可能存在的漏洞,以及服务运行稳定性的情况。我学会了如何使用issue提交问题并及时解决。issue是一个团队与用户沟通的很好窗口,我们通过定义Github issue模板,规范化用户的问题表述与复现步骤,这一步极大地加强了我们的问题定位能力并降低了维护难度。除此,我们还意识到需要关注服务运行的安全性问题,在用户使用过程中提出的安全性问题进行及时的解决。
心得体会
结对编程的作业让我初步体会了双人协作编程的过程。在这其中,两个人共同合作,同时review的过程让我十分享受,也是一次不错的编程经历,其与往常的编程不同之处在于,你可以清晰地感知到两个人的想法在这个过程之中的碰撞。
团队项目我认识最深刻的时敏捷流程,大家一起在一段紧张的时间里完成同一个开发目标。我作为团队的质量保证+测试人员,在这其中经历了不少与开发人员的扯皮,并在同伴评审环节,细细斟酌开发人员的代码,并发现潜在BUG,扼杀在摇篮里。我非常享受这一过程,可以为团队的开发质量做出贡献。除此,作为测试人员,我也承担着软件上线后的性能、稳定性、可用性等多方面的考验,这也使得我不得不不断地调整测试计划,力争在测试阶段发现软件的重大BUG,保障软件上线后用户的体验。这过程中我也学到了许多知识,包括CI/CD,如何进行压力测试、单元测试等等,以及如何使用自动化工具评估/保障软件质量,这对我之后的规范开发是一个很好的基础。
除此,软件工程课带给我的另一个认知就是如何规范地制定开发流程或者说是规范每一个软件开发流程。感谢罗老师课程中提到的软工方面知识,这很大地指导了我作为测试人员以及质量保障人员在开发过程中的具体流程与需要注意的事项。同时,团队开发的燃尽图一类的工具也让我们更加清晰地认识到如何评估当前开发状态。
最后,感谢团队开发人员的认真、负责,对功能开发的细致和对BUG反馈的及时处理,都让我钦佩不已。也感谢我们的前端,为我们软件的交互性做出的巨大贡献。最后再次感谢团队PM,在统筹引领团队的开发、需求方向上做出的巨大贡献。