软件工程实践总结——课堂内外勤钻研,学海无涯路漫漫

222100436魏文铮 2024-06-02 21:13:49
这个作业属于哪个课程https://bbs.csdn.net/forums/ssynkqtd_06
这个作业要求在哪里https://bbs.csdn.net/topics/618785000
这个作业的目标进行软件工程课程实践总结
其他参考文献《构建之法》

目录

  • 以前问题思考的博客链接
  • 对自己曾经思考过的问题再次进行解答,并阐明
  • 认为软件系统十分复杂是不是因为软件工程还没有充分发展?
  • 如何能“证明”一个软件是可以继续发展的?
  • 为什么过早优化的后果会严重到成为“万恶之源”
  • 写博客也会花挺多时间的,如果把这些时间花在写代码上面会不会更好?
  • 我们如何可以和市面上那些繁复多样的 APP 进行竞争?如果功能相似是不是就没有开发的必要?
  • 原来的问题还不明白处及其分析
  • 新的问题
  • 在项目的需求/设计/实现/测试/发布阶段(一共5个阶段)中,每个阶段收获最大的知识或能力是什么?
  • 结合自己在个人项目/结对编程/团队项目的经历,谈谈自己的理解或心得
  • 个人项目
  • 结对编程
  • 团队项目
  • 结合这次课堂的学习经历,自我评分对七大课程目标的掌握程度(百分制),并作出相应解释
  • 个人技术总结

以前问题思考的博客链接

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

对自己曾经思考过的问题再次进行解答,并阐明

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

原问题的链接:https://bbs.csdn.net/topics/605357244

当然不是。

其实和其他学科和行业一样,软件工程同时具有复杂性和充分发展性,而且一个事物的复杂性和其是否已充分发展没有必然关系。汽车由众多系统组成,引擎、外形设计、内饰、轮胎、防抱死、安全系统等等,其当然是十分复杂的事物,然而我们可以说汽车行业没有充分发展吗?除此之外,还有医学、航天、建筑、硬件等等科学,它们都得到充分发展,然而也具有高度的复杂性。

软件系统的复杂性,是在软件工程的任何发展阶段,都一直存在的。软件工程的概念大概在 70 年代被提出,而软件的出现时间则更早。现在的软件,可谓是琳琅满目、层出不穷,无时不刻地存在和影响人们的生活;众多的软件工程技术和概念已被研究和发展,如面向对象、基于组件、云计算、大数据等等,可见软件工程已得到充分发展。而软件工程的复杂性是一直存在的,在这个领域,人们积极而努力地进行需求分析、程序理解、质量保障和提升用户体验,甚至形成了商业模式和道德规范。

如何能“证明”一个软件是可以继续发展的?

原问题的链接:https://bbs.csdn.net/topics/607194899

代码规范良好,耦合度低,提供大量 API,最好有文档。这一点的主要目的是,为开发人员提供一个良好的编程环境,吸引更多开发人员。只有这样,才能更好地进行分工,大幅提升扩展性,让软件“可持续发展”。举一个经典的例子,Minecraft,这是一个 3D 沙盒游戏,官方提供了大量 API 和详细文档,让一些第三方工作室甚至玩家都可以参与到这个游戏的开发,极大丰富了游戏内容,使之成为经久不衰甚至热度持续攀升的游戏。

迎合当前和未来市场需要,积极听取用户意见,展望未来。一个软件在刚开始推出的时候,可能确实只是为某一个特定功能而诞生的,但是,有的用户觉得它好用,但是发现了一些 bug,甚至提出了更多需求,那么开发人员需要根据新的需求,积极更新这个软件,就可以让这个软件继续发展下去,还可以得到用户的推荐,甚至一些大型公司的采购和合作。

为什么过早优化的后果会严重到成为“万恶之源”

原问题的链接:https://bbs.csdn.net/topics/608532729

