软件工程实践总结_千淘万漉虽辛苦,吹尽狂沙始到金

222100119柯昊旸 2024-06-01 19:54:38
这个作业属于哪个课程<2302软件工程社区-CSDN社区云>
这个作业要求在哪里<软件工程实践总结&个人技术博客-CSDN社区>
这个作业的目标软件工程实践总结与个人技术博客
其他参考文献《构建之法》

目录

  • 第一部分:课程回顾与总结
  • 1.1 以前问题思考的博客链接
  • 1.2 试对自己曾经思考过的问题再次进行解答
  • Q1: 在一个被认定为“足够好”的软件发布后,得到的用户反馈中,哪些是有用的?什么时候才能将这个软件优化到相对稳定的版本?)
  • Q2: 认为软件系统十分复杂是不是因为软件工程还没有充分发展?
  • Q3: 有了GPT类的应用,传统的搜索引擎是否会被完全替代?
  • Q4: “过早优化是一切烦恼的根源”:那么,如何界定早晚?
  • Q5:如果在扩展功能时发现接口设计错误或考虑不周应该怎么办?
  • 1.3 产生的新问题
  • 1.4 请问你在项目的需求/设计/实现/测试/发布阶段(一共5个阶段)中,每个阶段收获最大的知识或能力是什么?
  • 1.4.1 需求阶段
  • 1.4.2 设计阶段
  • 1.4.3 实现阶段
  • 1.4.4 测试阶段
  • 1.4.5 发布阶段
  • 1.5 结合自己在个人项目/结对编程/团队项目的经历,谈谈自己的理解或心得
  • 1.5.1 个人项目
  • 1.5.2 结对编程
  • 1.5.3 团队项目
  • 1.6 自我评分对七大课程目标的掌握程度(百分制)
  • 第二部分:个人技术总结

第一部分:课程回顾与总结

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

https://bbs.csdn.net/topics/618073512

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

Q1: 在一个被认定为“足够好”的软件发布后,得到的用户反馈中,哪些是有用的?什么时候才能将这个软件优化到相对稳定的版本?)

​ 在阅读《构建之法》后重新审视这个问题,我认识到这一进程远比初认知的更为细腻且动态。收到的用户反馈中,详尽的用户报告、系统的性能监控数据,以及直接的用户交流与调研都是相当有用的。

​ 至于何时能使软件达到相对稳定的状态,这是一个伴随着时间推移与持续优化的渐进过程。借助数据分析的力量,我们可以科学地评估软件的性能表现与用户满意度,为迭代决策提供坚实的依据,因为这不仅仅是修复已知错误,更是要在反馈循环中不断学习与适应。

Q2: 认为软件系统十分复杂是不是因为软件工程还没有充分发展?

​ 面对软件系统的复杂性,我们应持开放态度,视其为一个持续探索与创新的领域,而非静止不变的难题。

​ 在实践过程中,我通过更加智能的自动化工具、更为先进的项目管理策略,以及对人工智能与大数据的深入应用,来进一步优化软件开发生命周期,促进软件系统的高效构建与维护。尽管客户的需求随市场和技术趋势不断演变,使得软件不仅要解决当下的问题,还需具备足够的灵活性以应对未来的挑战,但是软件工程领域一直在积极应对这些挑战,从面向对象编程、设计模式,到敏捷开发、DevOps文化,再到微服务架构、容器化与云原生技术,每一次革新都是对复杂性管理能力的显著提升,因此断言软件工程的发展滞后于软件系统复杂性的增长,未免有失偏颇。

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

​ 在生产实践中深度体验了传统搜索引擎和生成式人工智能后,我依然认为GPT类应用与传统搜索引擎各有所长,更可能在未来共存并形成互补。

​ 传统搜索引擎的优势在于其广泛索引互联网的海量信息,几乎囊括了所有公开可访问的内容,而GPT类应用的强项在于理解和生成自然语言,它们能够基于已有的知识库创造性的回答问题,提供个性化的交互体验。GPT或将进一步融入搜索技术,增强搜索的智能化与互动性,而传统搜索引擎的核心价值——广泛索引与即时更新,则将继续作为信息检索的基石。两者融合的发展路径,或许才是信息时代进化的下一个篇章。

