软件工程实践总结——夏日回音

221900331郑江涛 学生 2022-06-26 00:19:29
这个作业属于哪个课程2022年福大-软件工程;软件工程实践-W班
这个作业要求在哪里软件工程实践总结&个人技术博客
这个作业的目标课程回顾与总结
其他参考文献CSDN、《构建之法》

目录

  • 一、课程回顾与总结
  • 1.1 以前问题的链接
  • 1.2 问题回答
  • 1.3 各阶段收获
  • 1.4 理解与心得
  • 1.5 自我评分
  • 二、个人技术总结

一、课程回顾与总结

1.1 以前问题的链接

提问题的博客

1.2 问题回答

  1. 创新不需要考虑实际问题吗?原链接
  • 解答:
    首先我们要明白创新的意义,创新是为了能够满足需求或者潜在的有可能推动社会发展变革的前所未有的行为。
    在我看来,创新应该分两方面来看,一是基于现有基础,进行改良创造,创新的并不是凭空捏造,而是有迹可循。如某门新的程序语言基于前人的经验基础上所改进,产生的更加适配有针对性的使用;如windows系统不断的更新升级;如通讯技术的更新换代从4g到5g。这些都是传统观念中大家所理解的创新。
    而另一种创新是毫无经验可循,凭空产生,产生的影响足以改变世界进程的创新,如牛顿发现了万有引力,爱因斯坦的相对论,这类足以摧毁人们以往认知而又能够建立起新的科学建筑的翻天覆地的创新。
    如果说前一类创新中,实际问题是基础,需要考虑实际带来的因果关系,而后者的创新则毫无限制。但在软件开发中,我们所需要的创新更多的是前者,即针对用户需求,做出努力,可能涉及到创新,除非你是想要做出颠覆整个行业的壮举。
  • 进一步分析:
    在软件开发中,创新是必不可少的,实际问题也是我们无法避免的,这二者并不冲突,而应该是相互依存,相互影响的关系,即实际中创新,创新中又产生新的实际问题。
  • 新问题:
    如何根据实际问题进行合理的创新?
  1. 软件发展到一定阶段用户体验反而不太重要了?原链接
  • 解答:
    在之前我虽然试着从软件开发者的角度去思考这个问题,但在经历过实际开发后才明白这可能跟我最初的理解有一定的偏差。
    在我们的软件开发前期,我们做了很多需求分析相关的工作,尽可能的去根据用户实际需求来设计软件功能,以期在之后的开发中实现。但当我们真正开始开发,到了中期甚至后期,会发现其实用户的体验或者说需求并不是我们唯一的追求,我们要考虑的软件开发的成本、质量、时限等等。成本又包括人力、物力、财力、时间、学习等成本,我们根本无法做到唯用户至上这一点,而是受到多方面因素的制约,因此我们只能进行折中,寻求多者之间的平衡。所以之前当软件发展到一定阶段后,用户体验同样至关重要,但绝非唯一、拥有最高优先级的需要考虑的因素,其地位与其他制约因素持平,因此可能会显得不太重要,但这都是相对的。
  • 进一步分析:
    软件发展的各个阶段都有其所要注重的方面,用户体验在软件开发全过程中都有一席之地,可能在某一阶段是最重要的,但也绝非贯穿始末,要理性对待,不能唯用户论。
  • 新问题:
    如何在用户体验和开发成本两者间取得平衡?
  1. 结对编程的价值体现在哪里?原链接
  • 解答:
    从实际经历来说,结对编程的价值绝对远超两个人各自编程的效果。虽然说结对编程可能会在合作交流上多花上一些时间,但其带来的好处也是立竿见影的。
    首先是能够帮助开发者有一个更好的选择判断,两个人做出的决定往往来说更优的可能性一定是更大的,也能够帮助一些选择困难症、拖延症的开发者,提高效率。其次是两个人合作将会带来一种心理暗示,足以提升人的信心,让整个项目能够进行得更加顺利。最后是结对编程对于软件开发者来说是一次很好的提升过程。要知道,虽然很多人当下是程序员,但这条道路的前进路程有限,人难免要通过自己的综合素质试着往更高更广的目标前进,而在结对编程的过程中,不仅能够锻炼协作沟通的能力,还能发现自己身上的缺点,看到别人的优点,进而提高个人全方位的能力。
  • 进一步分析:
    结对编程的价值毋庸置疑,体现的方面也是多方面全方位的,其对于一个人的成长来说大有裨益,与传统的老师学生的模式有所区别,值得多进行尝试。
  • 新问题:
    结对编程与团队开发的区别在哪?
  1. 作为”卑微“的乙方,开发团队该如何面对变化无常的需求?原链接
  • 解答:
    在团队项目开发中,我扮演的是产品经理、团队负责人的角色,因此我上面对接的是以老师助教为代表的用户群体,下面管理的是软件开发人员,所以我面对类似的问题,有了一些经验。
    首先便是应允,因为毕竟顾客至上,我们所做的一切软件开发都是为了满足客户的要求,我们也因此获利,所以不要试图强加自己的思想给客户,这行不通,也不合乎情理,客户付钱就是让我们做出他想要的效果。其次是与开发人员进行沟通,得知开发难度,预估开发成本,之后再与客户进行交流沟通,使其明白我们的难处和困扰,开发团队并不是万能的,而只是竭尽所能。尽量与客户达成大体不变的架构,开发团队尽量满足其小的需求改动。最后的最后,实在没有沟通的余地了,开发团队一定要做好心理准备和实际准备,谁让我们是乙方呢。
  • 进一步分析:
    我们要在甲方和开发团队之间达成某种和平相处的情况,开发团队要尽量满足甲方的需求,且要让甲方尽量体会到我们的难处,绝非单方面的努力能够解决。
  • 新问题:
    作为开发团队,我们让步的底线在哪?
  1. 完成任务的预估时间如何预估?原链接
  • 解答:
    (1)根据经验,如果有做过类似任务的经验预估起来将会十分靠谱,经验是最好的老师。
    (2)步骤规范,根据一定科学的指标进行预估。
    (3)预留出额外的时间,来处理突发状况。
    (4)多人预估,取平均值。
    (5)不要小看任务,不要高估自己,以最实际的状态去设想任务的完成情况。
  • 进一步分析:
    完成任务的预估时间这件事经验至上,需要交由有经验的人来完成,比如开发任务就交给开发人员,测试任务就交给测试人员,产品任务就交给产品经理,隔行如隔山,不同任务职责也是如此。
  • 新问题:
    如何把控任务完成时间?

