这个作业属于哪个课程 | <2302软件工程> |
---|---|
这个作业要求在哪里 | <软件工程实践总结&个人技术博客> |
这个作业的目标 | 编写实践总结和技术博客 |
其他参考文献 | 《构建之法》 |
目录:
五个阶段的收获
需求分析
需求分析中,我们大多都在讨论需要多少新功能,这是非常重要的一点,它决定了整个项目的开发周期和开发难度,同时也决定了这个项目的竞争方向。一个好的项目应该有一个准确的定位,不能想着成为全面手,一个是开发的周期过长,另一个则是开发的难度过大,一个在各个赛道上都有很强竞争力的项目不是一两个月就能完成的。我们观点是项目内容精贵不精多,我们初次开发项目几乎做不到面面俱到地考虑所有的赛道,只能挑选其中一个方向进行开发,一开始我们也是大量增加项目的功能点,但是最后总结的时候发现项目功能很多,开发难度很大,同时依据我们自己的估计开发时间是来不及的,最后只能砍掉重复的,没有那么重要的功能点,留下核心关键的进行开发。
设计
设计阶段中,我对前后端的设计不同深有体会。前后端设计不能独立存在,必须同时处理。前端独立设计极大可能导致后端进行设计时难以实现,也可能出现后端设计中完全不需要的部分出现在前端中,导致前后端代码同时产生赘余。同时协同开发,能够精简开发的成本,节约开发时间,同时避免不必要的时间和空间浪费。同时设计是整个开发过程中最为重要和核心的一点,当一个设计方案足够清晰明朗,后续的开发过程将会进行得极为顺利。
实现
实现阶段实际上没有什么新的内容,就是对一个新框架的学习使用和掌握。在这三次的实践之中,我学习了JSP和SPRINGBOOT两个框架,说实话对我来说最难的不是如何编写程序的功能,而是如何将框架所需的插件加入到编译器中,无论是结对编程还是团队项目,我都被加入插件的过程折磨了很久,每次都因为插件原因被硬控进度半天,对编写项目功能点花的时间和精力反而没有那么多。
测试
测试阶段中,我基本上都是负责对自己编写的模块进行测试,因为是自己编写的,所以写测试用例有一定的方向,但是还是不够用,正因为是自己写的程序,所以我才会因为不知道还能往哪些方向进行测试而苦恼,无论是边界值还是错误输入都进行了设计,测试用例还是不够,最终只能让别人帮忙补齐用例。
发布
发布阶段我并没有过多参与,实际上仅仅参与了用户反馈的处理,对不足之处进行处理,当然其中更多的是偏向前端的问题,对后端所需要的修改并不多。
项目经历和理解
个人项目
个人项目实战是编写JSON解析,这里我个人是利用了JSONCPP这一库进行的处理,写完之后其实也没有哪些地方是很难的,最根本的就是要去先将JSON的格式分清楚,到底有哪些数据是需要的,它们分别在哪一层,写好对应的属性名,那么基本上JSON所需的数据就能成功拿出来,除非你循环出错导致数据丢失,当然也存在这个JSON里有属性没数据的情况(就是女生10米跳水,怎么有没有数据的),这种就只能自己遇到了之后才会有感觉,其他的数据都没问题就一两个出问题了那么就有可能是JSON本身的问题,进行好错误处理,对相应的数据丢失进行反馈,编写程序的时候考虑得全面一点那么就不会有问题了。
结对编程
结对编程的时候,我个人是前后端都有参与,设计原型的时候对原型的处理是很巧妙的,在做高精度原型的时候,尤其巧妙,我们使用的是AXURE进行的原型开发,整个原型实际上花时间最长的是在对原型的仿真上,按钮的实现,列表的展开,页面的跳转,鼠标移动的反馈,在原型开发工具中都能用相应的功能实现,就是实现的时候可能会有些复杂。
团队项目
团队编程的时候,我是负责后端的部分开发工作,这次学习了使用SPRINGBOOT框架编写项目,总的来说,SPRINGBOOT框架是真的非常方便,可以说是轮椅式开发,对数据库的连接简单,只需要加个TAG就能将数据库内的数据导入到程序中,搜索语句也有相应的拼接工具,对前后端数据的传输也是非常容易。
自我评估
目标 | 评分 | 解释 |
---|---|---|
目标1:理解软件工程师的职业道德规范和实践要求 | 90 | 了解了国情社情民情,理解了软件产品对社会、健康文化等影响,树立了积极向上的软件开发理念。 |
目标2: 掌握需求分析的全过程 | 85 | 能够熟练使用需求表达工具,能够规范、准确地表达客户的需求,构建需求分析模型。 |
目标3: 掌握软件开发的全过程 | 84 | 能遵循体系结构设计方法和基本设计原则,完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案, |
目标4:能够执行从组件到软件系统的技术评测 | 84 | 具备设计模型的评判能力,能够优选设计方案 |
目标5:遵循软件开发各阶段文档标准 | 85 | 能够使用用规范的表达,掌握需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法。 |
目标6:具有良好的团队意识和合作技能 | 88 | 能够与其他成员开展有效的沟通和协作,能够组织、协调或指挥团队开展工作 |
目标7: 能够辨别具体软件项目管理中涉及的构成要素 | 87 | 掌握软件规模和工作量的估算方法,能够选择合适的工具规划软件进度并对项目管理过程进行配置。 |
构建之法回顾
我都是大学生了,上课还要认真听老师讲课么?
经过这学期的学习,对我来说看法还是没有发生变化,重要的课程是需要听的,除非你自己有超前进度,是真正的超前而不是自己骗自己的那种,一些不那么重要的课程(非专业相关类)可以选择适当减轻压力,不必要真的当成一门专业课去学习,也不要被别人用你怎么知道这门课不重要来被恐吓,真的想学好必须把精力投入到该投入的课程中去,你能保证课程的成绩不落下就可以了,要追求全科优秀是自己的事,不可以拿来强迫别人。重点课程必须听,这是我的观点。
在一个被认定为“足够好”的软件发布后,得到的用户反馈中,哪些是有用的?什么时候才能将这个软件优化到相对稳定的版本?
现在来看,我的想法发生了些许变化,无论哪种软件,都必须做到便于操作,如果过程过于复杂,那么都会得到操作过于繁琐这样的反馈,这是软件必须解决的问题,会产生复杂的操作并且被人时时提及就说明在设计的时候这一方面存在缺陷,是设计时就没能将这部分功能设计好,导致开发完了存在冗余。而相对稳定的版本,基本要求就是不可以出现致命性BUG,最直接的来说,就是不能用着用着就崩溃,这是必然不能出现的,最基本的要求。其次,软件的功能不能有缺失,相对稳定的版本在已有功能上必须是使用者满意的,可以有新功能的需求,但是旧功能不能被用户不认可,优化到相对稳定就要做到这样。
在项目或程序比较复杂的情况下,如何高效率的进行程序理解?
经过项目经历,首先是一个项目或程序已经开始开发了,那么必然存在前后端说明文档和手册,如果不存在,那么这个项目极大可能是会失败或者做出了是个半成品,接下来需要用于修改优化的时间会远超于开发时间(没有手册建议直接跑路,没设计好一拍脑子就开始做大概率接下来开发的人员要背锅)。高效理解程序就要先看手册,明白项目或程序有哪些功能,对应的参数和返回值是哪些,然后去寻找代码的对应内容。
软件开发是年轻人的饭碗,吃的是青春饭?那年纪大的程序员经验丰富但是快速学习能力拼不过年轻程序员的时候该怎么办呢?
软件开发确实人数占据多数的是年轻人,但是并不代表是一门青春饭。软件开发除了开发,还存在非常重要的需求分析和功能设计,这阶段的事情如果没能做好,你就是叫来一万个年轻人也没办法开发好一个项目。而需求分析和功能设计不能全靠年轻人,以前的开发经验也非常重要,年轻人可以参与但不能只有年轻人。
后一点对我来说还是没有变化,一个是深化技术,走开发组长这条路,将技术专精。另一个就是走人事这条路。两条路都是可选,都存在风险,没有常青树职业,也没有能够百分百不失业的方法,也没有百分百升职的方法,目前现状就是就业人员太多,岗位太少,基础开发人员不缺,但还需要更多高级开发人员。
在找工作方面,计算机科学相比软件工程的同学是否不存在任何优势?
这一点我的想法还是没变,找工作取决的是个人能力而不是专业,一个没毕业国奖拿到手软,实验室常客的计算机科学专业学生和一名没有任何获奖经历的普通软件工程学生相比,还能让前者工作一个都找不到不成?而且计算机科学不仅仅只学习软件,还有硬件相关的课程,照这个逻辑岂不是在找硬件工作方面,软件工程学生根本不配投出简历,对比专学硬件的岂不是两个专业都不配找。问题不可能是取决于专业的。
新问题
在学习的过程中,我发现了有很多人对现有的编程语言都抱有一种类似歧视的态度,对新生的编程语言非常热衷且追捧,我想知道的是对编程语言来说,是不是存在一个泛用的标准来评判一个语言的好坏,能够通过这一标准直接得出哪个语言全方面优于另一个语言?能不能通过这个标准直接分析出一个语言的全部优缺点?