Q4: “过早优化是一切烦恼的根源”:那么,如何界定早晚?

​ 在深度参考了泛普软件的软件工程项目计划管理系统后,我对软件工程项目优化有了全新的认识。

​ 界定“过早优化”的时机确实是一门艺术,它要求我们在敏捷思维与实际操作之间找到平衡,我们应该应该首先定义清楚项目的需求、功能和性能要求,然后再考虑优化。过早地深入到细枝末节的优化,可能会导致代码结构复杂化,增加后续修改的成本,甚至有可能优化了根本不会成为瓶颈的部分。并且还应该深度评估项目的优先级,例如,如果应用程序的安全性是最重要的性能指标,那么不应该过早地优化的其他方面。

Q5:如果在扩展功能时发现接口设计错误或考虑不周应该怎么办?

​ 在本次软件工程实践的过程中,我通过各大开源社区与不同平台的开发者社区,深入了解了这个问题。总的来说,我认为面对接口设计的疏漏或不当,采取一种既务实又前瞻的策略显得尤为重要。开发团队应该明确记录待修复的接口问题,并将其纳入产品路线图,并且在决定是否延后修复前,务必要进行全面的风险评估。基于评估结果,将问题按紧急度和影响范围排序,优先解决那些高风险、低成本的缺陷。最后,随着问题的逐步解决,维护好相关的技术文档和设计决策记录,对于团队成员的学习成长以及未来系统的可维护性至关重要。确保每一处修改都有迹可循,便于后来者理解变更的背景与逻辑。

1.3 产生的新问题

1.如何在保持软件快速迭代的同时,有效控制技术债务的增长,避免长期维护成本的飙升?

2.随着AI技术的日益成熟,如何在软件开发中更好地集成AI辅助开发工具,以提高开发效率和代码质量,而又不丧失对核心逻辑的控制权?

3.在跨平台开发日益普遍的今天,如何选择最适合项目需求的框架和技术栈,平衡开发效率、性能表现与学习成本之间的关系?

1.4 请问你在项目的需求/设计/实现/测试/发布阶段(一共5个阶段)中,每个阶段收获最大的知识或能力是什么?

1.4.1 需求阶段

​ 在需求阶段,我最大的收获是对用户需求的深刻理解与提炼能力。通过积极参与需求研讨会,我学会了如何有效地与非技术人员沟通,挖掘隐藏在表面需求背后的真正痛点。利用用户故事地图和用例分析,我掌握了将抽象需求转化为具体功能点的技巧,确保了项目从一开始就紧贴用户的真实需求。此外,我还学会了如何利用敏捷方法,如Scrum框架,快速迭代需求,确保需求的灵活性和适应性。

1.4.2 设计阶段

​ 设计阶段让我对软件架构设计有了更深入的理解。通过应用MVC和组件化设计模式,我能够将前端应用分解为可复用、易于维护的模块。在这个过程中,我学会了如何利用React的组件化特性,设计清晰的组件树,实现代码的高内聚低耦合。同时,通过阅读和实践《构建之法》,我更加重视设计模式的选择与应用,确保设计不仅满足当前需求,也为未来的扩展留出了空间。

1.4.3 实现阶段

​ 在前端实现阶段,我最大的提升在于对React框架的精通以及前端工程化的实践。通过日复一日的编码实践,我掌握了React的生命周期、状态管理(Redux)、Hooks等关键技术点,使得我能够高效构建复杂的单页应用。此外,我还深入学习了前端构建工具如Webpack的配置,以及CSS预处理器(如SASS)的使用,提升了开发效率和代码质量。通过实践持续集成和持续部署(CI/CD)流程,我确保了代码质量,加快了迭代速度。

1.4.4 测试阶段

​ 测试阶段教会了我自动化测试的重要性。我学会了使用Jest和Enzyme进行单元测试和组件测试,确保代码的健壮性。通过编写测试用例,我能够提前发现潜在的bug,降低了后期修复的成本。此外,我也实践了端到端测试(E2E),利用Cypress等工具模拟用户操作场景,验证整个应用的流程正确性。这一阶段的经历让我深刻体会到,高质量的测试不仅是质量保障,更是快速迭代的信心来源。

1.4.5 发布阶段

