软件工程实践总结——学无止境

这个作业属于哪个课程 福州大学-202302软件工程实践
这个作业要求在哪里软件工程实践总结&个人技术博客
这个作业的目标课程回顾与总结、个人技术总结
其他参考文献《构建之法》、React中文文档Ant Design


一、课程回顾与总结

1.1、以前问题思考的博客链接

软件工程实践寒假作业-222100122洪冠诚

1.2、对自己曾经思考过的问题再次进行解答

Q1代码量与个人的编码能力有直接关系吗?
A1

代码量与个人的编码能力确实存在一定的关系,但是并不是简单的线性关系。经过了这学期的实践,我更加明白了,编码能力是一个多维度的概念,它不是单一的用代码量来衡量的,它包括但不限于编程语言的熟练度、算法和数据结构的理解、软件设计原则的应用、问题解决能力、代码的可读性和可维护性等。
因此,不应该仅仅用代码量来衡量一个程序员,这是非常片面的。但是一般情况下,个人的编码能力确实会随着代码量的增加而提升。但是如果是持续地“灌水”,而不追求代码质量的话,那最终也会止步于此,不再成长。

Q2学完了这些理论知识后很久的一段时间都用不上,那么学习那么多的理论知识还有没有用呢,在理论知识和实践知识的方面我们又该怎么权衡呢?
A2

理论与实践究竟谁更重要?我想这是一个自古以来不断被争论的话题。我认为,理论知识和实践知识对于一个人的成长来说是同样重要的。计算机是一门工程学科,空有理论而缺乏实践的话,是难以将理论知识转化为实际的,实践是检验真理的唯一标准,只有实际做过,才能检验理论的有效性、正确性。光实践而不扩充理论知识的话,会与前沿的方法和知识脱钩,难以为实践带来助力。
本学期设置了“软件工程”与“软件工程实践”这两门课,我想正是出于此目的,“软件工程”这门课为我们扩充理论知识,“软件工程实践”让我们的理论知识得到了很好的用武之地。
但是一个人的时间和精力都是有限的,面对浩如瀚海的知识,我们应该有所取舍,对于重点的理论知识,应该要更多地进行实践辅助理解。

Q3大模型+CoPilot 会成为银弹,还是阻碍了初级程序员的成长?
A3

大模型对于初级程序员的影响,我认为是多方面的。
从积极的一面来讲,它可以帮助程序员提高编程效率,节省繁琐的工作,将精力用在核心模块的编写上。在本学期的众多代码任务中,我也经常使用大模型指导我编写代码大大提高了我的效率,也能帮助我尽快地上手一门语言或者一项技术。
从消极的一面来讲,如果初级程序员太过依赖大模型,什么都让大模型做,这将会导致程序员的编程能力下降,如果到了真正需要考验独立编码能力的时候,就傻眼了。
因此我们需要辩证地看待,尽力发挥大模型积极的一面。

Q4如何让自己能够跟上软件工程发展,做一个永不落伍的开发者呢?
A4

想要跟上软件工程的发展,做一个永不落伍的开发者,我认为最重要的还是保持终身学习的态度,不要想着一劳永逸。
在计算机这个行业中,技术发展和更新迭代是很快的。就好比四五年前,我们还不知道如今会有大模型如雨后春笋般蓬勃发展,在现在的大语言模型时代,如果不积极地去拥抱它,迟早会被时代淘汰。要有持续探索新技术的决心,跟上时代的潮流。十几二十年前的程序员们在开发程序的时候,可能也想不到如今会有这么多方便的框架如SpringBoot等能够提高程序员的开发效率。但再过十几二十年,甚至再过四五年,可能有会有更强大的新技术来取代它。
因此我认为想要跟上发展,最重要的就是保持终身学习的态度,不断进取。

Q5想从事软件开发的大学生是去企业实习成长更快还是在学校实验室实习成长更快呢?
A5