过早优化的效果可能不够理想,付出大于汇报。 问题中的“过早”,应该意味着一个项目还没完成,进度只到 5% 左右,甚至没有一个最终整体的框架。而这个阶段去做优化,通常来说只是对一些部分、局部的模块去做优化,我们对其优化了 50% 的效率,然而这个模块的代码量只有整体代码量的 5% ,在最终的整体看来,优化的效果可以说是微乎其微,可以忽略。

代码可能面临重构甚至项目中断,优化工作前功尽弃。这一点我在游戏开发过程中深有体会,在前期开发过程中,可能对一个功能进行优化,但是游戏的需求发生了变化,也就是玩法发生了改变,让这个功能被摒弃了,于是优化的工作被直接丢弃。优化过程花费了不少时间,但是最终却没有任何作用。

总之,在 demo 开发过程中,不应该太过注重于局部的优化,而应该关注一个功能能否实现、整体的效果,在最后对效率低下而使用频繁的部分进行性能的优化。

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

原问题的链接:https://bbs.csdn.net/topics/605554949

我认为我们应该同时抓写代码和写博客。

其实写博客和写代码并不冲突,两者甚至是大同小异的。从体力消耗来看,都是脑子想,手敲键盘;从语言来看,写博客使用自然语言,写代码是用计算机程序语言,而当前高级计算机程序语言已经与自然语言十分相似,都有自己的语法、逻辑和规范;从目的来看,博客和代码的目的都是要呈现通俗易懂的内容,表达和记录作者的思想,关注人与人之间的交流,实现伟大的功能。

写博客是有利于写代码的。写代码是为了实现功能,并呈现良好的可读性和逻辑性,锻炼人的逻辑思维;写博客通常是为了总结和描述作者的编程思想和经验,可以让我们总结经验,改正错误,让我们更好创造优质的代码。如果一个人只会在代码上面秀功夫,而不擅长通过博客或其他形式总结思想和经验,来与他人沟通,那么对于今后的团队合作是不利的。

我们如何可以和市面上那些繁复多样的 APP 进行竞争?如果功能相似是不是就没有开发的必要?

原问题的链接:https://bbs.csdn.net/topics/605554748

当前市面上的 APP 的确非常丰富,几乎满足了用户的各种需求。但是,这不意味着我们不能开发功能相似的 APP。理由如下:

首先,虽然我的产品的竞品已经实现了相似的功能,但是质量和用户体验度不一定高,我可以着重这方面,通过精心的设计和质量保障来提高自己产品的竞争力,增强用户粘性。这样,我认为最初的开拓者也不一定是最终的赢家。

其次,一些 APP 存在市场垄断,如果我们不能开发出自己的功能类似的产品,那么就会失去一个核心竞争力,甚至任由他人摆布。例如最近火爆的 ChatGPT,国内已经有许多产品争先模仿与跟进,也许我们的产品不如市场开拓者优秀,但是我们不能没有这类产品,我们必须跟随时代发展的潮流。

原来的问题还不明白处及其分析

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

    这个问题在初次思考时可能仅仅停留在软件复杂度与软件工程发展阶段的表面关联上,而没有深入探究软件复杂性的根本原因。

    软件系统的复杂性不仅仅是因为软件工程的发展阶段。实际上,软件复杂性源于多个方面,如业务逻辑的复杂性、技术架构的多样性、用户需求的不断变化等。

    软件工程的发展确实有助于降低某些复杂性,比如通过设计模式、重构技术、敏捷开发方法等,但并不能完全消除复杂性。

    因此,认为软件系统复杂仅仅是因为软件工程尚未充分发展是片面的,需要更全面地考虑软件复杂性的来源。

