201671030111 李蓉 实验十四 团队项目评审&课程学习总结

项目 内容
这个作业属于哪个课程 软件工程
这个作业的要求在哪里 实验十四 团队项目评审&课程学习总结
作业学习目标 掌握软件项目评审会流程,反思总结课程学习内容。

任务一:结合本学期课程学习内容,对比《实验一 软件工程准备》的任务5你所提的问题(给出提问博客链接),尝试对提出问题进行解答,并阐明是如何通过学习/实践/讨论弄清楚的;学习中是否产生了新的问题?如有,请提出。

        构建之法与博客首秀

问题一:软件的安全功能是指什么呢?

        经过一学期的学习,通过阅读书籍,我认为在软件中有类似飞机的安全功能,但是每个软件的安全需求不同,所以,其安全功能也是不一样的。比如一些带有支付功能的软件,其安全功能可能就是保障用户的财产安全,而像一些社交软件,其安全功能可能就是保障用户的账户安全。比如qq,其安全功能可能就是保障用户的社交账号不被不法分子盗用。再比如支付宝,其安全功能就是保障用户的钱财不被不法分子盗刷。

问题二:在软件项目中,哪项工作用“20%占用了80%的时间”?

        经过一学期的学习,在完成了几个项目有了一些开发经验后,再回过头来看这个问题,我认为在软件项目中,需求调研这项工作占用了80%的时间,以前认为的编程反而没有占那么多的时间,而前期的需求调研工作却占用了大量的时间。一个软件的开发,最主要的不是去编写程序,而是需要充足的时间去调研软件的目标用户所需要的功能,否则就是在做无用功,就是在想当然的编写程序代码,这样开发出来的软件,最后可能只会无人问津。所以,我认为需求调研这项工作占用了百分之八十的时间,而设计、实现这个软件,可能用了剩余的百分之二十的时间。

问题三:在现实的软件开发中,企业一般用哪种方式获取用户需求?

        经过一学期的学习,在真正做了几个小型项目和一个较大的项目,拥有一些软件开发经验后,我认为企业应该没有具体选择的应用模式,而是根据需求并结合模型的特点来选择使用哪种方式来获取用户需求。就像我们班在进行需求调研时,好多组的同学未经切实的考虑就选择了问卷调查法来获取用户需求,而实际是有的项目可能并不适合使用该方法,使用错误的方法获取用户需求,可能做的只是无用功,最后,还得用其他的方法去获取用户需求,费时又费力。因此,我认为企业获取用户需求不是只用一种方式,而是根据开的项目选取合适的方法去获取用户需求,为了获取更准确的用户需求,也不可能只使用一种方法,而是多种方法结合起来获取用户需求,而这项工作可能占用80%的时间。

任务二:总结自己在项目的 可行性分析/需求分析/软件设计/实现/测试/项目验收/中学到了哪些“知识点”。

1.可行性分析:
        可行性分析是通过对项目的主要内容和配套条件,如市场需求、资源供应、建设规模、工艺路线、设备选型、环境影响、资金筹措、盈利能力等,从技术、经济、工程等方面进行调查研究和分析比较,并对项目建成以后可能取得的财务、经济效益及社会环境影响进行预测,从而提出该项目是否值得投资和如何进行建设的咨询意见,为项目决策提供依据的一种综合性的系统分析方法。可行性分析包括投资必要性,技术可行性,组织可行性,资金可行性,政策可行性等。
2.需求分析:
        需求分析也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。需求分析是软件计划阶段的重要活动,也是软件生存周期中的一个重要环节,该阶段是分析系统在功能上需要“实现什么”,而不是考虑如何去“实现”。需求分析的目标是把用户对待开发软件提出的“要求”或“需要”进行分析与整理,确认后形成描述完整、清晰与规范的文档,确定软件需要实现哪些功能,完成哪些工作。此外,软件的一些非功能性需求(如软件性能、可靠性、响应时间、可扩展性等),软件设计的约束条件,运行时与其他软件的关系等也是软件需求分析的目标。常用的获取需求的方法:现场观察、访问、问卷调查、会议研讨、原型评估、场景分析和用例分析等。
3.软件设计:
        软件设计是从软件需求规格说明书出发,根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。软件设计阶段包括:概要设计与详细设计,概要设计又包括结构设计、接口设计、全局数据结构设计和过程设计。
(1)概要设计:描述了软件的总的体系结构就是概要设计,概要设计阶段要把软件“做什么”的逻辑模型变换为“怎么做”的物理模型,即着手实现软件的需求,并将设计的结果反映在“设计规格说明书”文档中,所以软件设计是一个把软件需求转换为软件表示的过程。
(2)详细设计:详细设计是对概要设计的一个细化,就是详细设计每个模块实现算法和所需的局部结构。详细设计的主要任务是设计每个模块的实现算法、所需的局部数据结构。详细设计的目标有两个:实现模块功能的算法要逻辑上正确和算法描述要简明易懂。
4.实现:
        通常把编码和测试统称为实现。
(1)编码:编码就是把软件设计结果翻译成用某种程序设计语言书写的程序。
(2)测试:测试就是检测程序并改正错误的过程。
5.测试:
(1)测试方法:黑盒测试、白盒测试、静态测试和动态测试。
(2)测试步骤:
        a.模块测试;
        b.子系统测试;
        c.系统测试;
        d.验收测试;
        e.平行运行。