这个问题的答案,我想还是根据实际情况而定。应该要根据企业和学校实验室的实际情况来定夺。
学校实验室实习:实验室更注重理论研究和学术探索,我们可以接触到最新的研究成果和技术,进行深入的学术研究。在提高研究能力和创新思维的同时,未来也有可能将研究的成果应用到软件开发当中。
企业实习:企业通常提供实际的工作环境,我们可以接触到真实的项目和业务流程,学习到企业的工作方式和文化。能够参与到真实的软件项目开发当中,了解开发的全过程,对就业市场和用户需求也会有更进一步认识。

1.3、新问题的提出

Q1:在软件开发中,如何评估和选择合适的开发框架或工具?
Q2:在多团队协作的大型软件开发项目中,如何确保沟通的有效性?
Q3:软件测试中,如何平衡自动化测试和手动测试的比例?

1.4、五个阶段的收获

1.4.1、需求阶段

在需求阶段,我们需要认真去调研市场和用户的需求。在这个阶段中,我学会了使用NABCD模型去进行需求分析。NABCD分别代指Needs、Approach、Benfits、Competitors、Delivery五个部分。
Needs就是要通过识别和理解目标市场和客户群体的需求,可能通过问卷调查、实际采访等手段。
Approach就是要思考如何满足这些需求。包括人员的分配、职责、开发方式、如何与市场互动等。
Benfits就是向潜在客户展示产品或者服务的优点,能为客户带来哪些好处。
Competitors这个阶段是分析竞争对手有哪些,了解他们在市场中的位置。分析我方的优势和劣势以及我方该如何提高竞争力。
Delivery就是思考如何将产品和服务推向更大的市场,使得被更多的人接受和使用。
在以前做项目的时候,根本不会想这么多,基本就是想到什么是什么。通过需求阶段,我学会了使用NABCD模型对项目进行更加全面而系统的分析,站在用户的角度上思考问题,这会更加明确开发人员要做什么样的一款产品。

1.4.2、设计阶段

在设计阶段,我学会了如何进行原型设计、数据库设计和系统设计
在原型设计的过程中,我学会了如何使用原型设计工具进行原型设计。我所使用的原型工具是“即时设计”,它提供了强大的动画效果,展现出来的界面美观大方。并且我还学会了页面切换跳转、轮播图的使用、定义事件等。在以前做项目的时候,直接就是上手开发了,但是这样做如果是在真的实际开发中,有可能发现与用户需求不匹配,而且开发周期太长。原型设计有助于我们快速开发一个“产品”,验证自己的想法和用户需求是否匹配。极大地方便了后续的开发,也使得后续开发更加明确。
数据库的实际设计虽然不是我直接做的,但是我有参与数据库设计说明书的编写,了解到了数据库设计是如何进行的,如何进行表结构的设计,ER图的绘制。数据库设计人员设计完表结构和ER图后,交由文档撰写人员进行内容的整合与补充。一个好的数据库设计是很重要的,这关系到后面开发人员的开发工作。
系统设计中,我参与了用况图的设计与类图的设计,并且也负责最后的系统设计说明书的编写。这个阶段也让我更加明白项目是如何一步一步构建出来的,是如何进行结构优化的。在系统设计的时候也需要和相关人员进行反复讨论和迭代,并提供相关的接口设计,详细展现项目的内部结构,方便后续开发人员的工作。

1.4.3、实现阶段

在实现阶段中,我主要负责文档的撰写以及一部分代码的开发。由于组里已经有了比较有经验的前端开发人员,因此我主要参与一些UI界面元素的编写。并且在结对编程时,由于自己使用的是react框架,与现团队中主要使用的vue框架有所不同,因此还需要重新学习,但尽管如此,我也没有就此懈怠,而是积极学习vue的相关知识,为组里的项目开发做出自己的贡献。
在这个阶段我最大的收获应该就是同时学习了两门前端的开发框架,react和vue。比较遗憾的是,由于时间原因,并没有能够进行很深入的学习。但在之后的学习生涯中,我会根据个人发展的需要,选择一个开发框架进行深入研究。

1.4.4、测试阶段