新的问题

  1. 如何平衡软件项目的成本和效益?
  • 制定详细的项目预算和成本估算,确保项目成本在可控范围内。

  • 对项目的收益进行预测和评估,包括直接收益和间接收益。

  • 在项目过程中不断监控和调整成本和效益的平衡关系,确保项目能够按照预期实现收益。

  • 引入敏捷开发方法,以便在开发过程中更加灵活地应对市场变化和用户需求变化。

  1. 在软件开发过程中,如何有效地进行团队协作和沟通?
  • 制定明确的团队角色和职责,确保每个成员都清楚自己的任务。

  • 使用合适的团队协作工具,如版本控制系统、项目管理工具、即时通讯工具等。

  • 定期召开团队会议,讨论项目进展、问题、风险和解决方案。

  • 鼓励团队成员之间的互相学习和知识分享,提升整个团队的技术水平。

  1. 如何评估软件项目的质量和性能?
  • 制定明确的测试计划和测试用例,确保软件在各种场景下都能正常工作。

  • 使用自动化测试工具来提高测试效率和准确性。

  • 进行性能测试,如响应时间、吞吐量、并发用户数等,确保软件能够满足用户需求。

  • 使用代码审查、代码质量检查工具等手段来评估代码质量。

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

  • 需求阶段

    • 需求分析与理解:学会如何从用户、市场和业务的角度深入理解和分析需求,识别关键需求和潜在需求。

    • 沟通能力:与不同利益相关者(如客户、用户、业务分析师等)进行有效沟通,确保准确理解需求。

    • 需求文档编写:编写清晰、准确、完整的需求文档,为项目后续阶段提供指导。

  • 设计阶段

    • 系统设计:学习如何将需求转化为系统架构、模块划分、接口设计等具体实现方案。

    • 设计模式与原则:掌握常用的设计模式,理解SOLID等设计原则,提高系统设计的可维护性、可扩展性和可重用性。

    • 技术选型:根据项目需求和技术栈,选择合适的技术、框架和工具,确保项目的顺利实现。

  • 实现阶段

    • 编程技能:通过实际编码,提升编程技能,熟悉所使用的编程语言、框架和工具。

    • 问题解决能力:在编码过程中,学会识别、分析和解决各种技术问题,提高解决问题的能力。

    • 版本控制:掌握使用版本控制系统(如Git)进行代码管理,实现团队协作和代码版本控制。

  • 测试阶段

    • 测试技能:学习编写测试用例、执行测试、分析测试结果等测试技能,确保软件质量。

    • 质量保证意识:培养对软件质量的敏感性和追求完美的态度,确保软件符合需求和预期。

    • 缺陷管理能力:学习如何记录、跟踪、修复和验证缺陷,提高软件质量。

  • 发布阶段

    • 部署与发布:学习如何将软件部署到生产环境,确保软件能够正常运行并满足用户需求。

    • 监控与维护:掌握使用监控工具对软件进行实时监控,及时发现并解决问题,确保软件的稳定运行。

    • 用户反馈处理:学会收集、分析和处理用户反馈,持续改进软件以满足用户需求。

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

个人项目

  • 独立性与责任感:个人项目让我深刻体会到了独立承担项目的责任。从需求分析到设计、实现、测试和发布,每一步都需要我亲自完成,这极大地锻炼了我的独立思考和解决问题的能力。

  • 技术深度:由于没有团队其他成员的协助,我需要更深入地研究和掌握所使用的技术,确保项目的顺利进行。这促使我不断学习新技术,提升自己的技术深度。

  • 时间管理:个人项目对时间管理的要求极高。我需要合理安排时间,确保项目按期完成。这锻炼了我的时间管理能力,使我能更好地应对未来的工作和生活。

结对编程

  • 协作与沟通:结对编程强调两个人之间的紧密协作和沟通。通过结对编程,我学会了如何与他人合作,如何有效地沟通,以及如何共同解决问题。这对我未来的团队协作非常有帮助。

  • 知识共享:在结对编程中,我们可以互相学习,共享知识和经验。这使我能够更快地掌握新技术,同时也提升了我的学习效率和团队协作能力。

  • 减轻压力:结对编程能够减轻个人的工作压力。在遇到问题时,我们可以共同讨论,共同解决,减轻了个人的心理负担。

