201671010406-丁家辉-实验十四 团队项目评审&课程学习总结

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

项目 内容
这个作业属于哪个课程 教师博客主页链接
这个作业的要求在哪里 作业链接地址
作业学习目标 (1)掌握软件项目评审会流程
(2)反思总结课程学习内容
github仓库地址链接 GitHub仓库链接

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

1.在进行软件设计分析的时候,对于同一个问题可能会出现不同的算法,应该怎么在最短的时间内找到适合此问题的算法?

我们在学习每种数据结构和算法的时候,都详细分析了算法的时间复杂度、空间复杂度,但是,在实际的软件开发中,复杂度不能与性能简单划等号,不能表示执行时间和内存消耗的确切数据量。原因有下面几点:复杂度不是执行时间和内存消耗的精确值;代码的执行时间有时不跟时间复杂度成正比;对于处理不同问题的不同算法,其复杂度大小没有可比性。在平时的开发中,在数据规模很小的情况下,普通算法和高级算法之间的性能差距会非常小。如果代码执行频率不高、又不是核心代码,这个时候,我们选择数据结构和算法的主要依据是,其是否简单、容易维护、容易实现。大部分情况下,我们直接用最简单的存储结构和最暴力的算法就可以了。面对实际的软件开发场景,当我们掌握了基础数据结构和算法之后,最考验能力的并不是数据结构和算法本身,而是对问题需求的挖掘、抽象、建模。如何将一个背景复杂、开放的问题,通过细致的观察、调研、假设,理清楚要处理数据的特征与访问方式,这才是解决问题的重点。只有理清楚了这些东西,我们才能将问题转化成合理的数据结构模型,进而找到满足需求的算法。实际上,对于大部分常用的数据结构和算法,编程语言都提供了现成的类和函数实现。比如,Java 中的 HashMap 就是散列表的实现,TreeMap 就是红黑树的实现等。在实际的软件开发中,除非有特殊的要求,我们都可以直接使用编程语言中提供的这些类或函数。

2.bug有级别高低之分,当我们发现问题后怎么判断bug的重要程度和后期的影响程度?

优先级是表示处理和修正软件缺陷的先后顺序的指标,即哪些缺陷需要优先修正,哪些缺陷可以稍后修正。 确定软件缺陷优先级,更多的是站在软件开发工程师的角度考虑问题,因为缺陷的修正顺序是个复杂的过程,有些不是纯粹技术问题,而且开发人员更熟悉软件代码,能够比测试工程师更清楚修正缺陷的难度和风险。 缺陷的严重性和优先级是含义不同但相互联系密切的两个概念。它们都从不同的侧面描述了软件缺陷对软件质量和最终用户的影响程度和处理方式。 一般地,严重性程度高的软件缺陷具有较高的优先级。严重性高说明缺陷对软件造成的质量危害性大,需要优先处理,而严重性低的缺陷可能只是软件不太尽善尽美,可以稍后处理。 但是,严重性和优先级并不总是一一对应。有时候严重性高的软件缺陷,优先级不一定高,甚至不需要处理,而一些严重性低的缺陷却需要及时处理,具有较高的优先级。 修正软件缺陷不是一件纯技术问题,有时需要综合考虑市场发布和质量风险等问题。例如,如果某个严重的软件缺陷只在非常极端的条件下产生,则没有必要马上解决。另外,如果修正一个软件缺陷,需要重新修改软件的整体架构,可能会产生更多潜在的缺陷,而且软件由于市场的压力必须尽快发布,此时即使缺陷的严重性很高,是否需要修正,需要全盘考虑。 另一方面,如果软件缺陷的严重性很低,例如,界面单词拼写错误,但是如果是软件名称或公司名称的拼写错误,则必须尽快修正,因为这关系到软件和公司的市场形象。

3.对于软件工程质量的描述有“好”、“快”、“便宜”,而有些软件在使用中也会有bug出现,而修复一些顽固bug又需要花费人力物力财力,因此应该怎么权衡“好”、“快”、“便宜”之间的矛盾?