在测试阶段,我主要负责文档的撰写以及一部分功能的测试,包括使用测试工具测试以及用户移动端模拟用户进行测试。由于之前已经学习过《软件质量与测试》这门课,所以对测试理论知识已经有了一定程度的掌握,使用的方法包括但不限于边界值测试、等价类划分法等。
在使用测试工具进行测试时,我主要使用的是APIPost这个测试工具。APIPost是一个用于API开发和测试的工具,它提供了API设计、测试、文档生成和团队协作的功能。APIPost允许用户创建测试用例,自动执行这些测试用例,并生成测试报告。用户也可以手动发送API请求,查看实时的请求和响应数据。换做以前,我大概只会在各个模块开发完后分别进行测试,最后拼接到一起时再测试一遍。这个阶段也让我的测试理论知识和实践知识都得到了充分的锻炼。

1.4.5、发布阶段

在发布阶段,我们团队是将项目部署到华为云服务器上。虽然我没有直接参与项目的部署,但是我也帮忙寻找和整理了一些其它服务器与华为云服务器的区别。多亏了团队成员之间良好的配合,我们的项目总算圆满落地。我也学习到了很多有关项目部署的知识。

1.5、结合经历谈论心得

1.5.1、个人项目

个人项目是文件的读取,也是最早开始的。由于是布置在寒假,因此感觉不是很着急,就慢慢拖,到最后感觉可能来不及了就拼命赶。这是我感觉不太好的地方,但好在我在后来的作业中都改正过来了,基本上都能按照自己的计划循序渐进地完成。在文件读取这个项目中,我学习了如何解析Json文件,如何使用JUnit进行单元测试以及打包成jar包,对使用java开发项目也更加熟悉了。我也学会了使用maven来管理项目,并且使用maven实现“一键打包”,是个非常方便的工具。感觉比较遗憾的是,因为自己开始的比较晚,担心自己可能来不及完成。扩展部分以及一些详细的测试和优化没有能够做的更好。但是我会吸取这次的经验教训,在未来的学习和工作中加以改进。

1.5.2、结对编程

结对编程是我参与的第一个二人开发项目,以前的项目(作业)基本都是自己一个人开发的。结对编程首先是二人合作先进行项目的原型设计,仔细想来,这还是我第一次听说过“原型设计”,之前一直以为项目都是直接上手开发的,也第一次使用了原型工具快速地完成了一个项目的“搭建”。原型设计能够帮助我们快速印证自己的想法,确保后续项目的实际开发能够尽量贴合我们的构想。在后续的编程实现中,因为我和队友之前都没有前端开发的经验,对于前端也只会上学期学过的html,css和javascript。我和队友最终决定采用react作为使用的前端框架。通过网上的各种教程,我们在尽量短的时间内入门了react,并且成功1:1地实现了原型设计。
结对编程需要两个人之间的支持和鼓励,也需要一起坚持到底的决心,两个人的想法不断磨合,不断贡献出自己的一份力量,产生1+1>2的效果。我很庆幸我的队友愿意和我尽心尽力地完成它。总的来说我的结对编程也比较顺利,也体会到了结对编程的意义所在。

1.5.3、团队项目

团队项目期间,我也很庆幸我能拥有一群靠谱的队友。每位队友都愿意做好自己的被分配到的任务,不会突然消失或者一直已读不回。组长每次在任务发布当周的周五晚上都会统一召开会议,期间由我担任“任务讲解员”,分析此次作业需要完成哪些任务、有哪些需要注意的点。在开会完毕后,会大致分配好组内的任务。不同类别的任务再由相应的“小组长”继续细分。这样层层有序的管理也让我们的项目总体来说得以顺利推进。
团队项目开发的过程中,我认为最重要的是大家愿意一起攻克难关的态度。即便说某些同学技术方面不是很强,但是只要愿意学习,愿意配合,贡献出自己的一份力量,也能为项目的开发添砖加瓦。在此期间,我也体会到了团队项目的完整开发过程,而且有一群靠谱的小伙伴的确非常令人安心,每个人都可以安心做好自己的工作,而不是在操心自己的工作的同时,别人的工作也需要自己“一手包办”。
一路走下来,我对软件工程项目管理不仅有了更加深刻的认识,同时自己的技术栈也得到了扩充,总的来说收获很多。

