个人作业-提问回顾与个人总结

个人作业-提问回顾与个人总结

项目
这个作业属于哪个课程2023北航敏捷软件工程
这个作业的要求在哪里个人作业-提问回顾与个人总结
我们在这个课程的目标是学习并实践软件工程开发的方法论。在把握整体流程和内容要素的基础上实践细节,培养开发技术、开发思维、团队协作等能力。
这个作业在哪个具体方面帮助我们实现目标对整个学期进行回顾和总结

以前的博客:个人作业——阅读与提问

请尝试对自己曾经提出的问题进行解答,并阐明,是如何通过看书,实践,或者讨论弄清楚的。

1.有竞争力的软件发展方向?

在大三下这个学期中,我通过软件工程课程学习到了相当多的软件工程方法论知识,并且进行了软件工程相关流程的实践。除此之外,我个人在校团委也恰好负责了【北航文艺地图】和【北航文艺地图渗透测试】两个项目,这和我在这个学期的实践流程竟有异曲同工之处,因为我在敏捷实践中开发的项目也和地图有很强的相关性。

在软件工程的实践过程中,我发现构建一个美观、大方、实用的软件的确不是一件简单的事情,很多方面的资源都会对网页的开发起到限制的作用。譬如,团队里是否有擅长美工设计的成员?团队成员对于某些场景的开发经验是否充足(用什么流程来适配某一场景)?团队成员是否能够快速磨合,遵守规范和约定?对于一个学生团队来说,这都是非常有难度的,因为我们在大部分时间都不得不面对资源的短缺。尽管近几年来,中国的互联网行业发展的十分迅速,但是从长期的角度来讲,行业技术、经验的积累并没有那么丰富,和美国等信息技术强国相比,技术力仍旧存在客观差距。这种差距不是体现在一两个简单的网站上的,而是从行业顶端到行业低端的。承认客观存在的差距并不是难事,但差距并不代表全面的落后,也不代表竞争力的缺失。

我发现“软件的竞争力”并不能仅从软件的开发难度上进行定义,也不能只从创新的角度进行定义,更不能只从设计哲学的角度进行定义。软件是为“解决问题”而诞生的,一个软件是否具有竞争力,应当考虑其是否能够很好地解决对应的问题。美观的Web应用固然讨喜,不过截至2022年12月,我国网民使用手机上网的比例达99.8%;使用台式电脑、笔记本电脑、电视和平板电脑上网的比例分别为34.2%、32.8%、25.9%和28.5%。怎样让老百姓享受软件工程发展带来的福利?腾讯的小程序给出了一个很好的解决方案,且腾讯通过小程序、公众号打造了一个非常有活力的开发者社区。当然,这并不是说我们就不需要开发高难度的工业软件,不过我们要深刻意识到软件和软件开发的目的,时刻秉持一颗工程师应有的实事求是之心。

2.合作中如何正确、高效地给予反馈?

在经过一个学期的实践后,我发现在团队内进行合作时,坦诚的的反馈的确能够提供很高的效率。当然,所谓的坦诚并不是指“叽里呱啦”地进行直白的吐槽,而是需要保持理性和“问题意识”。在反馈问题的时候,我认为应当包含以下三个要素:

  • 哪里做得不好?
  • 为什么你认为做的不好?
  • 你认为怎样是更好的?

直截了当的指出、客观输出自己的观点可以让你的反馈显得更加有诚意,并且能够让对方意识到可能的问题,进行反思。事实上,如果收到了这样的反馈,对于解决问题也有很大的帮助。

当然,如果是甲乙方之间进行反馈,那还是需要注意“语言的艺术”,毕竟通常来讲,甲乙方的地位是不对称的。

3.同学们的能力和敏捷开发的可行性?

在学期之初,我曾经怀疑在几周内实现敏捷,是否能够有效培养学生的敏捷能力?