1.3 各阶段收获

(1)需求阶段

需求分析阶段十分的重要,是软件项目开发的开头,也是重中之重。我在需求分析阶段不仅仅认识到了需求分析的重要性,还学到了如何进行需求分析以及需求分析需要注意的地方。需求分析不只是包括了简单的客户明面上提出的需求,作为成熟的软件开发团队,我们还要能够自主去发现背后所隐含的各种要素,如产品的定位,开发目标,用户场景,设计要求,功能描述等。除此之外,我还参与了需求规格说明书的编写,对于类图的绘制、软件设计属性的制定、具体功能模块的界定以及功能验收标准有了一定的经验。

(2)设计阶段

设计阶段包括了原型设计、概要设计、数据库设计等环节。原型设计是与客户进行交涉的重要一环,非常直接地影响了客户的满意度以及产品的完成度。原型设计首先要完善类图,对于整体的架构要清晰具体,尽量呈现客户想要的效果。在该环节,我学习了Axuze的使用,并能够用其设计出原型。概要设计则要设计到功能模块层次设计、数据流图、活动图的绘制,必须能够正确地反映数据的传输,为之后的实现奠定基础。数据库是非常关键的一环,尤其任何一个项目的开发,都避免不了使用数据库,要对数据库的字段等进行反复的审查设计。接口的设计则是开展下一阶段的前置条件,设置正确合理的接口能够减轻前后端的工作量。

(3)实现阶段

