软件工程实践总结——砥砺前行,展望未来

222100229俞炜昆 2024-06-06 23:13:01
这个作业属于哪个课程2302软件工程社区
这个作业要求在哪里软件工程实践总结&个人技术博客
这个作业的目标课程回顾与总结、个人技术总结
其他参考文献《构建之法》

目录

  • 一、课程回顾与总结
  • 1 课程回顾
  • 1.1 寒假思考的博客链接
  • 1.2 对于课程开始前的问题,有何新感悟
  • 1.2.1  问题1:”学生用GPT-4来做作业,教师应该如何甄别呢?
  • 1.2.2  程序员是否有必要为满足小部分人的需求去做软件,或者为软件添加某些功能?
  • 1.2.3  有了GPT类的应用,传统的搜索引擎是否会被完全替代?
  • 1.2.4  单元测试应该由谁来写?
  • 1.2.5  写博客也会花挺多时间的,如果把这些时间花在写代码上面会不会更好?
  • 1.3 新的问题
  • 2 做中学
  • 2.1 需求阶段
  • 2.2 设计阶段
  • 2.3 实现阶段
  • 2.4 测试阶段
  • 2.5 发布阶段
  • 3 心得与理解
  • 3.1 个人项目
  • 3.2 结对编程
  • 3.3 团队项目
  • 4 自我评分
  • 二、个人技术总结

一、课程回顾与总结

1 课程回顾

1.1 寒假思考的博客链接

软件工程实践寒假作业

1.2 对于课程开始前的问题,有何新感悟

1.2.1  问题1:”学生用GPT-4来做作业,教师应该如何甄别呢?
  • 原回答:

GPT-4等AI工具生成的文本通常具有高度的可预测性和相似性,教师可以比较同一班级不同学生的作业,如果有很多相似或完全一样的句子、段落,那么就应该怀疑有没有是ChatGPT生成的可能。并且现在的市面上的一些检测软件也很多,可以通过检测软件来甄别

  • 新答

教师可以采用多种策略来甄别学生是否使用GPT-4来完成作业。除了使用检测软件外,教师可以通过了解每个学生的写作风格和水平来进行判断。此外,可以增加面对面的讨论和即兴写作任务,从而更好地评估学生的真实能力。同时,鼓励学生在作业中加入自己的独特见解和实践经验,这有助于识别纯AI生成的文本。

1.2.2  程序员是否有必要为满足小部分人的需求去做软件,或者为软件添加某些功能?
  • 原回答:

具体问题应该具体分析,一个软件的诞生就是为了解决某些问题,具体来说,如果这些人提出的要求确实对于处理问题有更好的帮助,在开发成本允许的情况下,就应该满足这一小部分人的要求。如果提出的需求是吹毛求疵的,对于软件的使用体验没有很好的增加的,甚至开发这个功能所需要的成本远大于收益,那么开发团队就应该好好斟酌一下这个功能到底需不需要添加。

  • 新答

作为产品和项目的管理者,要做好需求分析,辨别是否为伪需求。对于真实需求,需要继续评估开发难度和投入产出比。最重要的是具体问题具体分析,保持敏锐的产品洞察力和用户思维。满足小部分人的需求有时可以提升产品的独特性和用户忠诚度,但需要确保开发成本与潜在收益之间的平衡。

1.2.3  有了GPT类的应用,传统的搜索引擎是否会被完全替代?
  • 原回答:

传统的搜索引擎有着它的独特的优势,通过关键词匹配,搜索排名等技术也会用户带来大量的信息。而ChatGPT类应用为用户提供了智能且个性的服务,在我看来,未来这两个应用的定义边界会越来越模糊,它们会互为补充,为用户提供更好的服务。短时间内,肯定不会被完全替代,长远来看,随着技术发展,我觉得它们互相融合的可能性更大。

  • 新答

传统搜索引擎和GPT类应用各有其独特优势。搜索引擎能够快速提供大量信息和链接,而GPT类应用则提供详细的、上下文相关的回答。未来,两者可能会融合,结合搜索引擎的广泛信息获取能力和GPT的智能回答能力,为用户提供更全面的服务体验。短期内,它们会共存互补;长远来看,技术的融合将带来更多创新的使用场景。

1.2.4  单元测试应该由谁来写?
  • 原回答:

虽然测试代码应该由最熟悉这个代码的人来写,但是写代码的人有着一种天然的局限性。可能会有着自己写的东西不会出错的心态,或者根本发现不了自己的错误。所以开发团队中应该由专门负责测试的人来写单元测试。至少不能全部都是开发者来写单元测试,这样子对于测试的有效性会大打折扣。

  • 新答

在实践中,单元测试的编写应当是开发者和测试人员共同的责任。开发者编写初步的单元测试可以确保代码的基本功能正常,而专门的测试人员则可以提供更全面、更有深度的测试覆盖,从而确保代码的健壮性。结合两者的优势,可以显著提升代码质量。

1.2.5  写博客也会花挺多时间的,如果把这些时间花在写代码上面会不会更好?
  • 原回答:

我觉得博客就是文档,用于记录开发过程中的心得体会,技术要点什么,多写写总是有好处的。写博客的过程就是对于开发过程的总结,自己会自发的进行思考。对于技能可以更好的理解,并且现在的博客有很多模版,可以通过利用模版来提高写作效率。当然了,学习工作中要分清轻重缓急,需要把任务完成了之后利用空闲时间多写写博客肯定比闷头写代码要好。

  • 新答

写博客不仅是记录和总结的过程,更是自我反思和知识沉淀的机会。通过写博客,我可以梳理思路,加深对技术的理解,同时为他人提供学习资源。虽然写代码是直接的生产活动,但写博客可以帮助我更好地理解和掌握所学知识,从而在长远上提高自己的编码效率和能力。因此,合理分配时间,既专注于代码开发,又积极记录和分享心得,是一种有效的学习和成长方式。

