2020软件工程作业00

2020软件工程作业00-问题清单

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10618
这个作业的目标 列出本课程学习过程中问题
作业正文 见下文
参考文献 百度 知乎 简书等

第一次问题

1:软件开发的过程中在运行阶段出现了bug那么修改bug要把开发的代码从头到尾进行修改么?

不需要从头到尾把代码全部修改,只要找到出现bug处的那部分代码进行修改即可

2:软件开发的基本策略中的分而治之还是有些不清楚?

分而治之是指把大而复杂的问题分解成若干个简单的小问题,然后逐个解决。这种朴素的思想来源于人们生活与工作的经验,也完全适合于技术领域。诸如软件的体系结构设计、模块化设计都是分而治之的具体表现。
3.开发更好的软件是为了更多的利益吗?

答:不是,是为了恰好让广大用户满意,并且是高质量的软件产品。

第二次问题

1.JAVA和Python有什么相同和区别?

答:python虚拟机没有java强,java虚拟机是java的核心,python的核心是可以很方便地使用c语言函数或c++库。
python是全动态性的,可以在运行时自己修改自己的代码,java只能通过变通方法实现。python的变量是动态的,而java的变量是静态的,需要事先声明,所以java ide的代码提示功能优于python ide。
python的产生几十年了,几十年前面向过程是主流,所以用python有好多程序用的是面向过程设计方法,很多概念从c语言过来的,class在python中是后加入的,而java是为了实现没有指针的c++(当年com组件用的引用记数,java用的虚拟机),主要采用面向对象的设计方法,很多概念是oop的概念。面向过程,相对简洁直观,但容易设计出面条程序,面向对象,相对抽象优雅,但容易过度抽象。
在实际使用的python入门简单,但要学会用python干活,需要再学习python各种库,pyhton的强大在于库,为什么python的库强大,原因是python的库可以用python,c语言,c++等设计,再提供给python使用,所以无论gpu运行,神经网络,智能算法,数据分析,图像处理,科学计算,各式各样的库在等着你用。而java没有python那么多的开源库,很多库是商业公司内部使用,或发布出来只是一个jar包,看不到原始代码。python虚拟机因为编译性没有java的支持的好(或者说故意这么设计的),一般直接使用源码(linux),或源码简单打个包(如pyexe)。
python有很多虚拟机实现,如cython,Pyston,pypy,jython, IronPython等等,适合用于业务语言,或插件语言,或面向领域语言,而java因为虚拟机巨大,很少用于插件语言,发布也不方便。
java主要用于商业逻辑强的领域,如商城系统,erp,oa,金融,保险等传统数据库事务领域,通过类似ssh框架事务代码,对商业数据库,如oralce,db2,sql server等支持较好,软件工程理念较强,适合软件工程式的多人开发模式。python主要用于web数据分析,科学计算,金融分析,信号分析,图像算法,数学计算,统计分析,算法建模,服务器运维,自动化操作,快速开发理念强,适合快速开发团队或个人敏捷模式。
java的商业化公司支持多,如sap,oracle,ibm等,有商业化的容器,中间件,企业框架ejb。python的开源组织支持多,如qt,linux,google,很多开源程序都支持python, 如pyqt,redis,spark等。
python用途最多的是脚本,java用途最多的是web,pyhotn是胶水,可以把各类不相关的东西粘在一起用,java是基佬,可以通过软件工程组成几百个人的团队和你pk,商业化气息重。不过我认为还是python强大,因为可以方便调用c或c++的库,但软件工程和商业化运作没有java好,适合快捷开发。
2:模块化程序设计的分解划分有那几类?

四类,基于水平划分,基于垂直划分,基于单一职责划分,基于易变与稳定划分
3.编程一定要写注释吗?

必须注释。

第三次问题

1.如何有效地提高代码的执行效率?

答:尽量使用局部变量,少定义静态变量或方法,尽量重用变量,减少线程,减少循环嵌套,减少循环层数,减少函数调用,及时释放内存
2.什么是代码的健壮性?

答:健壮性是指软件对于规范要求以外的输入情况的处理能力。健壮性是指程序可以适应正常和非正常的运行环境,都可以正确地运行;随着业务量的增加,不会出现阻塞和不可用的情况(官方概念)
3:在性能测试工具profile中,我们对于它的测试结果该如何去进行优化?

进行比较,查看测试每一个结果的数值比例,一般从占用时间最长的那一部分以及调用函数次数最多的那些函数进行优化。

第四次问题

1:黑盒测试和白盒测试之间的主要区别?

黑盒白盒测试区别如下:
黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。
软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。
2.对提高代码性能的能力如何提高?

答:一是养成好的编程习惯,二是针对自已的工作提高自已的知识含量。
3.软件工程黑盒白盒测试以什么为依据?

黑盒只针对输入和输出的关系对被测试程序的功能及外部进行测试,看其是否满足需求分析中的功能说明,而不考虑其内部逻辑和内部特性。
白盒测试是对系统内部过程性细节做细致的检查,把被测试的程序看成透明的盒字。

