这个作业属于哪个课程 | 2302软件工程社区 |
---|---|
这个作业要求在哪里 | 软件工程实践总结&个人技术博客 |
这个作业的目标 | 对软件工程实践课程进行回顾和总结以及本学期所学的相关技术 |
其他参考文献 | 《构建之法》 |
目录
一、课程回顾与总结
1. 寒假作业博客链接
2.问题再解答
Q1.在项目或程序比较复杂的情况下,如何高效率的进行程序理解?
基于本学期的学习,我认识到在原有基础上提高代码理解效率的两种有效方法是:
(1)代码重构:深入理解代码的同时,通过重构技术优化代码结构,如抽象出功能独立的函数、清晰命名变量等。这不仅提升了代码的可读性和可维护性,还能加深对代码功能和设计目的的理解。
(2)测试用例编写:编写测试用例不仅验证了代码的准确性,更是一个理解代码预期行为和边界条件的过程。采用测试驱动开发(TDD)的方法,可以让测试成为深化代码理解的驱动力。
Q2.程序员是否有必要为满足小部分人的需求去做软件,或者为软件添加某些功能?
对于这个问题,我的看法还是和一开始一致的。作为程序员,在资源分配和产品规划时,优先考虑广大用户群体的需求是基本的策略。然而,关注小部分用户的特定需求同样重要,因为这会带来以下几个益处:
(1)增强用户满意度:通过满足小众用户的需求,可以提升这部分用户的满意度和忠诚度,有助于建立稳固的用户基础。
(2)维护市场竞争力:在竞争激烈的市场中,对用户需求的细致关注能够使产品保持竞争力,突出产品的差异化特点。
(3)促进团队能力提升:面对具有挑战性的小众需求,可以激励团队进行技术创新和问题解决,从而提升团队的整体能力。
总之,程序员在开发软件时应当综合考虑多数和少数用户的需求,通过精准的市场定位和科学的资源配置,平衡两者之间的权衡,以实现软件的全面发展和市场的广泛覆盖。
Q3.软件开发是年轻人的饭碗,吃的是青春饭?那年纪大的程序员经验丰富但是快速学习能力拼不过年轻程序员的时候该怎么办呢?
基于本学期的项目实践,我认为我前面的观点是片面的,诚然,年轻人的学习以及适应能力都强于年纪大的程序员,但是年纪大的程序员在一些方面也是有优势的:
(1)经验丰富:年长的程序员通常拥有更丰富的项目经验和问题解决能力,这是无法通过简单的快速学习获得的。就像在本学期的项目实践中,有相关的项目经验的队员在开发上就有较大的优势,往往可以高效的完成自己的部分,给项目开发带来了很大的助力。
(2)团队合作:软件开发不仅仅是编码,还涉及到项目管理、团队协作和客户沟通等多方面的能力,这些是年轻程序员所缺乏的。
(3)稳定性和可靠性:年长程序员通常更加稳定和可靠,他们可能更愿意长期致力于一个项目或公司。
在原有的基础上,我还想补充几点,AI辅助编程确实在提高开发效率和质量方面展现出了显著的潜力,但它并非万能的“银弹”。在以下一些方面他就有所欠缺:
(1)处理复杂任务的局限性:在面对需要高度创造性和复杂逻辑推理的任务时,AI的表现可能不如人类程序员,因为这些任务往往需要丰富的经验和深入的业务理解。
(2)人类程序员的不可替代性:程序员的创造力、直觉、问题解决能力和领域知识是任何AI工具都无法完全复制的。人类能够处理模糊性、理解复杂的业务需求,并在未知环境中做出决策。
基于以上,我认为最有效的工作模式可能是人机协作,即程序员只需专注于需要创造性思维和战略决策的任务,而AI辅助工具是作为助手存在,负责例行和重复性的工作,帮助他们从繁琐的工作中解脱出来。程序员应当拥抱AI带来的变化,同时继续发展和利用自己的独特优势。
Q5. 单元测试中,测试用例是提前准备好的,还是看过代码后针对性编写的?
经过本学期的软件质量与测试的学习,在原来的基础上我认为最佳实践是更好的办法,即在开发初期就准备好基本的测试用例,然后在代码编写过程中或编写完成后,根据实际的逻辑和结构进一步完善和细化测试用例。
这种综合方法既利用了提前准备测试用例带来的优点,即早期确定需求和设计可测试的代码,又保留了根据代码逻辑针对性编写测试用例的优势,即能够精细地覆盖代码的每一个角落。同时定期回顾和更新测试用例也是最佳实践的一部分,以确保随着代码的演进和需求的变化,测试覆盖始终保持完整和相关。
3.新问题解答
基于本学期的团队实践,我认为在项目开发中还存在这样的问题值得深入反思:
Q6. 在团队项目中应该如何合理的分配任务以及队员之间如何有效沟通?
在团队项目中合理地分配任务和确保队员之间的有效沟通是至关重要的。我认为在分配任务和沟通方面可通过以下方法来进一步保障。
一、合理分配任务:
(1)明确项目目标和需求:首先,确保整个团队对项目的目标、需求和期望有共同的理解。这有助于识别所需的任务和技能。
(2)定义角色和责任:了解每个团队成员的专长、经验和兴趣。为每个团队成员定义清晰的角色和责任。确保每个人都知道他们的工作范围和期望成果。
(3)考虑工作负载和截止日期:在分配任务时,要考虑每个成员的工作负载和项目的截止日期。避免过度分配任务,以确保质量和及时交付。
(4)定期审查和调整:定期审查任务分配和项目进度,根据需要进行调整。这有助于确保项目按计划进行,并允许团队适应任何变化。
二、有效沟通:
(1)建立沟通渠道:确定团队内部和与外部干系人沟通的首选渠道,如电子邮件、即时消息、会议或项目管理工具。
(2)使用可视化工具:使用图表、看板和演示文稿等可视化工具来简化复杂信息的传达,并帮助团队成员更好地理解上下文。
(3)文档化重要信息:确保所有重要的决策、规范和协议都有书面记录,并存储在可访问的位置,以便团队成员可以参考。
(4)定期反馈和评价:实施定期的个人和团队反馈机制,以识别改进领域,并对团队成员的贡献给予认可。
4.知识能力收获
4.1.需求
(1)收集和分析需求: 在收集需求信息时,我深刻体会到了“全面性”的重要性。确保从不同角度、不同层次充分收集需求,避免遗漏或偏颇,是在进行需求分析时应该始终注意的原则。同时在多方利益交织的项目中,准确理解并平衡各方的需求和期望,是确保项目能够顺利进行并满足最终用户的关键。
(2)需求梳理和定义:应用NABCD模型,即需求的需求(Need)、假设(Assumptions)、利益相关者的利益(Benefits)、可能遇到的挑战(Challenges)以及交付物(Deliverables)的分析,我学会了如何更系统地理解和分类项目需求。这种结构化的方法帮助我在收集和分析需求时保持清晰和条理,确保每个需求都能得到充分的考虑和正确的处理。
(3)团队沟通: 在这一过程中,我还体会到了与团队成员及其他利益相关者沟通的重要性。正是通过不断的讨论和反馈,我们能够共同理解需求的核心,解决遇到的难题,并不断优化需求定义。
4.2.设计
在项目设计阶段,我获得了非常宝贵的经验,尤其是在学习和应用Axure RP9进行原型设计的过程中。之前,我总是简单地认为设计一个软件界面不过是随意地在纸上涂鸦,想象哪里应该放置什么元素。然而,当我真正开始使用Axure RP9进行原型设计时,我意识到这其中的复杂性和细致程度远远超出了我的预期。
通过使用Axure RP9,我学会了如何创建更加精细和互动的原型。这个工具提供了一系列强大的功能,使我能够以更高效和专业的方式表达设计思想。从简单的布局设计到复杂的交互功能,Axure RP9都让我能够轻松地实现,这极大地提高了设计质量并加快了开发速度。
在整个开发过程中,我深刻理解了原型设计的重要性。原型不仅提供了一个直观、可视化的产品界面展示,还使得用户和开发团队之间能够进行更有效的沟通。它帮助所有相关方清楚地理解产品的功能和操作流程,从而提前发现潜在的问题并进行相应的调整。这种前瞻性的设计验证大大降低了开发风险,节省了成本,确保了产品最终能够满足市场需求并具有竞争力。
4.3.实现
在项目的实现阶段我主要有以下三个方面的收获:
(1)相关技术方面: 在参与微信小程序开发项目的过程中,我不仅积累了宝贵的技术经验,还对微信生态系统有了更深入的认识。利用微信开发者工具提供的丰富组件,如picker组件和block标签,极大地便利了开发过程,特别是在实现拼车功能的日期时间选择以及控制拼车列表页面渲染逻辑方面。此外,我在个人主页的编写中也有所贡献,完成了侧边栏及下方展示栏的设计,这些经历都让我获得了宝贵的实战经验。
(2)在团队合作方面: 我学到了与团队成员有效沟通的重要性。发现在需要使用其他队员负责的功能时,直接与相关队员交流通常比独自解决问题要高效得多,这种沟通也帮助我学习到更多知识,提升了我的沟通协调能力。此外,项目的Beta冲刺阶段主要集中在功能优化上。在此过程中,频繁的项目成员交流极大提升了优化效率。我亲身体会到,团队协作中,积极的交流和反馈远比孤军奋战更为高效。这次项目实践无疑加深了我对微信小程序开发的理解,也锻炼了我的技术能力和团队协作技巧。
(3)在相关文档方面: 在Beta冲刺阶段,当我尝试实现微信地图功能时遇到了企业账号权限的问题,这一挑战迫使我自主搭建功能。通过深入研究开发者文档和多次试验,我逐步解决了各种报错,最终成功实现了经纬度逆解析、自动定位及地图选点等功能,这不仅增强了我的问题解决能力,也加深了我对微信小程序的理解。
4.4.测试
在微信小程序开发项目的测试阶段,我充分利用了微信开发者工具的模拟预览和真机调试功能,确保我们的小程序在不同设备和操作系统上都能提供流畅且一致的用户体验。这一过程涉及了广泛的界面测试,包括注册登录、首页展示、交易处理、拼车服务、跑腿功能、社交互动、消息通知和个人中心等多个关键模块。通过这种全面的测试,我们能够识别并修复了一系列潜在的问题,从而确保了产品的质量。
此外,团队的协作与沟通在此阶段显得尤为重要。我及时地将测试过程中发现的问题反馈给团队,并积极协助解决问题,这不仅加快了问题的解决速度,也加深了我对项目各方面的理解和掌握。
在测试中,应该特别关注用户体验的细节,如易用性和布局的合理性。这种以用户为中心的测试方法使我更深入地理解了用户的需求和期望,为未来设计更加人性化、更能满足用户期待的产品奠定了坚实的基础。整个测试阶段不仅提升了我的问题诊断和解决能力,也加深了我对用户需求的理解,让我更加明白如何设计和优化用户界面与体验。
4.5.发布
在这次结对编程的网站开发项目中,我们在发布阶段面临了多项挑战,特别是在阿里云服务器上搭建项目环境时遇到了一系列技术难题。我们遇到了诸多问题,例如需要修改WampServer的本地配置参数,还遇到了80端口被占用的问题,这些均阻碍了项目的顺利部署。然而,在不断查阅相关资料和反复尝试后,我们逐步解决了这些问题,最终在云服务器上成功搭建了项目环境,并将本地项目顺利部署到了服务器上。
通过这次发布阶段的经历,我获得了宝贵的知识与经验。首先,我学会了如何远程操作和管理云服务器,这对于现代网站部署是极为重要的技能。其次,我对Web服务器软件的配置与优化有了更深入的理解,特别是如何解决常见的配置问题和端口冲突。最后,这个过程中与队友的紧密协作也让我深刻体会到团队合作的重要性,我们互相学习、共同解决问题,提高了整个部署过程的效率。
这次项目发布阶段不仅锻炼了我的技术能力,更提升了我的项目管理和团队协作能力。面对困难不退缩,勇于探索解决方案的精神,将是我未来职业生涯中继续依赖的重要财富。
5.理解与心得
- 在个人实战编程中,我探索了C++处理JSON数据的机制,并掌握了通过命令行接口执行文件读写操作的方法。此外,我还学习了如何利用Visual Studio这一强大的工具进行单元测试,确保代码的可靠性和准确性。整个过程不仅提升了我的编程技能,更让我对软件开发的流程有了更加深刻的认识。
- 在这次结对编程的网站开发项目中,在项目进行的过程中,我们团队面临了众多挑战,这些挑战来自技术难题、设计思路的瓶颈,以及团队成员之间的协作协调。为了完成该项目,我们需要深入理解数据结构和算法,高效地从数据库中导入和解析数据,确保所展示的信息准确无误。此外,网页设计不仅需要技术上的实现,还要求具有一定的审美标准和良好的用户体验设计。同时在部署到云服务的过程中,我们遇到了诸如配置错误、兼容性问题和安全性设置等一系列问题。通过这次项目,我们掌握了数据结构与算法的实际应用技巧,提高了数据库操作的熟练度,对网页部署也有一定经验同时也加深了对网页设计和用户体验的理解。在技术层面之外,我们也认识到了团队协作的重要性,学会了更有效的沟通和协调。
- 在本次团队项目的开发旅程中,我主要负责拼车页面的编写、列表的显示、任务的发布、侧边栏的实现以及实现数据搜索。这一路上,我见证了团队伙伴们在自己负责的领域内投入的热情和展现的专业,这种协作经历让我深刻体会到集体力量的强大。通过彼此间的有效沟通和资源共享,我们解决了一道道看似棘手的技术难题,使得整个项目得以顺利向前推进。这段历程加深了我对于团队工作的信念:深入洞察用户需求、持续创新、注重产品的每一个细节,并在团队中发挥各自的优势,这些是打造深受用户喜爱的产品的关键要素。
6.基于七大目标的自我评分
目标 | 掌握程度 (%) | 解释说明 |
---|---|---|
目标1: 理解软件工程师的职业道德规范和实践要求,了解国情社情民情,理解软件产品对社会、健康文化等影响,树立积极向上的软件开发理念。 | 85% | 我深入理解了软件工程师所应持有的职业道德和实际操作标准,但对于国家和社会的具体情况了解尚浅,对当前市场发展的趋势认识不足,需要在未来加强对这一领域的学习和关注。 |
目标2: 掌握需求分析的全过程,能辨别客户表述的多样化要求,熟练使用需求表达工具,能够规范、准确地表达客户的需求,构建需求分析模型。 | 95% | 我对需求分析的整体流程有了较为全面的掌握,可以识别并处理各种不同的客户需求。然而,在构建和完善需求分析模型方面仍感觉稍有挑战,尤其是在将客户需求转化为明确文档的过程中还需加强能力。 |
目标3: 掌握软件开发的全过程,遵循体系结构设计方法和基本设计原则,通过正式的技术评审,完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案。 | 95% | 我全面掌握了软件开发的细节,并严格遵守体系结构和设计基本原则。我能够依靠这些知识完成各种设计模型,并确保其有效性和可靠性。 |
目标4: 能够执行从组件到软件系统的技术评测,具备设计模型的评判能力,具有创新设计意识,能够优选设计方案。 | 90% | 我在评估设计模型方面拥有较强的能力,并能够集成市场上多样的设计方案进行创新。尽管如此,在组件及整个软件系统的技术测评方面还有提升空间。 |
目标5: 遵循软件开发各阶段文档标准,采用规范的表达,掌握需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法,具备与业界同行交流能力。 | 99% | 在整个开发过程中,我坚持使用标准的文档规范,并且不断精进我的文档编写技能。我也在积极提升与行业同行的交流和合作能力。 |
目标6: 具有良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作;能够组织、协调或指挥团队开展工作。 | 100% | 我具备很强的团队合作意识,并能与他人有效沟通协作。尽管如此,我还未曾独立负责组织或协调大型团队,这是一个我需要在未来经验中继续培养的能力。 |
目标7: 能够辨别具体软件项目管理中涉及的构成要素,掌握软件规模和工作量的估算方法,能够选择合适的工具规划软件进度并对项目管理过程进行配置,具备初步的管理复杂软件工程项目的能力。 | 90% | 起初,我对软件项目管理的理解不够深入,对软件规模和工作量的估计也不够精准。但随着项目进展并借鉴先前的经验,我开始重视软件项目管理的重要性,并通过深入学习基本上能够识别关键要素并进行有效管理。利用各种工具来规划进度,例如制作项目燃尽图和每日工作量分析,我在这方面的能力正在持续增强。 |
二、个人技术总结
1.技术博客链接
2.概述
微信小程序中难免会使用到与地图相关的功能,这时候可以使用微信小程序中自带的map组件来实现一些基本功能,同时微信小程序也提供了一些的接口供用户的使用,而本次涉及的地图功能正是用map组件逐步搭建起来的,提供了地图选点以及自动定位功能。