1.3 新的问题

  • 软件开发团队如何在快速变化的需求中保持敏捷和高效?
  • 软件开发团队如何应对AI带来的自动化挑战,保持核心竞争力和创造力?

2 做中学

2.1 需求阶段

在这次课程中,我作为组长,主要负责产品和AI开发,在需求分析和沟通工作参与较多,这让我在需求分析和沟通能力上有了显著提升:

  • 需求分析:我和我的组员共同进行了市场调研,深入了解用户需求,并将这些需求转换成具体的产品概念。并结合现在AI能力的真实边界,以及未来三年可能发展到的高度,充分考虑技术困难和市场前景。此外,我还对市面上绝大部分竞品进行了详细调研,使用各种需求分析方法,确保打造出一款具有竞争力的产品。
  • 沟通能力:作为组长和产品经理,我需要与利益相关者和团队成员保持高效的沟通。与利益相关者的沟通,确保需求被正确理解和记录;与团队成员的沟通,帮助我们在开发过程中保持一致,解决分歧,并通过数据和事实来推动决策。

2.2 设计阶段

在设计阶段,我参与了前端设计,收获颇丰:

  • UI设计:我学习并上手了Figma,能够在团队内部维护一套设计和开发共同遵守的规范。这样的规范不仅提高了设计和开发的效率,还保证了项目的规范程度,利于后期的维护与迭代。

2.3 实现阶段

在实现阶段,我在技术和团队管理上都有很大收获:

  • 技术学习:我深入学习了AI开发,掌握了agent等概念,并运用LangChain结合FastAPI进行AI的开发。这个过程包括封装不同模型类、运用工具的能力、实现流式传输等关键技术,使我在AI技术方面有了全面的提升。
  • 团队分工:作为组长,我学会了合理安排团队成员的分工,编写简单的文档和入门教程,帮助同学们快速上手。通过这种方式,我们整体上提高了团队的工作效率和协作能力,确保项目的顺利进行。

    2.4 测试阶段

在测试阶段,我对测试的重要性有了更深刻的认识,并学习了许多新的测试方法和工具:

  • 单元测试:尽管在平时自己写代码时,常常会忽略编写单元测试,但通过这次项目,我深刻体会到单元测试的重要性。单元测试不仅可以提前发现代码中的问题,还能在后续的代码重构和功能扩展中提供保障。

2.5 发布阶段

发布阶段让我在生产环境部署上学到了很多:

  • 生产环境部署:在后端同学的帮助下,我学会了使用Docker Compose进行生产环境的部署。这个过程包括从源码上传到Docker容器的启动,逐步掌握了Docker的使用和配置技巧。通过编写详细的快速部署文档,大大提高了多次部署的效率,确保了系统的稳定运行。

3 心得与理解

3.1 个人项目

通过这个项目,我复习并巩固了Java的相关语法,并掌握了如何从网络源获取数据。项目中,我对数据进行了深入的分析和处理,并进行了性能优化。同时,还熟悉了单元测试框架JUnit的使用。

项目的最具挑战性的部分在于:

  • API接口调用:理解如何精准地利用API接口提取数据是关键。我花费了大量时间研究不同API的使用方法,确保能够高效获取所需数据。
  • JSON数据处理:从结构复杂的JSON数据中筛选并整理出关键信息。这需要深厚的JSON解析经验以及熟练的Java编程技巧。
  • 文件操作:学会了如何有效地从文件中读取数据,对数据进行处理,然后将最终结果存回文件中。这不仅加深了我对文件操作的理解,也提高了我对项目规范的要求。

这次实践不仅提升了我的API调用技巧和JSON数据处理能力,还强化了我在文件操作和项目规范方面的技能,使我在未来的项目中能更自信地应对类似的数据处理挑战。

3.2 结对编程

结对编程环节很幸运组到了一个认真负责的大佬,我们一拍即合,在前期一起制定了项目的分工,各司其职,我们选用vue+springboot的主流前后端方案,共同学习,互相探讨,最终圆满地完成了任务。这次合作不仅提高了我的技术水平,也让我深刻体会到团队合作的重要性和乐趣。

3.3 团队项目

这个项目我们前期构思了很久,进行了大量的需求分析和市场调研。不过,最初设想的项目有点过于庞大,包含了很多功能,以我们团队目前的规模和技术水平,短时间内很难实现一个比较精良的成品。所以我们只能精简了很多功能,把目标定在确保整个流程能够顺利跑通上。但实际上,为了实现这个目标,我们需要涉及到很多复杂的技术,比如AI、系统架构、第三方平台对接、以及编辑器等等。在项目启动阶段,我们花了很多时间调研各种功能需求的解决方案,并与开发团队一起开会讨论,最终确定了适合我们项目的解决方案。经过多次文档之间的来回查阅和核心框架的搭建与调试,我们终于搭建好了项目的基本框架。接下来,我们把各个模块分配给团队成员进行开发。虽然大部分成员都是第一次使用这些技术框架,但他们的学习能力很强,最终我们成功地实现了整个流程的顺利运行,达到了最初的预期目标。

4 自我评分

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

二、个人技术总结

在LangChain中使用国产大模型调用Tools的实践总结
概述:主要讲了如何在LangChain中集成和调用国产大模型,并调用tools,解决流式传输的问题。

...全文
194 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

122

社区成员

发帖
与我相关
我的任务
社区描述
FZU-SE
软件工程 高校
社区管理员
  • LinQF39
  • 助教-吴可仪
  • 一杯时间
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