项目作为一个整体,要使各方面的资源能够协调一致,就要特别熟悉项目三角形的概念。三角形的三条边就是我们最常需要达到的成本目标、质量目标和进度目标。项目三角形中的成本,主要来自于所需资源的成本,自然也包括人力资源的成本,这些资源通过不同的方式获得,可以对应不同的成本,对资源的需求与工作范围和工作时间都有直接的联系。项目三角形强调的就是这三方面的这种相互影响的紧密关系。1)为了缩短项目时间,就需要增加项目成本(资源)或减少项目范围;2)为了节约项目成本(资源),可以减少项目范围或延长项目时间;如果需求变化导致增加项目范围,就需要增加项目成本(资源)或延长项目时间。因此,项目计划的制定过程是一个多次反复的过程,根据各方面的不同要求,不断调整计划来协调它们之间的关系。在项目执行过程中,当项目的某一因素发生变更时,往往会直接影响到其他因素,需要同时考虑一项变更给其他因素造成的影响,项目的控制过程就是要保证项目各方面的因素从整体上能够相互协调。

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

  • 可行性分析:包括技术可行性,时间可行性,经济可行性、组织可行性

  • 需求分析:软件需求分析所要做的工作是深入描述软件的功能和性能,确定软件设计的限制和软件同其它系统元素的接口细节,定义软件的其它有效性需求。进行需求分析时,应注意一切信息与需求都是站在用户的角度上。尽量避免分析员的主观想象,并尽量将分析进度提交给用户。在不进行直接指导的前提下,让用户进行检查与评价。从而达到需求分析的准确性。分析员通过需求分析,逐步细化对软件的要求,描述软件要处理的数据域,并给软件开发提供一种可转化为数据设计、结构设计和过程设计的数据和功能表示。

  • 软件设计:软件设计的主要任务就是将软件分解成模块是指能实现某个功能的数据和程序说明、可执行程序的程序单元。可以是一个函数、过程、子程序、一段带有程序说明的独立的程序和数据,也可以是可组合、可分解和可更换的功能单元。模块,然后进行模块设计。概要设计就是结构设计,其主要目标就是给出软件的模块结构,用软件结构图表示。详细设计的首要任务就是设计模块的程序流程、算法和数据结构,次要任务就是设计数据库,常用方法还是结构化程序设计方法。

  • 软件实现:需求是基础,没有需求的软件开发是屠龙宝刀,不围绕需求的软件开发是盲目的。是不聚焦的,是没有方向的。文档是软件必不可少的组成部分,不能少,但是也不能重复,必需的要有。此阶段要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等,软件设计一般分为总体设计和详细设计,好的软件设计将会为软件程序编写打下良好的基础。

  • 软件测试:1、单元测试阶段:单元测试是以最小单位的测试、也是最初期的测试阶段、一般是以一个函数方法窗口、一个功能模块、都可以看做是一个单元,主要依据的是详细设计文档。主要以白盒为主,一般有开发人员完成。 2、集成测试阶段: 集成测试又称组装测试,在单元测试的基础上把软件逐渐组装起来一起继续测试的过程。逐渐组装的过程中会出现很多临时版本(迭代测试)。集成测试主要以黑盒为主(当然接口测试也在这阶段进行)。 3、系统测试阶段:整个功能全部完成后对集成了硬件和软件的完整系统进行模拟真实的环境模拟、测试重点主要在于1)整个系统能否正常运行2)真个系统的兼容性测试。4、验收测试阶段:由用户参与完成的过程。(1)alpha阶段:在软件开发过程中由最终用户对软件进行检查。(2)beta阶段:在最终用户的实际环境中由最终用户对软件进行检查。

  • 项目验收:软件验收测试分为三部分:文档代码一致性审核、软件配置审核和可执行程序测试,其顺序可分为:文档审核、源代码审核、配置脚本审核、测试程序、平台API测试、集成测试、验收测试等。

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

一个人编写代码,总是有种灯下黑的现象。可能你自己犯的很微小的错误,你花了大把大把的时间,还是搞不出来。而另一个人只需要看一下就能指出,这提高了复审效率。可以不断从别人那里学习,提高自己的水平。这次结对编程,我从其他小组成员那里学到了很多,比如良好的代码风格,清晰的编码思路,以及熟练的调试技巧等。

四.总结这门课程的实践总结和给你带来的提升

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

    两千行左右
    
  • 你在软件工程实践的各次作业分别花了多少时间?(做一个列表)

    任务 花费时间(h)
    1.软件工程准备 5
    2.软件工程个人项目 8
    3.作业互评与改进 2
    4.软件工程结对项目及项目互评 4
    5.软件研发团队组建 2
    6.团队项目选题 4
    7.团队项目原型设计与开发 15
    8.基于原型的团队项目需求调研与分析 14
    9.团队项目需求改进与系统设计 9
    10.团队项目系统设计改进与详细设计 10
    11.团队项目设计完善&编码 24
    12.软件测试与Alpha冲刺 17
    13.Beta冲刺与团队项目验收 5
    14.团队项目评审&课堂学习总结 5
  • 哪一次作业让你印象最深刻?为什么?

    应该是软件测试阶段,从漏洞百出到最终成品展现,经历了很长一段时间,期间甚至有推翻重做的想法,但是一步步坚持了下来,直到所有验收过程都通过,激动的心情真的无法比喻。
    
  • 累计花了多少个小时在软件工程实践上?平均每周花多少个小时?

    共134小时,平均每周8小时
    
  • 你学习和掌握的新语言、新平台;

    Java语言,jsp。
    平台如班级博客园、GitHub、typora、leangoo等
    
  • 填写下表,总结一学期的学习中,你学习或使用的软件工程开发工具、开发方法和建模方法;

软件开发工具 项目管理工具 软件开发方法 软件建模方法
Eclipse、MySQL GitHub、leangoo 面向对象、原型设计、结构化设计 面向对象
  • 其他方面的收获或提升。

    在我看来,软件工程与其说是一门课程,不如说是一门思想。是一个如何去分析和处理问题的过程,应该说其范畴已经远远不止局限于该门课程,成为了一个综合的一个能够解决问题的思想集合。       这门课程教给了我们在完成一个实际项目时的一般程序及过程,我认为这是一份非常具有实际意义的教学内容。当我们在毕业之后,这是我们实际要运用的一项非常有用的技能,而且不仅仅局限于软件工程的范畴,我们即使是从事与其它行业,不也是要从需求获取开始,一直有条有理地到最后成品的出炉吗,应该说这就是这门课的价值所在。
    

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

老师在面对不同的班应该适当的改变一下教学方式,可能会有更好的教学效果。当然本学期的课程学习也非常愉快,很感谢代老师的培养。

posted @ 2019-06-30 14:34  丁家辉-西北师范大学  阅读(212)  评论(0编辑  收藏  举报