团队作业 总结
(1)
这个作业属于哪个课程 |
https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 |
这个作业要求在哪里 |
https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/3393 |
团队名称 |
八仙过海 |
这个作业的目标 |
做最后的总结,整理项目资料 |
(2)队员列表:
学号 |
姓名 |
201731107105 |
唐梦钒 |
201731062525 |
菅彭悦 |
201731107115 |
邓清月 |
201731106311 |
解慕荣 |
201731084433 |
李纯锐 |
201731062522 |
尹发彪 |
201731103135 |
王派 |
201731062527 |
段鹏 |
(3)正文部分
唐梦钒 201731107105
1. 软件工程原理及方法第一次作业博客链接:https://www.cnblogs.com/joanna1220/p/10565238.html
2. 解决第一次作业的问题
(1)问题:“虽然在第六章敏捷流程中,详细地介绍了敏捷开发的原则、过程和经验,但对于如何实际地进行敏捷开发,仍然是一个模糊的概念,Scrum Master 的职责和作用到底具体是什么?如何挑选Scrum Master呢?”
回答:通过实际开发软件并作为团队Scrum Master,明白在冲刺阶段Scrum Master对于项目是否能按期交付至关重要,首先在冲刺时需要每天制定详细的开发计划,召开每日例会总结大家开发的难题和进度,并作出及时调整。Scrum Maste在冲刺中不仅需要掌控全局还要兼具开发任务,对能力要求十分高。
(2)问题“在第十一章中也提到实战中的源代码管理,,其中出现许多陌生的词汇,比如文件的锁定、签入签出文件、修改的原子性等,对于之前课程的要求确实没有源代码管理的概念,所以对于这一模块,自己完全陌生,以及如何实际进行源代码的管理仍不清楚。”
回答:此次项目开发最大的遗憾就是没有及时把代码上传到github,少了确切的数据可以看出我们的开发过程,但是同时也认识到源码管理的必要性,对于一个团队开发,这样可以节省时间和精力,免于反复的相互发送文件。
3. 是否产生了新的问题?请提出。
课程理论学习时,对软件开发的流程只有概念的理解,但是实际运用到开发中,才明白流程的重要性,但是这对一个学生团队的PM要求很高,不仅需要把握整个项目更需要投入实际开发,对于没有太多经验的PM来说,如何安排分工和进度,难以准确地把握,所以对于如何高效更正确地指导开发,尚且存在疑问。
4. 经过这学期的学习,你掌握到了哪些以前没有的技能,你是如何掌握的。
通过实际完整地开发软件,对于软件开发流程有了大概的印象,对于每一个环节所做的事更加熟悉,有助于按时完成软件。
5. 有什么深刻的体会,对自己一学期学习过程的总结。
一个完整的软件开发不仅是编程,更重要的是分析和设计,只有框架搭好,编程才会变得清晰简单,这一次开发作为团队的PM,感受比较深刻,不仅需要调节督促队员,对于自身的要求也更高,但同样也在不断进步,在开发中一步一步解决bug和难题,不仅增加信心还磨练了耐心,所以很珍惜本次课程的经验。
邓清月201731107115:
1. 第一次博客作业链接:https://www.cnblogs.com/pyxhopkins/p/10553579.html
2. 尝试对自己提出的问题进行解答,并阐明,是如何通过看书,实际,或者讨论弄明白的。
第一次博客提的问题前两个的回答在第一次博客里面解答过了故不重复解答。
问题3. 4.3.3.3(P70)错误处理中提到了如何验证正确性?那就要用断言。
一开始我不理解什么是断言,经过查阅知道了在单元测试时,程序员预计在程序运行到某个节点位置,需要判断某些逻辑条件必须满足,这样下面的一些业务逻辑才可以进行下去,如果不满足,程序就会"报错"甚至是"崩溃"。接着又在百度里看见说单元测试必须使用断言, 那么为什么单元测试必须使用断言呢?
回答:“断言”通常是给程序开发人员自己使用,在开发测试期间使用,用来使业务逻辑进行下去。通过查阅资料明白的。
参考资料:https://www.jianshu.com/p/9b8c88deed6a
问题4. 4.4.3.5(P77)效能中提到一个问题“c#中string的操作是否能用StringBuilder来优化?" 通过查阅发现StringBuilder类在一些情况下的确高效,里面提到string是引用类型所以CLR就会把string类型保存在托管堆上, 为什么?
回答:问题太冷门,而且我也不懂这句话,所以还没解决。
参考资料:https://www.jb51.net/article/84526.htm
问题5. 13.3.2(P291.d)Pair-wise和正交试验设计方法中提到”经验告诉我们,众多因素中,通常只有两个因素对某个Bug的发生起关键作用“
这是为什么呢?为什么是两个?
回答:没解决。
3. 是否产生了新的问题?请提出。
无。
4. 经过这学期的学习,你掌握到了哪些以前没有的技能,你是如何掌握的。
在课堂上,学到了概念性的一些知识,更大的收获是在团队项目中,通过做一个实打实的项目,在项目大的框架下将软件工程课堂上学到的流程运用到实际项目开发中了,体会了软件开发的流程。在技术方面学习了些之前没学过的知识(当然只是皮毛),之前的任务分配是前端,于是去学了html、css、js,后来没有分配前后端又了解了下tp5。通过看视频和边做项目边查阅。
5. 有什么深刻的体会,对自己一学期学习过程的总结。
体会就是这学期过的迷迷糊糊的,想要变成大佬不再被作业支配。这门课程一学期的学习过程总结:分为四个阶段,一上课时,悠闲放松。二团队前端时,忙碌充实。三团队空档时,悠闲。四团队全员阶段,忙碌。
解慕荣201731106311:
1. 第一次博客作业链接:https://www.cnblogs.com/543123abcxmr/p/10568992.html
2. 解决第一次作业的问题
问题1.教材第二章2.3(P34)中说到了衡量软件工程师能力的模型PSP,模型统计了一些软件开发过程中的数据,但是并没有对开发结果的衡量,只知道过程不知道结果的分析,这样怎么能衡量出能力,怎么能在分析后做到有效的提高?
回答:任何方法论都是在不断发展中逐渐完善的,PSP虽然没有结合开发结果(如客户使用中的实际问题,客户满意度等等)进行分析提高,但是在一定程度上也衡量了软件工程师的能力,结合PSP对开发过程进行分析也能促进工程师能力的提高
问题2.教材第七章7.2.1 MSF的第一条基本原则要求保留所有的信息并公开,例如所有的工作项及历史;所有源代码的修改记录,但是如果将所有的信息都记录下来,就会堆积下来大量的信息,这样怎样高效的找到所需的信息,重要的信息会不会被淹没?
回答:可以使用TFS,在TFS中设置提醒,让TFS主动提醒你所关心的事情发生的变化。
3. 是否产生了新的问题?请提出。
无。
4. 经过这学期的学习,你掌握到了哪些以前没有的技能,你是如何掌握的。
通过课堂上的学习,学到了软件开发都要进行哪些步骤,都有哪些方法论和工具,在团队项目中,除了网站开发中学习到的一些PHP语言知识,tp5框架知识,更重要的是体会到了完整的软件开发过程,从开始的需求分析到最后的bata版本冲刺,每个阶段都是软件项目开发必不可少的过程。
5. 有什么深刻的体会,对自己一学期学习过程的总结。
这学期中,印象最深刻的就是参与的团队项目,团队中大家分工合作,共同学习,一起进步。在团队中不像平时自己单独完成一项任务,团队中自己的进度缓慢和拖沓都会直接影响团队的进度,团队中集体责任感是非常重要的。这学期很快就过完了,总的来说这学期自己自制力不够,做事老是拖延,学习效率也低,以后要提高自制力,严格要求自己。
李纯锐 201731084433:
博客链接:https://www.cnblogs.com/lichunrui/
1、尝试对自己提出的问题进行解答。
问题一:第十六章16.4中,作者通过三个小朋友与魔方创新的故事阐述了创新不但需要前人经验与市场的积累,最重要的是不能把“屁股”对着观众。16.2中作者通过黄金点游戏来说明成功的创新还需要恰当的时机。那我们在创新的时候,如何才能创新出大众喜欢的东西并在最恰当的时间推出这项创新呢?
解答:通过一学期对软件工程这门课的学习,理解了软件的生命周期,其中的需求分析是极其重要的,它要求我们从用户的角度出发,研究软件应该“做什么”,如何才能在功能上使用户满意,所以,要创新出大众喜欢的东西,首先是面向用户,了解用户需求,同时创新需要满足时代要求,在最恰当的时间发布恰当的商品才能是受欢迎的。
问题二:第五章《团队和流程》提到,完成软件行业的项目往往需要一个高效率的团队,所以软件行业中产生了很多种团队模式,且各有各的利与弊。那我们应该如何正确的选择出一个最适合自己的团队运行模式才能把效率最大化呢?
解答:我觉得这学期的团队项目非常有意义,它让我们熟悉项目的各个流程,初步了解自己适合团队里面的什么位置。其次,一名负责的领头人也是非常重要的,他不仅要首先了解项目,还要进行具体分工,所以我认为,合理分工的团队模式是我最喜欢的,不仅运行和谐,而且效率还高。
问题三:第十四章《质量保障》中作者提到“软件要在功能、成本、时间三个方面满足利益相关者的需求”,那么软件开发者应当如何在时间紧张的情况下保证软件的质量呢?
解答:我认为,一个项目的生命周期中的每一个步骤都是必不可少的,可行性分析、项目计划、需求分析,概要设计、详细设计、编码与测试、运行和维护等,虽然时间紧,但在每个环节环环相扣的情况下,一样可以保证软件质量。
2、是否产生了新的问题?请提出。
因为是第一次接触网站项目,在时间紧张的情况下学习了HTML、CSS、JAVASCRIPT,同时还要进行后端连接(php),故产生了很多专业性的问题,比如网页的表单验证不是很理解如何写等一系列问题。
3、经过这学期的学习,你掌握到了哪些以前没有的技能,你是如何掌握的。
上个问题中已经说了,在短时间内粗略学习了HTML超文本标记语言、CSS样式表、JAVASCRIPT语言。通过网易云课堂看视频初步了解了三个部分的知识,并在前端页面编写的过程进行实践,初步掌握了它们的用法。
4、 有什么深刻的体会,对自己一学期学习过程的总结。
经过一学期的学习,虽然任务很重,作业很多。但我觉得正是通过这样有时间限制的任务来逼自己一把,才能真正高效地学到东西。软件工程这门课程,让我掌握了软件开发的流程,规范化设计流程等等。同时这也是我第一次同团队的同学们一起实践操作,也算是体验了以后的工作。非常感谢团队里面的各位同学,大家都很积极地在完成自己的任务,为团队做贡献。当看到项目的成果那一刻真的很感动,也很为大家感到骄傲。
菅彭悦201731062525:
1. 第一次博客作业链接:https://www.cnblogs.com/jpy160/p/10564869.html
2. 尝试对自己提出的问题进行解答,并阐明,是如何通过看书、实际,或者评论弄明白的。
构建之法12.1.2中提到理解别人的处境,心境,动机的能力是同理心,软件团队的设计师和软件工程师也需要同理心。
我就在想站在别人的角度去考虑问题这点是很好的,但是作为软件工程师的话如果都从别人的角度去考虑自己软件设计的因素的话需要考虑的角度就会特别多,例如设计者,用户,上层等等,而且每个角度看到的东西又都是截然不同的,这时候我们要怎么做才能更好的兼顾全局?
同时,这样的话会浪费更多的时间去调试,我们又该怎样在规定的工期时间内完成用户的种种需求,这显然是非常非常麻烦的,要做好一个满足全部要求的软件显然是不现实的,我们又该怎么取舍?
答:现在我认为关于取舍项目的功能这方面,一些拓展功能是可以先放弃考虑的,例如我们本次项目最先预想的加入购入车功能和秒杀功能,由于工期短加上本身能力不足完全没能实现,这类拓展功能却又不影响项目的本身的体验,所以可以先舍去。至于设计产品方面我认为最先考虑别的是用户的需求,毕竟产品是做给用户的,用户要求的那些便是首要实现目标。
问:12.5中向我们提了一个问题:什么是用户体验什么时候开始考虑用户体验?
答:后面了解了一些,用户体验大致是用户的第一印象,目标用户及用户第一次使用时对他的评价。软件服务始终要记住用户的选择。然后短刺激和长刺激都会影响用户对于这个软件的的体验。不让用户范那种简单的错误。当然改进也是相当重要的。
参考https://www.cnblogs.com/Vivian4229/p/5536541.html
从不同时间段去考虑用户体验显然会带来不同的问题,那存不存在一个最好的时间点呢?
答:经过这一学期的学习和实践,我认为用户的第一印象是非常重要的,要说最好的时间点,我认为在用户第一次体验产品时算是特别好的时间点。
14.1.1中提到软件质量=程序质量+软件工程质量 软件工程的质量又有三个特性:好,快,便宜。那么假如一个人或者一个团队开发软件的过程中过没法做到这三点,我认为最重要的是好,但想了想,在规定的工期内既然没法做到快,那也很难做到好了,那么对于一个软件开发过程,这三点那一项是相较于其他两项要更占主导位置的呢?
答:实践过后我认为还是好要占主导一些,如果只追求速度快的话,做出来的东西粗制滥造,虽然确是快了,但可能会存在很多bug,而修改这些bug又会花费很多时间和经历,所以稳扎稳打一步一个脚印慢慢把一步步做好才更重要一些。
书16章在介绍产品了,其中举了个魔方创新的例子,魔方产业中出现了种种的竞争者,笑到最后的确是那名技术不够硬,产品不够好,出现时间不够长的一位,只因为他做到了客户的需求。那么我就在想,在现实社会中一个产品的营销中也会产生很多很多的竞争者,我们能够支抓住目标用户的需求就可以脱颖而出吗,在这之前不需要磨练出过硬的技术生产出过硬的产品吗?
答:现在我认为满足客户需求为第一目标,在满足客户需求后有了过硬的技术过硬的产品就是完美的了。
3. 是否产生新的问题
无
4. 经过这学期的学习,你掌握了哪些以前没有的技能,你是如何掌握的。
我觉得第一个就是测试,以前做完就做完没有测试过,这次项目和这门课程所要求的测试确实让我受益匪浅。
5. 有什么深刻的体会,对自己一学期学习过程的总结。
这学期的总结其实学的有点懵,而且在做团队作业的时候由于本身基础也不行,效率也就很低。
尹发彪201731062522:
1. 提问博客链接:https://www.cnblogs.com/yb247077/p/10568812.html
2. 提出问题:
1.bug是不是就是完全不好的的东西?
不是。对于一个小型的功能简单的软件和使用有BUG的软件的用户来说,BUG是不好的存在,影响使用体验,造成各种不变或者不安全。对于大型软件项目和软件公司来说,Bug是一种好的东西,大型软件项目等患bug的风险更大,并且不可能通过测试来检测出所有bug,所以出现bug立即修复能够防止更大的损失发生。对于软件公司来说,发现bug可以更好改进软件使得用户体验更好,并且能够记录下该类bug以便以后更方便的检测和处理此类问题。
2.分析太多是分析麻痹吗?
软件工程师不要进入思维误区,分析程度要看事情的复杂程度,如简单的事情就不能复杂化,比如天气预报说本市明天下雨,就不要纠结明天自己所在的地方是否下雨,带把伞就行了。如果分析太多就是分析麻痹了。过于复杂的问题就不要简单化,就要多分析。就比如华为公司,十几年前就分析了发展的风险,创立海思半导体公司,所以华为如今在美国和各大科技公司的打压下也能屹立不倒。
3.长期使用后,软件会更好用吗?
软件经过长期使用,会慢慢发现或者暴露一些问题,如果开发和维护者能够合理维护优化,那么软件将会越来越好用。如果不能即使改进,落后于时代或者bug太多,软件将会不好用被逐渐淘汰。
4.测试的角色要独立出来吗?
是的,测试的角色应该独立出来。很多的大型软件都有正式版本和测试版本,这样可以一边保证原版本的正常运行,一边在测试版本进行测试,最终对正式版本进行维护和改进。
5.为什么领域的专家有时候没有领域外的创新者有创意?
”三个臭皮匠赛过一个诸葛亮”领域外的创新者经历不同,接触的事务不同,形成了不同的思维,产生了新的火花。领域专家主要是进行一种深度创新,领域外的创新者主要是进行一种广度创新。
3. 是否产生了新的问题?请提出。
无。
4. 经过这学期的学习,你掌握到了哪些以前没有的技能,你是如何掌握的。
掌握了团队协作能力,软件项目开发流程
通过软件工程实践,开发软件项目,我们团队进行了分工协作,团队时常开会,增强了团队交流能力。通过对这个项目的完成,学习到了一整套软件开发的流程。
5. 体会:
这门课程的软件项目开发给我深刻印象,在完成项目的过程中,遇到很多困难,第一次接触这类项目不知道如何做,便在网上查了很多资料,很多问题不能期待别人帮你解决,需要自己去网站,图书馆等地方找到解决方法。对于一个大项目,个人的能力是有限的,需要团队一起协作才能完成。我的个人能力弱,需要像团队能力强的同学学习。有时候因为能力弱完成任务就要比其他人下更多功夫。
总结:这学期前半段的学习不太认真,上课讲的知识认为很枯燥,但是通过团队项目的开发,感觉到上课讲的知识都是很有帮助的,后半期团队项目很认真的学习新知识,努力完成任务。
段鹏201731062527:
1. 第一次博客作业链接:https://www.cnblogs.com/fddp/p/10553661.html
2. 尝试对自己提出的问题进行解答,并阐明,是如何通过看书,实际,或者讨论弄明白的。
1.软件工程质量是软件质量的一部分,软件开发的目的也是拿给用户来体验的,为什么衡量软件工程的质量是靠一套较为官方的理论,而不是当用户体验之后,由用户的反馈来决定软件工程的质量!
用户体验好,但不一定软件质量高,比如各方面都可以进行进一步的优化等等。
2.对于MVP方法,如果只实现了最关键,最小功能集的VIP服务,会不会让用户觉得功能集太少,而导致用户的反馈是负面的,如果能定期推出一些新功能,增加用户的吸引力,及时的获得反馈及时的改良,效果会不会更好?
MVP方法是一步一步循序渐进的,功能会不断完善,有反馈就能进一步确定改善方向。
3.在结对编程中,正日由于随时的复审和交流,程序的质量难道一定取决于水平较高的程序员吗?水平较低的程序员难道就不会从各个方面影响着水平较高的程序员吗?结对编程的效率一定会提高吗?
大部分会,编程是两个人的事情,水平较高的会起带头作用。较低的会不断去学习。
4.提高估计能力的招数,其中一点是参照前人的经验。我觉得如果自己团队的水平和前人团队的水平差距过大,人员配备方面也差距很大。以及各个方面都存在较大差距!那这样的参考还有什么意义吗?这不仅会影响到自己的进度,有可能还会打击到团队成员的自信。
所以,参照前人时,要深刻理解前人和自己团队的区别和相似。
5.通过键盘这个案例,不明白作者表达的是好的想法到底会不会赢!就像编程语言一样,好的编程语言一直再出现,就从最开始的大家都习惯了C语言,随着高级语言的出现,高级语言也得到了普及,甚至使用的频率超过了先入为主的C语言,键盘这个案例我觉得不能说明好想法会输,输的原因更多的是在于键盘厂商没有大量生产这种产品,使得它没有得到普及!
习惯往往会打破常规和时代变化。
3.是否产生了新的问题?请提出。
无。
4.经过这学期的学习,你掌握到了哪些以前没有的技能,你是如何掌握的。
经过这学期的学习,学会了在编码前如何做一些需求分析,以及一些设计。明白了编码中团队协作也是必不可少的。掌握这些知识一部分是通过实践,一部分通过课程。课上老师提一些概念性的东西。课下各自队伍完成队伍工作而学会掌握这些东西。
5.有什么深刻的体会,对自己一学期学习过程的总结。
学习总是需要一个过程,或者现在学习的东西现在用不上,但不能确定以后也用不上。作为程序员,写项目是一个团队的过程,团队中少了任意一个人,团队的目标都可能达不到。学习要讲究实际不能一味的纸上谈兵。不付出实践,这些东西永远都是书上的而不是自己的。
王派201731103135:
1. 第一次博客作业链接:https://www.cnblogs.com/wpghys/p/10568762.html
2. 尝试对自己提出的问题进行解答,并阐明,是如何通过看书,实际,或者讨论弄明白的。
问题1:越早发现问题就越容易减少损失,但是书上说过早优化会出现问题,立即修复主要和次要的问题,这样也不好,怎么理解这个问题呢不分主次,想解决所有依赖问题:另一种极端是过于积极,想马上动手修复所有主要和次要依赖问题,然后就可以达成最出的目标,而不是根据现有的条件找到一个更好的方案,
回答:通过查资料,还有就是问了一下以前的学长,我所说的两个问题应该要看情况,提早发现bug肯定会减少损失,过早优化会导致和之前计划的不一样,影响了整个软件体系结构
问题2: 软件开发模式有很多种,比如主治医师模式,瀑布模式等等,但是在实际开发软件过程中,该如何选择呢,上下文:主治医师模式:就像在手术台上那样,有一个主刀医师,其他人各司其职,为主刀医师服务,这样的软件团队中,由首席程序员,他负责处理主要模块的设计和编码,其他成员从各种角度支持他的工作
回答:,也是通过查资料,问学长了解到的,假如软件项目对文档要求高,那就可以挑选这种开发方式。在运用瀑布开发方式时丰富的软件开发经验会比较有帮助,还有就是如果关于具有明确定义的业务目标及用户组的开发项目最有用,比较适用于一些中小型软件开发项目,或者是开发时比较急迫的软件项目,就选择快速应用开发模式,等等
问题3:做到第三步半的时候,为什么说后面的20%往往要花费80%的时间呢,上下文: 谁来做第三步呢,程序员写完功能的时候,我们感觉项目好像完成了80%,殊不知后面的20%往往要花费80%的时间,敏捷流程没有明确表示到底何人何时何种优先级来完成这20%的任务
回答:到了后面集成测试,验收测试的时候,可能会发现很多之前没有的bug,该bug是很费时间的,还有就是可能到了最后有些功能未实现
问题4:场景是指达到目标所必须经历的过程,其中过程是指什么呢,上下文:有了典型用户之后,我们还必须决定每一个典型用户的目标,对于每一个目标,列出达到目标所必须经历的过程
回答:过程包括需求分析,概要设计,编码等过程,我们必须要做需求分析,我们必须了解到客户需要什么,所以需求分析很重
问题5:软件的质量保障工作是如何进行的呢,上下文:从上面的叙述中不难看出,软件的质量保障和软件测试是有很大区别的然而当前IT业界经常混用QA和test两个名词
回答:我们是经常进行单元测试,最后进行集成测试,从而来保证我们的软件质量
3. 是否产生了新的问题?请提出。
无。
4. 经过这学期的学习,你掌握到了哪些以前没有的技能,你是如何掌握的。
学习了php,通过视频学习,跟着视频上的老师敲一些代码
5. 有什么深刻的体会,对自己一学期学习过程的总结。
遇到困难都不要放弃,最终都会找到解决方法的,即使没有解决,我们也会收获很多,获取很多的经验,经常进行测试很重要,它会让我们发现我们自己没发现的bug,减少损失
(4)团队项目整理
Github地址:https://github.com/Lilcherry/Team-Project