6.项目验收:
        项目验收是软件开发结束后用户对软件产品投入实际应用以前进行的最后一次质量检验活动。它要回答开发的软件产品是否符合预期的各项要求以及用户能否接受的问题。由于它不只是检验软件某个方面的质量,而是要进行全面的质量检验,并且要决定软件是否合格,因此验收测试是一项严格的正式测试活动。需要根据事先制订的计划,进行软件配置评审、功能测试、性能测试等多方面检测。项目开发方应该提供《需求分析说明书》、《概要设计说明书》、《详细设计说明书》、《数据库设计说明书》、《测试计划》、《测试报告》、《程序维护手册》、《用户操作手册》、《项目总结报告》等一系列的文档说明。
项目验收过程中,项目验收组织对于项目整体的九项主要的验收活动:
(1)项目目标验收;
(2)项目性质验收;
(3)项目空间验收;
(4)项目质量验收;
(5)项目技术验收;
(6)项目损耗验收;
(7)项目时间验收;
(8)项目安全验收;
(9)项目信息验收。

任务三:结合个人项目/结对编程/团队项目的个人经历,谈谈心得。

        通过一学期的学习、实践,在个人项目开发中,我认识到自己还有许多的技术需要去学习,虽然通过查阅大量的资料最终也磕磕绊绊的完成了项目,但深刻认识到自己在编程方面任重而道远,还需要花费大量的时间去学习、去练习新技术;在结对编程开发中我认识到一定要事先统一好编码风格,还要把握好一个人编程的时间,不能太长也不能太短,时间太长编程效率会降低,时间太短可能实现不了什么功能,两个人一定要配合好,有什么矛盾一定要当面说开,讨论出解决办法,否则可能完不成项目或完成的项目质量低;在团队项目开发中,我认识到组员之间的沟通非常重要,发生矛盾之后不能因为怄气而互相不理睬,要求同存异,找出解决办法,否则在后续的开发过程中会寸步难行,同时,在开发过程中也要进行合理的分工,虽然不可能每个人的工作百分百占一样的比例,但这周某位同学分配的工作多了,下周就可以给他分配的工作少一点,还要给每个人分配适合他的工作,还有就是,在遇到较大的困难时,一定要及时向他人求助,不能因为好面子就一直憋着不问,实在无法解决时,小组之内可以开会讨论,共同商讨解决办法,作为一个团队,一定要团结!

任务四:总结这门课程的实践总结和给你带来的提升,包括以下内容:

1.统计在软件工程实践中,你完成了多少行的代码?

        在软件工程的实践中,我大概完成了2000+行代码。

2.你在软件工程实践的各次作业分别花了多少时间?(做一个列表)

软件工程作业 花费时间/h
实验一 软件工程准备 8
实验二 软件工程个人项目 15.5
实验三 作业互评与改进 8
实验四 软件工程结对项目 15
实验五 团队作业1:软件研发团队组建 5
实验六 团队作业2:团队项目选题 5
实验七 团队作业3:团队项目原型设计与开发 14
实验八 团队作业4:基于原型的团队项目需求调研与分析 21
实验九 团队作业5:团队项目需求分析改进与系统设计 17
实验十 团队作业6:团队项目系统设计改进与详细设计 20
实验十一 团队作业8:软件测试与Alpha冲刺 30
实验十二 团队作业9:Beta冲刺与验收准备 15.5
实验十三 团队项目评审&课程学习总结 6

3.哪一次作业让你印象最深刻?为什么?

        我印象最深刻的一次作业是实验十一 团队作业8:软件测试与Alpha冲刺,由于我们班课程少且放假多,我们班的课程进度就很慢。当老师要求我们在一周内完成编码阶段时,我们内心其实都很慌,不知道自己在限定时间内能不能完成任务。在当天,我们就开会进行了讨论,进行了明确的分工。当学习了一些相关知识后,我们就开始了任务。由于编程基础不是很好,在刚开始编写代码时,确实遇到了许许多多的问题,但好在通过小组内同学的帮助,最终也解决了遇到的那许许多多的问题。通过这次实验我认识到“众人拾柴火焰高”,只要小组内的同学团结一致,看似不可能完成的任务最终也能完成

4.累计花了多少个小时在软件工程实践上?平均每周花多少个小时?

        累计共花了180个小时在软件工程实践上,平均每周10个小时在软件工程实践上。

5.你学习和掌握的新语言、新平台。

        博客园、Markdown、GitHub、MySQL数据库、jsp技术、中国大学MOOC、摹客、visio、ProcessOn、leango、雨课堂。

6.填写下表,总结一学期的学习中,你学习或使用的软件工程开发工具、开发方法和建模方法。

软件开发工具,项目管理工具 软件开发方法 软件建模方法
Mockplus、leangoo、GitHub、MyEclipse、MySQL 原型方法、面向对象方法、Jackson方法 数据库建模、面向对象建模、数据流图

7.其他方面的收获或提升。

        通过这学期的学习和项目实践,我知道了如何撰写博客、如何使用许许多多的工具来辅助软件开发、如何有规划的学习新知识新技术和应用新知识新技术,同时,我也学到了新的学习知识的方法,比如老师的翻转课堂教学法,以前在学习中我是很少会课前预习的,但在这学期,我全程跟着MOOC网的老师学习了新知识,虽然在后期的学习中因为课程进度原因,老师是全程给我们讲授知识,但我还是收益匪浅!

任务五:你认为目前的课程存在哪些问题,你有什么更好的建议。

        通过本学期的学习,我认为老师新颖的教学方式——翻转课堂,前期做的很好,也有一定的过渡时期,但坚持的不太好,后期由于课程进度原因坚持的不是很好,希望老师在下学期的教学中能协调好这方面。还有就是在实践课程中,任务量大且耗时长,这学期由于考研等原因,有些实验完成的匆匆忙忙,没有达到预期的效果,希望老师可以减少一些工作量。最后,感谢老师一学期的辛勤教导,也感谢助教们对我们学习上的帮助和监督。