这个作业属于哪个课程 | https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ |
这个作业要求在哪里 | https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/3379 |
团队名称 | 黄金六点 |
这个作业的目标 | 总结团队每个成员在这个课程中的收获以及课程项目总结 |
姓名 |
学号 |
程晓溪 |
201731061404(队长) |
孙玥祺 |
201731064306 |
罗钦莲 |
201731063208 |
李佩珊 |
201731063209 |
彭宇 |
201731062204 |
詹林非 |
201731062203 |
一、组员个人总结
孙玥琪(201731064306)<https://www.cnblogs.com/230332663abcd/p/11061363.html>
一.回望第一次作业对软件工程的想象和提出的问题以及链接
以前提问题的博客以及畅想:https://www.cnblogs.com/230332663abcd/p/10542502.html#4225180
二.尝试解答自己的问题
1.
解答:学完这门课,我认为一个工程师或者是一个项目组的成员,不会只专注于一个技术,在不断的练习项目,不断的接触不同的工程,在多年的经验积累后,掌握多种技术,或者是说挑战不同的角色不是一件很困难的事,实际在接触的团队项目中,我们的确有时会转换角色。解决方法:通过这学期的团队项目,亲身经历了这次过程,感觉到实际的分工并不是这么明确,在不同的阶段,每个人根据项目的需要,会不同的切换角色,确实像书中所说。比如在前期,我负责用PS画设计图,但在后期的测试中,也参与了单元测试的部分和编码的部分,因此分工这个是不会很明确的。
2.
解答:其实在团队中,确实不管是敏捷流程还是一般的分类都是存在分工的问题,而我们组在解决这种问题的时候是强制性的要求,自己的任务要完成。确实敏捷流程是一种新的方式,而在建立在团队成员很默契的大家都存在有利益根据每个人的贡献率来发奖金的情况下,确实在提这个问题的时候没有考虑外在的条件。方法:通过做团队项目,根据自己的经验,以及老师课堂上对敏捷流程的介绍,具体的分工和做项目的过程。
3.
解答:通过学习的比如第九章中,软件结构化分析以及软件结构化详细工具中,在画数据流图,盒图等都用到了对符号的运算和变化。比如在简化一个用户需求的时候,需要逻辑将它顶层图的连线,关系呈现和实现。在比如在盒图中,需要将流程图的计算流程结果进行转换,推理成另一种表达。在比如在matlab这门语言中,我们将数学知识通过适当的模型转换成软件的模型,也就是说不一定是符合数学特征,而是在转化的时候用到数学思想。方法:通过老师的讲解和联系,体验这种过程和转换的思路以及在数学建模的比赛中接触到的将数学与计算机联系的过程。
4.
解答:我当初的理解是错误的。软件的开发活动中,有一种模型叫做原型模型,它的定义就是在做一个初步的版本发布出来,等待用户的确认,在客户的认可和提出新的方案时,在做新的版本和更改,最终做出一个完整的版本。方法:是通过上课老师讲解的模型中所介绍的原型模型,正好和这个问题相符合。
5.
解答:可以采用一些开发模型来解决这个问题。比如:瀑布模型,螺旋模型,原型模型,增量模型,构成继承模型等。比如原型模型,可以先做一个初步的模型,先让客户来评估,这个时间肯定是在几个月之内。越快越好。在顾客给出意见和建议,在陆续发布第二,第三个版本。方法:通过老师上课的介绍,比较几个模型的特点以及课后查阅网站。
三.是否产生了新的问题及提出
1.在团队的分工中,存在能力的差异,如果有些队员停留在初始技术,导致其他队员工作量过大,不知道该怎么解决这类问题。
2.在考虑项目的漏洞时,不能够想的很全面,导致在其他同学的验证时,漏洞很懂。有没有更好地解决方案,解决这些思考方案的缺陷。
3.在实际画数据流图的时候,考虑的版本很多,不知道如果选择出合适的数据流图的模型。
四.掌握的技能
1.单元测验方法。通过博客作业的引导和学习,明白怎样通过用VS和代码去测试自己完成的代码,以及查看覆盖率等功能。
2.了解github这个强大的代码管理的软件,知道怎么从本地上传文件到大的代码网站里,根据博客的引导和作业。
3.代码的能力,对C#中计算器,计数器,导入文件,导出文件等功能,以及游戏的发布,使用都有了深入的了解,根据博客的个人项目和团队项目以及网站的查阅和资料的学习。
4.对软件工程的生命周期,以及需求分析,结构化设计都有了详细的了解,根据老师上课的讲解。
五.总结
首先是对软件工程各个阶段,从开始的可行性分析到软件的发布,中间的过程都有了详细的了解。在通过博客作业的一步步的引导,对整个过程了解更加清晰,从书本到实践还是克服了很多的困难,中间也存在一定的差距。其次,在个人博客中,学习到了代码的编程的各种方式以及测试的方法。虽然这学期很累,也绝望过,但经历了,觉得收获很多,很值得。
罗钦莲(201731063208)<https://www.cnblogs.com/SabrinaL/p/11073685.html>
- 请回望第一次个人作业,你对于软件工程课程的想象和提出的问题。
1. 第2章第三节介绍了个人开发流程的任务清单,提供了2011年收集的两组统计数据,对比大学四年级学生与工作三年的软件工程师在PSP阶段用时的对比,从表中对比我们可以发现大学生在需求分析和测试阶段用时明显比工程师要短,但编码时间却比工程师长许多。这是什么原因导致的呢?我们在个人开发软件过程中应该注意哪些问题?
2. 第5章第三节,瀑布模型跟圆形模型都有它的特点——瀑布模型需求明确但不实用,圆形模型实用但需求分析不明——我们应当怎样选择不同的开发流程才能开发出适应时代的软件呢?
3. 第6章第一节,对于敏捷流程的定义以及为什么提出这个东西,有什么作用 不太理解。
4. 书中第14章,讲述了软件的质量=程序的质量+软件工程的质量,提到软件工程质量可以用一套比较成熟的理论CMMI,帮助企业进行对软件工程过程的管理和改进,增强开发制造能力,从而能按时地,不超预算地制造质量的软件。那CMMI适用于什么样的公司或者团队?CMMI怎么用?怎么将它应用到具体工作中?
5. 第16章中谈到了创新,创新的迷思,时机和招数等。列举了一些产品的创新。我还是不太了解在软件工程领域中创新是什么样子的, 新的设计模式属于软件工程领域的创新么? 他是否像其他自然学科那样存在某些规律等待着我们去发现呢?
- 链接到以前提问题的博客
https://www.cnblogs.com/SabrinaL/p/10548104.html
- 尝试对自己提出的问题进行解答,并阐明,是如何通过看书,实际,或者讨论弄明白的
1. 在项目开发阶段,需求分析是十分重要的。在编码的前期要让每一个参与项目的人能够清晰的知道我要做的是什么,最终的目标是什么样的,我要关注的重点有些,还有哪些疑虑我需要讨论或者解决的。准备工作做好后,对每一个团队成员项目的进度是非常清晰的。(通过查阅相关资料弄明白的)
2. 瀑布模型:在最初就确定好需求分析。圆形模型:可以随时根据客户的要求更改需求分析,并编写出更符合时代需求的程序。瀑布模型需求明确但缺乏灵活性,圆形模型实用但需求分析不明。我们应当怎样选择不同的开发流程才能开发出适应时代的软件呢?这个问题我还是回答不上。但每个模型都有优缺点,应看情况而定。
3. 敏捷流程是一系列价值观和方法论的集合。敏捷的做法更能带来价值。(通过上课认真听课弄明白的)
4. CMMI可用于软件过程的改进。帮助软件企业对其软件过程的改变进行计划、制定以及实施。还可用于软件过程评估和软件能力评鉴。在评估中,一组经过培训的软件专业人员确定出一个企业软件过程的状况,找出该企业所面对的与软件过程有关的,最迫切的所有问题;以及取得企业领导层对软件过程改进的支持。在能力评鉴中,一组经过培训的专业人员鉴别出软件承包者的能力资格;或者是检查监察正用于软件制作的软件过程的状况。(通过查阅相关资料弄明白的)
5. 对于在软件工程领域中的创新,我觉得任何一种新的思维方式和新的设计模式都算是创新。他也像其他自然学科那样存在某些规律等待着我们去发现。(通过这一学期课程的学习弄明白的)
- 经过这学期的学习,你掌握到了哪些以前没有的技能,你是如何掌握的。
提高了团队合作沟通能力,在团队项目中,大家一起思考分析解决问题,进行相应的分工,及时反馈情况等这一过程的实践学习让我收获了不少。
- 有什么深刻的体会,对自己一学期学习过程的总结。
因为自己的专业知识基础不太好,在很多方面都得到了小组成员的指导,我也从她们身上学到了很多。这门课也让自己变得更有耐心了,也了解并掌握了很多专业知识,虽然过程很辛苦,但收获很多。
程晓溪(201731061404)<https://www.cnblogs.com/chengxiao299/p/11081541.html>
问题回答<第一次阅读作业>
在本课程中,我初步领略到了软件工程思想,掌握了需求分析、软件过程模型建立、风险控制、团队合作等技巧。在实践中运用了许多课程中学到的知识,真正体会到活学活用的意义。
对于需求不明确的情况可以使用原型法等需求建模方法,在不断的与用户交流过程中找到用户真正的需求。
在软件设计阶段就应当避免出现无法实现的需求或者多余的功能模块,如果在开发阶段的确无法实现原有需求,就要做出需求变更,与多方达成最终协定。
在大型软件项目中往往采用增量模型进行开发。利用早期的增量得到的反馈来改进后面的阶段。可以使用户有较充裕的时间学习和适应新产品,从而减少可能给客户组织带来的冲击。
开发人员应写好相关文档以及代码注释、使用说明等,方便测试人员了解程序运行详情;测试人员可仅反馈测试结果,促使开发人员修改,而后再次进行测试。
收获总结
在本次课程中做了很多工作,是在以前没有的经历。感受了软件开发的全部过程,对已掌握的技术有了进一步的提高,学习了如何进行可行性分析、软件需求分析、软件过程实现、软件测试、软件发布、软件维护等等。在团队合作中,也遇到了许多问题,选题、团队分工、进度协调等方面都遇到了许多问题,在与组员的协商合作下,收获了许多经验与教训。感谢开设这门课程并细心指导我们完成项目开发,这使我了解了如何成为一个软件工程师,收获良多。
李佩珊(201731063209)<https://www.cnblogs.com/Dawn33/p/11071259.html>
问题解答:
1、讲到客户需求的时候说客户的需求总是在变的,那如何与客户达到相对的统一来减少程序员后期的工作量呢?同时一些客户对软件的要求可能是程序员所达不到的,这是如何去和客户协调呢?
在软件正式开发之前可以和客户进行交流沟通,获取需求,制定需求规格说明说,严格按照需求说明进行工作。同时可以采取原型的软件开发模型,在开发过程中不断完善,应对需求的改变。对于一些程序员难以达到的需求,还需要团队人员与用户进行耐心的沟通交流。
2、书中2.3个人开发流程一节中,在大学生与工程师的PSP数据比较中,明明大学生需求分析和测试代码所用的时间都要比工程师少,但在具体代码过程所用的时间却要比工程师多,这是什么原因呢?
大学生与工程师相比,经验较少,能力也相对较弱,在考虑需求以及测试的方面不如工程师周全,所以花费时间比较少,然而他们也许会在编码过程中遇到更多的问题,这样花费时间会比工程师更长。
3、在软件开发的过程中,软件人员的工作能力有好有差,有些人贡献多,有些人贡献少,如何分配薪酬?
可以根据每一个工作人员的PSP表衡量其个人工作情况,再根据贡献比例分配薪酬。
4、我们与客户交流他们的需求,是在软件开发前,还是在过程中也和用户不断交流?
在软件开发前与过程中都会进行不断地交流。
5、对一个已经被客户使用体验的软件,面对它的缺点和优点,我们应该如何改进并且不影响客户使用?
在不影响客户使用的前提下,保持其优点,及时修改错误,改进程序,并且提醒用户更新版本,获得更好的使用感受。
个人收获:
在这学期中,我切实地了解了软件开发的整个过程,亲身参与从软件设计、需求分析到最后的发布与维护阶段,为自己成为一个真正的软件工程师打下了基础。同时在与团队成员的相处磨合中,也学会了如何去协调彼此,安排工作。并且,我累计了很多关于软件开发的经验,这都是在课堂上学不来的。总的来说,这门课程让我获益匪浅。
彭宇(201731062204)<https://www.cnblogs.com/IUidol/p/11061353.html>
一.回望第一次个人作业
第一次个人作业链接:https://www.cnblogs.com/IUidol/p/10557988.html
二.对提出的问题进行解答并阐明
1.第五章:团队和流程
“这样的团队在每一个项目中,不同的人会被挑选不同的角色。在下一个剧目中,这些人也许会换一个不同的角色类型。” 可是现在大部分的软件公司都是有明确的职位层次,比如有些人是专门写功能代码的,而有些是软件分析师,软件测试师。他们在公司都有明确的划分,又怎样在下一个项目中变换角色呢?就像刚进公司的码农怎么可能才完成一个项目就不断的变换角色呢?
解答:在不同的团队项目中每个人可以充当的角色不同,负责的部分也可以不同,一个人在这个项目中可以做测试人员,而在下一次的项目中可以是具体某一部分的开发人员。我们作为程序员,就应该在尽可能的发挥自己的长处,而不每次只局限于一个角色,可以在成长中进步,在进步中成长,不断地发掘自己的才能。
这是我在软件工程实践这门课中,通过大家合作完成的团队项目的过程中有所体会而明白的道理。
2.第五章:团队和流程
瀑布模型中提到“温斯顿建议:要让顾客正式地,深入地,持续地参与到项目中”
顾客怎么参与到项目中呢?他们只关心所交付的功能是否很好的完成了,并看不懂代码听不懂专业知识。而且在参与过程的顾客并没有在当时就提出新的要求而是之后再提呢?
解答:可以通过相关工作人员在需求分析阶段进行撰写SRS中,通过不同的手段,比如问卷调查,深度体验等进行考察,询问不同的用户,化出用例图,再和客户进行沟通交流,做到客户满意,让他们真正参与进项目开发中。
这是我学习了相关的知识,以及从UML课程中学习完用例图和需求分析过后所明白的道理。
3.第五章:团队和流程
“瀑布模型的局限性:回溯修改很困难,甚至不可能。但是软件生产的过程需要时时回溯”
既然知道瀑布模型完成过后修改很困难,而且需要时时回溯,为什么不在设计相关的功能或者在写代码完成相关的阶段的时候就留有余地,进行能够回溯的设计呢?
解答:因为瀑布模型回溯修改等很困难,所以我们才在瀑布基础上有了新的方法延伸等,进行改进的方法。比如MSF-过程模型,就是结合了瀑布模型的里程碑优点和螺旋模型的增量迭代长处而诞生的模型。我们在不断地发现问题的基础上,对原有技术等进行改进才会有技术的进步,跟上时代的发展的等。
这是我们在课上所讲过的内容,老师的讲解让我更加的理解这个问题的关键之处与解决之法等。
4.第六章:敏捷流程
“尽早并持续地交付有价值的软件以满足顾客需求”
尽早是多久呢?而且在早期软件并没有完成,可能只是满足个别功能的代码,最后进行美化,怎么交付有价值的软件呢
解答:尽早的交付就是在所能及的能力范围内,完成客户所要求的基本功能后,进行交付工作,再在交付后的版本上进行更新美化,既可以将利益最大化,又可以是客户满意,又可以进行维护版本更新,能够在使用中发现问题,使做出来的软件生命周期更长。
这是在这门课的学习过程中的体会,让我对这个问题有了一个答案,我们不一定要在完全做好后再交付,谁不会有一个bug呢?谁又能马上发现呢,可以早点交付进行使用 ,听取更多的人的意见。
5.第八章:需求分析
“某些产品必须实现某些功能”
如果有些功能用代码无法实现,或者很难实现,不能不要那个功能吗?或者可以改成其他相似的。
解答:可以和客户进行沟通呀,如果实在实现不了可以询问客户进行协商,是否要换成相似的功能,不能够在最后才和客户说,有什么建议或者难处一定要提前和客户沟通,不然越到最后成本代价会更高,客户满意度会降低很多。 这是在学习过程中所悟出的道理。
三.新的问题
通过学习这门课,已经解决了我对软件工程这门课的很多的问题,暂时没有其他的新问题。
四.掌握的技能
1.经过这学期的学习,首先我更加了解了软件工程项目团队是如何运作的,学会了怎样更好地与他人合作完成工作,怎样更好地交流。这是我们在团队项目的完成中所有的体会和感悟。
2.我对于软件的测试有了很多的掌握,测试用例等等。通过老师上课的讲解,黑盒测试,白盒测试等等,以及在网上进行百度搜索,真正的实践等,让我对测试有了一定的理解。
3.对Github这个工具有了了解以及使用掌握。通过老师的介绍以及在完成作业的过程中,还有在网上进行百度资料等的查询,不断地发掘Github的强大使用功能,能够对源代码进行很好的管理,让我很喜欢这个工具。
五.体会及总结。
通过学习这门课,解决了我对软件工程个专业的一些疑惑,包括专业上和非专业的其他问题。在课堂上老师的讲解让我对软件工程团队开发项目的流程有了一定的了解,了解了一个团队是如何运作的。以及在软件开发,软件测试等的技术上有很多的了解和深入。但是我觉得这门课的作业也有点太多了,而且时间紧迫,让人无法高质量的完成。经过这学期的学习,我也更加了解了软件工程项目团队是如何运作的,学会了怎样更好地与他人合作完成工作,怎样更好地交流。
詹林非(201731062203)<https://www.cnblogs.com/junandlin/p/11083331.html>
问题回答<第一次阅读作业>
教材( 第4章两人合作)
两人合作时代码设计规范我认为两人商量来定要比直接拿现成的模板要更方便
在和我的队友两人合作时我们两个简单谈论了程序书写的格式,对命名及,注释提出了要求。提高了合并代码及相互检查各自书写的代码时的效率。
教材( 第5章团队和流程)
每个团队都有自己的团队模式及团队中的每个成员处理一个流程中的不同步骤,但是不同项目有时的流程不同那每个成员又要重新分任务,这样会不会导致节奏更慢,效率低
从第五章看出团队应该有一致的目标。一个团队的成员不一定要同时工作,有各自的分工,互相依赖合作,共同完成任务。
教材( 第8章需求分析)
在刚开始的时候用户可能对自己的需求不太明确此时怎样怎么建立比较直观的模型能让顾客了解到我们开发的软件是否是他满意的
可以进行用户调研,通过详细的面谈,广泛而深入地了解用户的背景、心理、需求等。设计用户调查问卷
教材( 第11章软件设计与实现)
作者说即便软件设计完后所有功能都实现了还是不能立即发布,我认为在中途写代码时每步都检查测试了的话最后就不用再费时间
代码虽然都写了,但是代码中间可能还有许多的Bug,各个模块间的合作还有很多的问题,需要检测与优化。
教材( 第16章IT行业的创新)
我们都知道创新使人进步,团队,公司只有创新才能发展的更好,但是有些时候当你有一个创新的点子的时候缺少团队资金等方面的支持时就很难实现创新,是否要创新,就得依靠团队或公司
想要让人认同或者支持你的创新要对利益相关人讲清楚“ 你能从中得到什么”, 创新的想法和目前流行的做法比, 有什么相对优势, 能让别人清楚的看到区别, 并能够尝试
掌握到了哪些以前没有的技能。体会,总结。
粗略的懂得了怎么使用GitHub和Visio绘图,了解到了很多知识。对软件工程开发的过程有了大概的体会和了解。在参与团队开发的过程中,更加了解到如何与他人合作沟通,
以前只知道敲代码觉得开发软件离自己特别的远。 通过这个课程, 我们进行了实战练习。 软件开发的每一步都有了了解体会。更明白自己以后作为软件工程师要掌握的技能