到了实现阶段,主要任务就是编程,将之前设计的原型、接口等一一实现。这一阶段需要前后端人员的配合协作,因此不仅代码能力要强,沟通能力也要过硬。我在实现阶段的收获就是,尽量先独立解决问题,实在无法解决了及时询问团队成员,三人行必有我师,可能有你遇到的麻烦已经是别人走过的弯路,就可以快速的解决。alpha和beta冲刺阶段的任务又不尽相同,前者更侧重与基础功能的开发,在此我学习了许多springboot的后端知识,而后者更注重的是完善优化,主要还是在用户使用体验和功能优化上下功夫。因此每个阶段都有自己的任务,要学会适应不同的环境。

(4)测试阶段

测试阶段往往和实现阶段是混合在一起的,因为我们的测试工作基本由开发人员自己完成。在每一部分功能开发后,我都会要求组员进行单元测试,然后集成测试,最后是系统测试。在测试过程中重大的错误很容易被发现修复,而细小的bug容易被忽视,因此代码互审也是不错的方式。这个阶段,我学习软件测试的多种方法,还学习如何写出简介清晰的测试文档。

(5)发布阶段

发布阶段对于开发人员是要将项目部署到服务器上。经验告诉我们,一定要进行多次调试再进行发布,否则容易闹出笑话。对于产品经理来说,如何将产品的宣传做大做广,吸引更多的用户使用是一件头疼的事。我在这方面学习了宣传文案的编写,问卷的问题设置以及多种宣传方式,力求产品能够吸引更多人的目光。虽然说产品质量很重要,但好的项目也要能够被人看见。我们要学会利用一切可利用的资源,将产品有新意、有范围地展开推广,还要对用户反馈做出一定回应,根据他们的意见进行一定的完善优化。

1.4 理解与心得

个人项目

  • 该课程前期的一些作业都为个人独立完成。
  • 从寒假作业中的阅读《构建之法》开始软工实践,首先要培养我们的是软件工程的这么一个概念。与以往几个学期的单一程序语言的学习区别的是,软件工程是一门工程类课程,考察的更多的不是语言的掌握使用能力,而是作为一个软件从业者参与项目开发流程的能力。
  • 《构建之法》该书能够很好地为初入门软件工程的人提供很多问题的解答,更难能可贵的是收录了很多相关问题,可能你有某一方向的困扰,却无法准确表达。通读该书,我们能够从多方面地了解软件工程到底是什么,该怎么做,为什么这么做,无疑是一位启蒙老师。
  • 在稍后的冬奥会奖牌统计输出的作业中,我学习到了很多已经遗忘或者从未接触过的知识。这让我能够更加得心应手地面对即将到来的结对项目以及团队项目。尤其是gitcode的使用,是后面团队开发必不可少的工具之一,提前熟悉使用也能够减轻后续的学习压力。
  • 一些概念的提出,代码的规范,博客的要求,让我完成任务更加有条不紊。PSP表格让我养成了做前预估,做完反思的习惯。
  • 前期的博客作业让每个人养成了一定的写作习惯,于是在alpha和beta冲刺阶段站立式会议时讨论自己的进展和安排等便言之有物,写下心得体会时也不在笼统。

结对编程

  • 结对编程部分是想让我们体验到结对的价值与好处,更是提前适应团队项目的必经之路。
  • 在结对过程中,两个人应该是同心协力,共渡难关,绝不能互相推卸责任,既不能过于倚仗队友,也要给予其充分的信任。只有在两个人的力都拧成一股绳,才能发挥出结对编程最大的效应。
  • 结对编程提升的不只是工作效率、工作质量,降低了时间成本、人物力成本,还能够提升双方的综合能力、个人素质等,绝对是对个人的成长大有帮助。
  • 在结对编程中,我与我的队友都发挥了各自的长处,能够较好地完成任务,从中也得到了提升,及时弥补了个人的缺点。
  • 结对项目的开发让大多数的人提前学习了vue+springboot,因此在项目alpha冲刺开始后可以尽快地投入到开发中,无需在前期耗费大量的时间进行学习新技术。