从我们团队的实践结果来看,大部分团队成员应当是收获颇丰,不仅增强了技术能力、掌握了更多工具的使用方法、培养了更好的开发习惯,同时也对敏捷流程有了更加深刻的体会。

我作为Agile-埃杰团队PM,需要同时参与需求、设计、前端、后端、测试、文档、发布~~、被拷打~~的工作,不得不说,这的确是一个非常具有挑战性的岗位,我在其中倾注了非常多的时间和精力。有的人说,PM不需要懂技术,这怎么可能?当然,不能否则我在这九周时间内,也学到了不少新技术。

另外,我也非常感谢我们的团队成员,大家都在尽力完成分配到的任务,并且效果还不错。我们在实践中形成了一套自己的团队风格和规范,并且约定了一套软件开发的流程,形成了较为统一的开发规范。

然而,我们有时候也感觉比较仓促,没有时间关注一些细节上的内容,如CI/CD的最佳实践、单元测试的最佳流程等、原型设计的最佳流程等。因为时间过于紧迫,团队不得不很快地投入学习和开发的工作当中,对于某一些比较重要的软件工程流程浅尝辄止,比较可惜。另外,我也和别的团队的成员进行了交流,有的团队的确做出了很棒的产品,实现了非常优秀的软件工程流程;但有的团队的敏捷流程则有些不尽人意。

两个学期的学制和更多的时间能否更有效地让同学们体会敏捷流程的内容?我个人认为是可以的,因为从我本身就深刻地参与到了整个敏捷流程当中,但仍旧感到非常仓促,有许多关键的流程没能够进行深度的实践。而团队的其他成员可能只参与了敏捷流程的一部分,他们是否能够获得和我同样深刻的体会?我想,可能需要给出更多的时间。

4.敏捷开发是一直有效的吗?

如果你的团队只开发一些小型的、同质的项目(如我在校团委参与的【北航文艺地图】)——或者说你的团队业务非常固定和明确——那么敏捷流程是非常有效的。你可以通过排期,在一两个月的时间内完成多个同质项目,签下多份合同。敏捷流程在这种情况下非常有效,非常适合中小型企业。

但是,大型的工业软件如仿真软件、建模软件,从开发到最终成为一个可商业化的产品,一般来说需要经历几个关键过程,包括算法或求解器开发、软件交互界面的搭建、软件集成测试等阶段,在这种级别的软件上实施敏捷流程本身就是不现实的。在我国,由于缺乏相关的开发经验,大部团队甚至没有能力突破第一个阶段。这些软件通常需要在前期就进行完备的设计和验证,并且需要通过集中收集大规模的用户反馈来进行版本性的优化,因此并不适合实施敏捷流程。

5.如何判断技术达到了“效能过剩”这一阶段?

在中国,14亿人都需要使用电力进行照明,这一数字是不是十分可怕?但是,2022年全国工业用电量为56000亿千瓦时,占全社会用电量的比重为64.8%,城乡居民生活用电量13366亿千瓦时,仅占比15.5%。仅供少数企业使用的巨大发电机是效能过剩的表现吗?我想未必。事实上,我认为“效能过剩”一词只能针对个体使用,而不能针对整个行业使用。

是否原来的问题还不明白?如果有,请分析。

经过一个学期的学习、实践和思考,我已经能够对我在学期之处提出的问题进行回答了。当然,这些回答肯定不是一成不变的,在未来,或许我还会产生全新的思考。

是否产生了新的问题?如果有,请提出。

经过一学期的实践后,我对结对编程这一流程的意义感到更加困惑了。