第五次问题

1:软件的过程方法有哪些?

过程方法是系统地识别和管理组织内所使用过程,它包括管理过程,实现过程,支持过程。
2.软件开发活动由几个过程构成?

1问题定义,2可行性研究,3需求分析,4总体设计,5详细设计,6编码和单元测试,7综合测试,8软件维护。
3.软件过程和软件开发有何区别

一、指代不同
1、软件工程:是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。
2、软件开发:是根据用户要求建造出软件系统或者系统中的软件部分的过百程。
二、内容不度同
1、软件工程:涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。
2、软件开发:能熟练掌握常用的计算机软件的使用、维护与技巧;在硬件方面学生应了解计算机硬件的发展,熟练掌握计算机组装的方法,能熟练运知用应用软件检测计算机性能、故障的范围所在,掌握硬件故障的一般处理方法。
三、特点不同
1、软件工程:在给定成本、进度的前提下,开发出具有适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可追踪性、可互操作性和满道足用户需求的软件产品。追求这些目标有助于提高软件产品的质量和开发效率,减少维护的困难。
2、软件开发:适合于熟练地按照工程化的思路进行软件编制、软件测试的工作岗位,版能担任各种企事业单位和各级工程建设部门、管理部门的计算机软件和硬件维护、网络的组建、维权护等工作,也可从事计算机研究与应用、软件开发等方面的工作。

第六次问题

1:敏捷开发与迭代模型之间的有什么区别和相似?

一、定义:
1.迭代开发:在迭代开发中,整个开发工作被组织为一系列的短小的、固定长度(如3周)的小项目,被称为一系列的迭代,这叫迭代开发。每一次迭代都包括了定义、需求分析、设计、实现与测试。
2.敏捷开发:敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。
二、区别:
1.性质不同:迭代开发是软件开发的生命周期模型,是一种开发过程;敏捷开发是多种软件开发项目管理方法的集合,是一种开发方法。这是两者最根本的区别。
2.开发方法模型不同:迭代开发对应的是瀑布模型,螺旋模型等;敏捷开发对应的是Scrum,XP(极限编程),Crystal(水晶编程)等开发方法。
3.对需求要求不同:迭代式开发适合那些需求信息不明确的项目;而敏捷开发是紧紧围绕用户需求,以用户为导向,以快速开发,快速验证,快速修正的迭代式开发打造大量精品。

2.scrum的架构分别是那几个部分构成?

SCRUM框架包括3个角色、3个工件、5个活动、5个价值
3个角色
产品负责人(Product Owner)
Scrum Master
Scrum团队
3个工件
产品Backlog(Product Backlog)
SprintBacklog
燃尽图(Burn-down Chart)
5个活动
Sprint计划会议(Sprint Planning Meeting)
每日站会(Daily Scrum Meeting)
Sprint评审会议(Sprint Review Meeting)
Sprint回顾会议(Sprint Retrospective Meeting)
产品Backlog梳理会议( Product Backlog Refinement
3.迭代式开发是否是软件开发主流?

答:不是

第七次问题

1.软件项目开发车成本有哪些基本估算方法?

自顶向下的估算方法
自底向上的估计法
差别估计法
2.团队开发不可避免的弊端?

答:一个软件项目从开始到结束,由于资源、人员、管理、方法学等等各方面的因素,往往不可避免的会存在一些问题,如需求不明确、项目管理失败、沟通问题等等。
不能很好的理解用户的需求,缺少与用户之间的沟通。
错误的预估项目的大小和难易度。
没有计划就匆匆开始编码。
没有在项目初期就开始做测试,一直拖到项目后期才做,或者根本不做什么测试。
选择时下最cool的技术还是已经被团队使用比较成熟的技术,往往不能做出很正确的选择。
不采用任何软件过程或者方法学。
没有一个真正的项目经理,让开发人员无计划的主导项目。
拖延计划,把进度压力留在后期。
不做版本控制,混乱的代码库和开发环境。
在项目过程中随意的更换开发工具和环境。
客户的任何需求都答应下来,需求会永无止境,记得学会说“不”。
只有一个大的计划,没有把计划分割成一个个更小的任务,要知道,大的计划如果不分割成任务很难落实和具体实施。
对开发团队的管理不足,项目内部沟通不畅,每个成员只是埋头做自己的事情等。
在项目后期增加人员来加快开发速度,很多时候往往适得其反。
开发人员不做单元测试。
一旦项目中遇到问题,就把压力抛给开发人员。遇到问题的时候往往不请教别人,而是一个人闷头搞,到最后还是不得以还是通过别人来解决。
  不关注软件实际的运营环境和硬件条件。
3.关于项目的沟通,沟通一定是为了达到目的吗?

答:不一定

posted @ 2020-04-11 18:57  南城大侠  阅读(199)  评论(0编辑  收藏  举报