团队项目

  • 团队协作:团队项目让我深刻体会到了团队协作的重要性。在团队中,每个人都有自己的角色和职责,只有大家齐心协力,才能确保项目的顺利进行。这锻炼了我的团队协作能力,使我能更好地与他人合作。

  • 项目管理:团队项目对项目管理的要求很高。我们需要制定详细的项目计划,明确每个人的任务和时间节点,确保项目按期完成。这锻炼了我的项目管理能力,使我能更好地应对复杂的工作任务。

  • 风险应对:在团队项目中,我们经常会遇到各种风险和挑战。通过共同讨论和制定应对策略,我学会了如何面对风险,如何调整计划,确保项目的顺利进行。

结合这次课堂的学习经历,自我评分对七大课程目标的掌握程度(百分制),并作出相应解释

目标评分解释
理解软件工程师的职业道德规范和实践要求,了解国情社情民情,理解软件产品对社会、健康文化等影响,树立积极向上的软件开发理念80通过课堂学习和自我阅读,我对软件工程师的职业道德规范有了深刻的理解,并意识到软件产品对社会、健康文化等方面的重要影响。我积极关注国情社情民情,并努力在软件开发中贯彻积极向上的理念。然而,对于某些具体的实践要求,我仍需通过实践项目来加深理解和应用。
掌握需求分析的全过程,能辨别客户表述的多样化要求,熟练使用需求表达工具,能够规范、准确地表达客户的需求,构建需求分析模型70在课堂学习中,我学习了需求分析的基本理论和方法,并尝试在模拟项目中应用。我能够辨别客户的多样化要求,但在使用需求表达工具方面还不够熟练,有时表达不够规范准确。构建需求分析模型时,我还需要更多的实践经验来提高自己的技能。
掌握软件开发的全过程,遵循体系结构设计方法和基本设计原则,通过正式的技术评审,完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案60我对软件开发的全过程有了基本的了解,并学习了体系结构设计方法和基本设计原则。然而,在构建设计模型时,我还需要更多的实践经验来提高自己的技能。同时,我对于正式的技术评审流程和标准还需要进一步学习和掌握。
能够执行从组件到软件系统的技术评测,具备设计模型的评判能力,具有创新设计意识,能够优选设计方案。60我学习了技术评测的基本理论和方法,并尝试在模拟项目中应用。然而,在评判设计模型和优化设计方案方面,我还需要更多的实践经验和创新思维。我意识到创新设计意识的重要性,并在努力培养自己的这种能力。
遵循软件开发各阶段文档标准,采用规范的表达,掌握需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法,具备与业界同行交流能力。75我学习了软件开发各阶段的文档标准和撰写方法,并尝试在模拟项目中应用。我能够采用规范的表达来撰写文档,但在撰写某些专业文档(如系统测试报告)时,我还需要更多的实践经验和专业知识。此外,我积极与同学们交流学习心得,努力提高自己的与业界同行交流能力。
具有良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作;能够组织、协调或指挥团队开展工作。85在课堂学习和模拟项目中,我积极参与团队合作,与其他成员开展有效的沟通和协作。我具有良好的团队意识和合作技能,能够积极承担自己的责任并帮助他人解决问题。同时,我也尝试在团队中扮演不同的角色(如组织者、协调者等),以提高自己的团队管理能力。
能够辨别具体软件项目管理中涉及的构成要素,掌握软件规模和工作量的估算方法,能够选择合适的工具规划软件进度并对项目管理过程进行配置,具备初步的管理复杂软件工程项目的能力。70我学习了软件项目管理的基本理论和方法,并尝试在模拟项目中应用。我能够辨别具体软件项目管理中涉及的构成要素,并掌握了一些基本的软件规模和工作量估算方法。然而,在选择合适的工具规划软件进度和进行项目管理过程配置方面,我还需要更多的实践经验和专业知识。我正在努力提高自己的管理复杂软件工程项目的能力。

个人技术总结

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

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

122

社区成员

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

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