团队项目

  • 团队项目是极具考验的一项重大任务,完成下来还是花费了不少心思和时间的,但同时收获也是十分巨大。
  • 对于alpha阶段,我的体会是前期的准备越充分,后期的开发工作越顺利。在前两个月,同学们经过了一系列作业的“磨砺”,无论是在能力上还是心态上都有了很大的提高,这对于整个项目的开发大有好处。而alpha冲刺前的几次项目的分析设计任务,如选题报告、需求分析、概要设计和数据库设计等,让我们更加清晰地知道开发方向和目标,也能在软件架构、代码编写上更加合理,整个项目完成起来也更加顺利。
  • 在beta阶段,我主要负责团队换组协商,alpha阶段问题总结,开发计划制定,任务分工,数据资料收集,组织召开站立式会议,制作用户调查报告,答辩以及为组员们提供后勤保障。与alpha阶段不同的是,软件的主要功能已经完成,beta阶段的任务量会少很多,所以许多开发人员的工作量会减少,但是相对直接的编程,更为重要的是发现问题,例如:软件的UI界面是否美观,功能是否实用,运行速度是否能够匹配日常使用,如何推广我们的软件,如何吸引用户使用等等。因此,我阅读了大量的相关资料,进行了多方面的学习,拓展了视野。
  • 身为团队组长,同时是团队的PM、管理者一类的身份,与其他主力开发不一样的感觉是,我的时间大部分并不是投入在编程部分上,而是能够更完整地体会整个软件开发的过程,是多么的需要经验和能力。我也是第一次管理一个10人开发团队,所以面临着很多的困难和挑战,不仅要分工好组员的任务,还要协调好他们之间的配合,更要调动组员的开发积极性,需要学的东西还有很多,在这次的过程中也提升了很多方面的能力,不仅仅是停留在程序开发上,更多的是管理和组织能力。
  • 直观的感觉,我面向的更多是形形色色的人,以及各种各样的问题,包括组员们遇到的前、后端中的问题,课程的任务安排以及与评审小组和用户的交流沟通,这些都很大程度上丰富了我的人生经验,提高了我的综合素质。

1.5 自我评分

目标分数理由
目标195我深刻地体会到身为一名软件行业从业者,我们所要遵守的职业道德规范和底线,对于项目产品对社会的影响也有所重视,我们的Nav项目开发理念积极向上,旨在为福大学生提供便利性服务,符合社会主义核心价值观。
目标290在需求分析阶段,我扮演了客户提出多样化的要求,并且能够使用Axuze等工具构建需求分析模型等,实现满足客户的需求。
目标395我参与了软件开发的全过程,管理团队完成概要设计、数据库设计、代码编写过程;我遵循体系结构设计方法和基本设计原则,对各个阶段每个部分都进行评审验收。
目标495我在软件评测作业中取得了不错的成绩,得到了评审网站的认可,具备设计模型的评判能力。
目标590我参与编写各阶段的文档,查找相关资料制定了文档标准,并在每份文档完成后进行了验收检查。
目标698我作为组长,能够协调好每一次团队任务,做好组员分工协作,并且在其遇到问题时第一时间帮助其解决,具有良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作。
目标795我能够选择合适的工具对团队和项目进行管理,如teambition、在线文档、线上聊天等工具,或者通过会议等形式对项目进度进行规划,对项目管理过程进行配置。

二、个人技术总结

个人技术博客——Springboot项目部署到服务器
概述:jar打包springboot部署到服务器,Springboot框架使用内嵌的Servlet容器如Tomcat,Netty等,无需以war包形式部署项目。通过独立运行jar,可以很快部署准生产级别的项目。

...全文
71 回复 打赏 收藏 举报
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
发帖
2022年福大-软件工程、实践-W班

136

社区成员

2022年福大-软件工程;软件工程实践-W班
软件工程 高校
社区管理员
  • FZU_SE_teacherW
  • 丝雨_xrc
  • Lyu-
加入社区
帖子事件
创建了帖子
2022-06-26 00:19
社区公告
暂无公告