从形式上来讲,结对编程是指两个开发者共享一个计算机,其中一个开发者作为“驾驶员”(Driver),负责具体的编码操作,而另一个开发者作为“导航员”(Navigator),负责思考和指导,两人共同合作完成一项紧急的任务。2023年,每个人都有自己的笔记本和自己的电脑使用习惯,且各种代码管理工具也已经非常流行。将两个本不熟悉的人撮合起来,为了形式使用同一台电脑进行开发,让他们进行所谓的“结对编程”,意义真的不大。我相信绝大部分结对小组依旧是按照模块划分任务,并在各自的计算机上进行开发——事实上,没有任何结对编程的体验,大家还是在用老办法进行软件开发。既然这样,为什么不给敏捷流程分配更多的时间呢?在我看来,结对编程更适合用于编程学习,而非现代软件开发。

请问你们在项目的 需求/设计/实现/测试/发布/维护阶段(一共6个阶段)中都学到了什么“知识点”,每个阶段只要说明一个知识点即可。

  • 需求:首先,并不是所有产品都需要开发者去“推”。在市场中,有相当多的合作是乙方按照甲方的需求制造一个产品,而并非自主创新。这是大量下游公司提供的业务,这些下游公司构成了市场的根基。上游的公司则需要更多的主动性,需要拥有一定的创新能力。分析需求对于上有公司来说通常更具有挑战性,而下游公司的业务需求则相对固定。因此,没有必要因为想不到好的点子而时时刻刻处于烦恼的状态,能够把甲方的需求做好,本身也是一件了不起的事情。需求分析不能生搬硬套,而是需要根据业务情况来决定。

  • 设计:不论是对于大型软件还是对于小型软件来说,设计都是非常重要的,好的设计能够大大提高开发的效率。在实践的过程中,我发现简单地按照模块进行设计是存在不足的,有一些功能需要进行跨模块的设计,有一些功能按照正常的逻辑进行设计则会变得非常复杂。因此,设计人员需要掌握多种设计方式,以便能够根据需求给出灵活的设计方案。常见的设计模式如下:

    • 创建型模式:主要关注与对象的创建,包括工厂模式、单例模式、建造者模式等
    • 结构型模式:这一模式则更加关注如何将多个对象进行组合,包括适配器模式、桥接模式、装饰器模式等
    • 行为型模式:此类模式则主要考虑处理对象间的交互,包括责任链模式、命令模式、解释器模式等
  • 实现:经验和技术力对于实现来说是非常关键的,这是公认的真理。不过,我也想指出,流程对于实现来说也非常重要。流程的内容非常丰富,包括开发流程、测试流程、代码管理流程、文档管理流程、前后端对接流程、数据模型管理流程…如果团队拥有合理的、一致的、严格遵守的共识性流程,那么对于团队项目的实现是有百利而无一弊的

  • 测试:“贪多务得,细大不捐”是很好的学习习惯,但是在进行测试的时候,过份地追求全面则是在PUA自己。对软件进行测试时,我们要同时追求经济和高效。事实上,我也可以把话说得更加单,就是对前端进行单元测试真的没必要!

  • 发布:发布的手段有很多,不同的软件也有不同的发布方式,这是我们所学到的:

    • 在社交媒体上进行发布是性价比最高的发布方式,你可以通过低廉的成本告诉非常多的人“我们制作了一个软件”。当然,这种渠道所能够携带的信息量比较有限
    • 制作发布网站:发布网站能够携带很大的信息量且更加标准、美观,当然也需要一定的制作成本
    • 广告宣发:要钱,但是商业公司经常用
    • 测试邀请:通常,知名软件在发布前都会邀请业界的话事人参与测试,通过他们的影响力进行对外宣发,不过这种方式对于软件的质量有较高的要求

    除此之外,面向不同的群体进行发布时,也要采用不同的发布方式。

  • 维护:在这一阶段,用户的反馈是非常重要的,用户能够帮助我们发现测试阶段无法发现的Bug,这对于软件质量的提升和软件的迭代是非常有意义的。当然,为用户提供便利的反馈渠道、及时对用户反馈进行回应也是相当重要的,对于一些开源社区来说,用户本身的参与也是软件进步的动力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Enqurance

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值