687
社区成员
这个作业属于哪个课程 | <2023年福大-软件工程实践-W班> |
---|---|
这个作业要求在哪里 | <软件工程实践总结&个人技术博客> |
这个作业的目标 | 1.课程回顾与总结 2.个人技术总结 |
其他参考文献 | 《构建之法》 |
6.1 写博客也会花挺多时间的,如果把这些时间花在写代码上面会不会更好?
A: 对于这个问题的看法与寒假时相比并无二致,反而在经历这么多阶段的学习过后, 更加佐证了这个看法, 我认为书写博客是一件极其必要的事情,书写博客能够对一段时间所学知识进行提炼总结,能够将自己书写代码时所遇到的问题进行梳理记录,以便在日后碰到类似的问题时能够快速解决,一名优秀的程序员所拥有的不仅仅是丰富的编程知识,更是在遇到问题时,能快速形成解决问题的思路。在冲刺过程中,我时常遇到碰到以前类似问题但回想不出当时解法的情况,这其实就是没有总结书写导致的结果,正如程序员在开发过程中时常要翻阅API文档,博客就是属于程序员自己的一本笔记书,这本书需要时常翻阅更新,才能慢慢将知识融会贯通,彻底吸收,在开发时大大提高开发效率
A: 对于这个问题的看法,与寒假时相比有所不同,在先前我的观点是能者多劳,每个人按照自己能力分配相应任务,最后按劳分配得到的成果,但经过实践锻炼,我发现如果一旦接受认定了自己的能力范围,就很容易形成呆在自己的“舒适圈”,而不愿走出去的情况,代码编写水平不说进步,甚至会有退步的风险,古时便有“生于忧患,死于安乐”的道理,我想这个道理也适用于编程领域,所以现在我认为当一个团队成员学习能力不一时,在团队中通过分组协作,每组安排一到多位学习能力较强者能够带领能力较弱者,为其安排稍带强度的工作,帮助指导他完成任务目标,这么做虽然可能会降低开发效率,但在总体大局观上,整个团队的水平势必节节高升
A: 诚然,每个人的代码天赋是不同的,对于如何区分一个程序员的好与不好可以从许多方面来评价,如极少的代码bug数、高效的代码运行效率、快速的代码运行时间、极强的debug能力、对数据结构的轻松运用、极强的学习能力与环境适应性、很高的职业道德水准或者对以上内容的综合考量,甚至是与老板与客户轻而易举地打交道?如果以上各方面都能做得很好,那想必这是一位极其优秀的程序员,但毕竟人无完人,能够将以上全部做好的人也是少之又少。反过来一想,如果以上方面都做得入目不堪,那是不是就是一位不好的程序员了呢?我认为一个好的程序员的品质应该体现在他缜密的逻辑思维与不断奋斗学习的进取心,缜密的逻辑思维能够帮助其构建优秀的代码结构,并解决遇到的问题,学习的进取心能够保证自己处于时代浪潮上不被淘汰,毕竟程序员这门职业相较于其他职业来说是技术更迭最快的职业之一了
1.1 程序员是否有必要为满足小部分人的需求去做软件,或者为软件添加某些功能?
A: 这个问题的观点我与寒假时保持一致,对于存在的需求,经过认定为合理,即存在着相应的市场,那么便可以从功能添加成本、功能效益、团队水平、功能实用性、功能可实现性等因素,去评估是否拓展软件功能。其实有很多时候用户或许并不清楚自己所相应的需求是什么,或许这小部分人的需求可以成为引爆市场的一大卖点,也有可能无人问津,甚至饱受争议,这就得视具体情况来具体分析了,需要决策者拥有锐利长远的眼光来抓住市场未来的卖点
3.1 如何让自己能够跟上软件工程发展,做一个永不落伍的开发者呢?
A: 对于这个问题的看法,正如我的标题所言 ------
万变守其本,吾心持长青
, 每个人在初做一件事时往往会立下各种雄心壮志,制定学习计划与目标,但在前进的道路上总是充满各种诱惑, 这个诱惑可以是短视频、游戏或者其他事物,许多人往往半途而废或是“三天打鱼两天晒网”,能够坚持下来的人又很少。所以我觉得对于这个问题的回答,坚持
二字便足矣,能够坚持持续学习,找到适合自己的学习方法,不封闭自己,能够借鉴他人身上优秀的学习方法便足够了,万事不过坚持,写得有些鸡汤,但也希望能够通过这些话激励到自己
需求阶段是软件开发开头的重要阶段,这个阶段个人收获最大的便是如何通过
NABCD模型
来对项目进行分析描述以及需求规格说明书
的书写, NABCD模型的使用能够让我们十分方便的从需求、做法、好处、竞争、推广这五个方面出发,对项目做出整体评估,分析项目优劣势,明确方向。在这个阶段我们编写了需求规格说明书来对项目进行总体描述, 界定了项目的方向与所要完成的功能以及验收标准。在今后软件开发中,我也会借助NABCD模型对软件进行简单评估,做好软件定位。
设计阶段中对
原型设计
、类图
、用况图
进行了设计完善, 这些设计的制作完成, 对后期开发起到至关重要的作用, 在此阶段中, 我收获最大的便是对类图进行制作设计, 虽然在上学期的课程学习中包含了UML的学习, 但有种学习完感受不深刻的感觉, 究其原因, 应该是所做的题目大多比较简单, 类与类之间的关系较为明了, 无法与真正的开发实践相比。当面对大型的软件设计时,类图的制作是极为关键的,在类图设计时,面对复杂且庞大的类,也着实下了不少功夫去完善类图。
实现阶段对先前的设计进行了具体实现,是对代码能力与团队合作能力的双重考量,在这个阶段中,我们组内采用了Vue3+SpringBoot2进行开发,由于我先前所学的是Vue2,不得不对知识进行更替迭代,好在二者语法大多内容相似,不用耗费太多时间来适应。在这个阶段中我对前端开发更加地熟练,能够利用现有组件按照原型设计完成相应页面,能够通过axios完成前后端的交互,并且与后端的交流更为顺畅
测试阶段是夹杂在实现阶段过程当中,在α阶段我们小组是由开发人员进行测试工作,在β阶段我们进行了开发与测试的分工,开发者与测试者的工作不再耦合,提高了开发效率。对于前端,我们按照页面的验收标准进行测试,同时对系统功能、内容提示、前后端交互也进行了测试。而在后端中,则对每一个完成的接口进行了
单元、集成测试
工作。在此阶段,我对测试工作的内容有了进一步认识,对于测试文档的书写也更为熟练,并将软件测试课堂所教授的测试方法运用到了实际当中。
发布阶段将制作完善的项目部署于服务器中,在此阶段我收获最大的内容便是如何将前端项目进行打包操作,部署于服务器中,并进行了问卷调查,对项目整体使用进行了调研评估分析,懂得了如何合理设置问卷内容、通过问卷获取软件评价,对软件功能进行改善
- 软工实践中的个人项目包括了寒假的作业热身、澳网数据爬取输出以及软件评测作业
- 寒假的作业热身,通过阅读学习《构建之法》,初步了解了
软件工程
这一概念, 作为一个工程,它指导了软件开发的整个过程, 提供了开发的方法并提供了多样的开发模型以适配不同场景下的开发, 而在此之前我对其概念可谓是知之甚少。 除了对软工概念的初步了解, 通过此次作业, 我还重新捡起了以前学过但极少使用的markdown语法以及git命令的使用, 回顾软工实践的整个过程, 本人对于markdown文档的编写以及版本控制的使用等能力有了很大的提高- 澳网爬取是软工实践的第二次作业,除了相应的代码编写外,还让我接触到了以前听过但未深入了解的概念,如PSP表格、单元测试与回归测试、爬虫等。作业的难度其实算是适中的,但鉴于本人代码实战经验不足,还是花了不少力气去完成这项作业,不过最后的收获还是蛮多的,至少把Java语言相关的内容都巩固复习了一遍,并且学习了如何利用第三方包对Json数据读取,为之后的结对与团队项目开发立下了基础
- 软件评测作业对我来说是印象最为深刻的一次作业, 一方面它打破了我以往对于软件评测的认知---认为要有专门的测试人员才能从事这份工作, 但其实软件是面向用户的, 每个用户都能成为
软件测评师
;另一方面这是一次不用编写代码, 能够对其他已上线的项目""指手画脚""的一次作业。作为一名挑剔的用户,虽然找到致命的漏洞或许不易, 但对一个软件进行"吹毛求疵"还是十分容易的。该作业培养了我软件测评的思维,另一方面在开发时也能反过来利用这些思维来完善自己的项目- 总体来说,个人的实战作业,为后续的团队协作奠定了基础,培养了我测试、开发、书写文档、版本控制等能力,也算是磨刀不误砍柴工
- 结对的两次作业是在个人项目的基础上, 添加了与队友结对合作的过程, 初步培养了团队合作意识
- 结对的第一步是寻找相性匹配的队友, 为了项目合作时的方便以及磨合度的问题, 我与我的室友结成了一队
- 结对的任务不仅是对个人技术的考量, 更是考验了两个人相互配合, 团结合作的能力, 通过互相磨合沟通, 完成项目作业, 在这些方面, 我与我的队友能过做到互相补足、互相鼓励,能够合理分配任务,在保证完成各自任务的情况下,完成任务的对接,做到1+1>2的效果
- 通过结对任务,培养了我们合作共赢的理念,在合作过程中能够互相学习,提高自己的能力,弥补自身的不足,在遇到困难时也能够及时沟通,快速解决困难。比起个人项目,结对编程能够通过任务的分配在保障软件质量的基础上又大大提高了开发效率
- 结对任务让我初步接触
原型设计
的概念, 并通过动手实践, 完成了第一个原型的开发, 开发过程中虽然时常出现不知道如何设计某一个功能的情况, 但通过一次次询问、查阅、分析,最后还是圆满完成任务,也获得了些许自豪感。另外,结对代码实践作业,也进一步让我巩固了项目开发经验,复习了以前遗忘的知识点,为后续团队项目开发奠定基础
- 团队作业的任务基本遵循了软件项目开发流程,从组队完成
选题
到需求分析
再到概要设计
与数据库设计
最后到代码冲刺
,整个过程循序渐进并环环相扣,如果缺少了哪一环,对后续的开发都会有所影响,倘若没有这些阶段任务的安排,直接进行代码冲刺的话,可能会乱成一锅粥- 在所有团队作业中, 我印象最深刻的是极限编程的作业, 那可能是我大学生涯中最忙碌的一天, 从早上起床参与团队会议, 在分配完具体任务后, 书写代码结构, 根据原型设计, 完成前端页面功能, 从早上一直忙碌到了晚上, 从代码开发到结束, 全程都充满了紧张的气息
- α冲刺阶段是在先前准备完善的基础上进行正式的代码冲刺, 通过前期的几次合作磨合, α冲刺不管是在代码书写, 架构设计, 数据库设计上都变得更为容易、更加顺利, 组员在组长的带领下, 能够高效的完成自己的任务,发挥自己的能力,最终在α阶段结束时,我们已完成了任务大多数的内容,大大减轻了β冲刺的压力, 也是体现出前期准备的重要性
- 在β冲刺中, 我们完成了项目的一些收尾工作, 在α冲刺后, 已经熟悉了组员间的合作模式以及代码风格, 虽然中间有换组的小插曲, 但总归影响不大, 在看到项目完成上线的那刻, 我的内心也是欢欣雀跃
- 整个团队项目的完成, 是三类作业中耗时最久, 也是收获最多的作业, 它让我掌握了一个上线软件的具体开发流程, 作为一名开发者身处其中, 而非纸上谈兵, 明白如何利用NABCD模型进行项目分析, 懂得了一个合理的数据库类图设计,学习了如何基于RABC进行权限管理, 让我深刻感悟到
独木不成林
的道理, 一些项目的开发如果仅靠一个人是无法完成的
目 标 | 目标内容 |
---|---|
目标1 | 理解软件工程师的职业道德规范和实践要求,了解国情社情民情,理解软件产品对社会、健康文化等影响,树立积极向上的软件开发理念。 |
目标2 | 掌握需求分析的全过程,能辨别客户表述的多样化要求,熟练使用需求表达工具,能够规范、准确地表达客户的需求,构建需求分析模型。 |
目标3 | 掌握软件开发的全过程,遵循体系结构设计方法和基本设计原则,通过正式的技术评审,完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案。 |
目标4 | 能够执行从组件到软件系统的技术评测,具备设计模型的评判能力,具有创新设计意识,能够优选设计方案。 |
目标5 | 遵循软件开发各阶段文档标准,采用规范的表达,掌握需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法,具备与业界同行交流能力。 |
目标6 | 具有良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作;能够组织、协调或指挥团队开展工作。 |
目标7 | 能够辨别具体软件项目管理中涉及的构成要素,掌握软件规模和工作量的估算方法,能够选择合适的工具规划软件进度并对项目管理过程进行配置,具备初步的管理复杂软件工程项目的能力。 |
目 标 | 分 数 | 解释说明 |
---|---|---|
目标1 | 90 | 任何职业包括软件工程师势必要遵守最基本的职业道德规范,万变守其本 ,无论形势如何,都要坚守道德底线,我在软件工程这门课上也认真听取并掌握了关于软件工程师所要拥有的职业道德素养等相关知识。以人为先 ,也是我们实践项目最根本的理念,一个充满恶意、不符合价值观的软件势必会受到唾弃。 |
目标2 | 80 | 通过课程实践,我了解了需求阶段中的分析方法,能够较好把握客户需求,懂得了如何利用工具来进行需求分析,构建需求分析模型,但在原型设计这方面的能力还略有不足,存在使用不熟练的问题。 |
目标3 | 88 | 在实践开发的整个过程中,我积极参与了需求分析、数据库设计等阶段的任务,掌握了软件开发的具体流程,并能通过前期的准备,设计出了高效可靠的服务组件设计方案 |
目标4 | 83 | 通过软件评测作业,我学习了如何对一个软件进行高效的技术评测,对一个设计模型拥有较好的评判能力,而创新设计方面的意识与其他同学相比略有劣势 |
目标5 | 92 | 本次团队实践开发,我们小组严格遵守了软件开发各阶段文档标准,通过前期分析,书写需求规格说明书、系统设计说明书,后期测试报告以及制定开发前的代码规范,我们都采用了规范的表达,文档书写能力有了很大的提高 |
目标6 | 95 | 通过几次组队作业、极限编程、α冲刺、β冲刺的锻炼,本人在团队合作意识方面取得了长足的进步,能够通过在线文档、腾讯会议、协同团队开发工具、版本控制工具与他人展开有效的沟通合作。虽然没有担任组长,但通过学习借鉴相关管理经验,也对如何高效组织协调团队工作有所掌握 |
目标7 | 92 | 在冲刺阶段,能够合理通过工具进行线上合作,通过在线上会议中的细粒度的分工,规划软件开发进度,拥有了基本的软件工程项目管理能力 |
对如何利用axios
进行前后端交互进行了简单介绍
软件评测作业对我来说是印象最为深刻的一次作业, 一方面它打破了我以往对于软件评测的认知---认为要有专门的测试人员才能从事这份工作, 但其实软件是面向用户的, 每个用户都能成为软件测评师;
能清楚地说明别人的软件的缺点,这本身就是一个很重要的技能。 红包鼓励!