1.6、自我评分以及解释

  • 目标1: 理解软件工程师的职业道德规范和实践要求,了解国情社情民情,理解软件产品对社会、健康文化等影响,树立积极向上的软件开发理念。
  • 目标1评分:95分。
  • 目标1解释:经过一学期的学习,我充分理解了软件工程师需要遵守的职业道德规范和实践要求,不会违反国家法律法规,所做的项目也是理解产品对社会、健康文化等的影响,树立了积极向上的软件开发理念。让所做的项目为国家和社会发展做出贡献。
  • 目标2: 掌握需求分析的全过程,能辨别客户表述的多样化要求,熟练使用需求表达工具,能够规范、准确地表达客户的需求,构建需求分析模型。
  • 目标2评分:90分。
  • 目标2解释:经过本学期的软件工程实践,我学习了需求分析的全过程,能够熟练运用NABCD模型进行需求分析,并使用相应的原型设计工具进行快速原型开发。
  • 目标3:掌握软件开发的全过程,遵循体系结构设计方法和基本设计原则,通过正式的技术评审,完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案。
  • 目标3评分:85分。
  • 目标3解释:经过本学期的软件工程实践,我了解了软件开发的全过程,学习了体系结构设计方法和基本设计原则,通过撰写相关文档说明书以及和团队成员的共同讨论交流,已经拥有一定的完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案的能力。
  • 目标4: 能够执行从组件到软件系统的技术评测,具备设计模型的评判能力,具有创新设计意识,能够优选设计方案。
  • 目标4评分:85分。
  • 目标4解释:经过本学期的软件工程实践,我已经拥有了一定的执行从组件到软件系统的技术评测,具备设计模型的评判能力。也具备了一定的创新意识
  • 目标5:遵循软件开发各阶段文档标准,采用规范的表达,掌握需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法,具备与业界同行交流能力。
  • 目标5评分:95分。
  • 目标5解释:在本学期的软件工程实践的文档撰写中,我负责撰写并整合需求规格说明书、系统设计说明书、系统测试报告等文档,并遵循软件开发各阶段文档标准,具备了与业界同行交流能力。
  • 目标6: 具有良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作;能够组织、协调或指挥团队开展工作。
  • 目标6评分:90分。
  • 目标6解释:我在团队项目的开发过程中,始终保持良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作,并能够组织、协调或指挥团队开展工作。作为“小组长”分配、组织、协调团队成员的工作。
  • 目标7:能够辨别具体软件项目管理中涉及的构成要素,掌握软件规模和工作量的估算方法,能够选择合适的工具规划软件进度并对项目管理过程进行配置,具备初步的管理复杂软件工程项目的能力。
  • 目标7评分:85分。
  • 目标7解释:在本学期的软件工程实践中,我学习并掌握了软件规模和工作量的估算方法,在团队项目中也通过项目燃尽图等方式记录任务工作量,能够选择合适的工具规划软件进度并对项目管理过程进行配置,具备初步的管理复杂软件工程项目的能力。

二、个人技术总结

2.1、博客链接

个人技术总结——Json数据解析配合React组件库渲染数据

2.2、概述

React是一个用于构建用户界面的JavaScript库,适用于单页应用程序(SPA)和复杂的用户界面开发。React通过组件化架构和虚拟DOM实现高效的UI更新和管理,增强了开发效率和应用性能。此技术广泛应用于各类Web应用开发,包括内容管理系统、社交媒体平台、电子商务网站等。学习React可以显著提高前端开发技能,使开发者能够创建响应迅速且维护方便的Web应用。React技术的难点在于其状态管理和组件通信,需要熟悉JavaScript、异步操作和前端设计模式等知识。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值