​ 发布阶段的实践让我认识到软件交付的复杂性与挑战。可能通过团队会议,我初步了解了如何通过配置Docker容器和Kubernetes集群,掌握了将应用部署到云环境的技能,实现了应用的快速部署与弹性伸缩。同时,监控和日志收集的重要性也在这个阶段凸显,我通过观察和学习团队的工作流程,学习了如何使用ELK Stack(Elasticsearch, Logstash, Kibana)来分析应用运行时的数据,及时发现并解决问题,确保了应用在生产环境的稳定运行。此阶段的经历让我明白了发布不只是简单的上线,而是包括了部署、监控、运维等多个维度的综合考量。

1.5 结合自己在个人项目/结对编程/团队项目的经历,谈谈自己的理解或心得

1.5.1 个人项目

​ 在参与个人项目时,我深刻体会到自主学习与独立解决问题的重要性。每个技术挑战都促使我深入挖掘知识,从书籍、在线教程到社区论坛,不断自学新技能,如React框架的精进与优化。过程中,我学会了自我驱动与时间管理,确保项目按时推进。

1.5.2 结对编程

​ 在与同学进行结对编程时,我学会了沟通与协作的艺术。

​ 与搭档共同编码,我们相互补充技术盲区,通过即时讨论快速决策,有效避免了代码误区。这种模式下,我学会了倾听他人意见,共同调试问题,极大提高了代码质量和开发效率。

1.5.3 团队项目

​ 在我们的“Tomato时间管理小程序”开发中,通过每日站会和敏捷方法,我们确保了项目目标的对齐与进度的透明。面对用户反馈的多样性,我认识到需求分析与用户体验设计的重要性,学会了如何在团队中扮演多种角色,从开发者到协调者,确保每个功能都能贴近用户实际需求。

​ 此外,团队中遇到的跨组问题与项目挑战锻炼了我的问题解决能力,让我认识到组内协调、促进共识是团队成功的关键。

1.6 自我评分对七大课程目标的掌握程度(百分制)

目标分数解释
目标1: 理解软件工程师的职业道德规范和实践要求,了解国情社情民情,理解软件产品对社会、健康文化等影响,树立积极向上的软件开发理念。85通过课堂学习和案例分析,我能够理解软件工程师的职业责任和社会影响,但仍需更多实践以深化这些理念的内化。
目标2: 掌握需求分析的全过程,能辨别客户表述的多样化要求,熟练使用需求表达工具,能够规范、准确地表达客户的需求,构建需求分析模型。90在团队项目中,我能够有效运用所学方法进行需求分析,但偶尔在客户需求变化频繁时感到应变能力有待提升。
目标3: 掌握软件开发的全过程,遵循体系结构设计方法和基本设计原则,通过正式的技术评审,完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案。80我能够参与到软件开发的各个阶段,但在技术评审环节的参与度和理解深度上有提升空间,特别是在体系结构的优化决策上。
目标4: 能够执行从组件到软件系统的技术评测,具备设计模型的评判能力,具有创新设计意识,能够优选设计方案。75技术评测和方案优选能力正在提升中,通过项目实战,我开始学会从多个维度评估设计优劣,但还需更多案例研究以培养更强的创新意识。
目标5: 遵循软件开发各阶段文档标准,采用规范的表达,掌握需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法,具备与业界同行交流能力。92我对文档编写规范有较好的掌握,能清晰表达项目细节,且在团队内部和助教的交流中得到了正面反馈,但还需加强与更广泛业界人士的沟通。
目标6: 具有良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作;能够组织、协调或指挥团队开展工作。88在团队项目中我积极参与,与成员沟通顺畅,但作为领导者或协调者的角色上,我意识到需要进一步提升决策效率和团队激励技巧。
目标7: 能够辨别具体软件项目管理中涉及的构成要素,掌握软件规模和工作量的估算方法,能够选择合适的工具规划软件进度并对项目管理过程进行配置,具备初步的管理复杂软件工程项目的能力。80我已掌握基本的项目管理工具和方法,但面对大型项目时,对风险评估和资源调配的精准度还需通过更多实践来增强。

第二部分:个人技术总结

<软件工程个人技术总结_Hive中应对数据倾斜的策略与实践-CSDN社区>

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

122

社区成员

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

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