2020软件工程作业00——问题清单
本次作业统一标题:2020软件工程作业00——问题清单
Deadline: 2020/04/12 08:00am
格式(必做)
为了方便其他学校的老师或者助教了解课程实况,请大家在作业开头添加格式描述:
这个作业属于哪个课程 | <班级的链接> |
---|---|
这个作业要求在哪里 | <https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10618> |
这个作业的目标 | 每次课的问题并解答 |
作业正文 | https://www.cnblogs.com/HuyuJ/p/12674992.html |
其他参考文献 | ... |
第一次课
1、为什么会出现软件危机?怎样用软件工程消除软件危机?
答:
(1)产生软件危机的原因主要有两个方面:
①、与软件本身的特点有关。
软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件;软件样品即是产品,试制过程也就是生产过程。
软件不会因使用时间过长而“老化”或“用坏”;软件具有可运行的行为特性,在写出程序代码并在计算机上试运行之前,软件开发过程的进展情况较难衡量,软件质量也较难评价,因此管理和控制软件开发过程十分困难。
②、来自于软件开发人员的弱点。
其一,软件产品是人的思维结果,因此软件生产水平最终在相当程度上取决于软件人员的教育、训练和经验的积累。
其二,对于大型软件往往需要许多人合作开发,甚至要求软件开发人员深入应用领域的问题研究,这样就需要在用户与软件人员之间以及软件开发人员之间相互通讯,在此过程中难免发生理解的差异,从而导致后续错误的设计或实现。
(2)软件工程是知道计算机软件开发和维护的一门工程学科。采用工程的概念、理论、技术和方法来开发与维护软件,吧进过时间考验而证明正确的管理技术和当前能够得到最好的技术方法结合起来,以紧急地开发出高质量的软件并有效的维护它。
2、软件结构和软件工程,二者之间关系?
答:总的来说软件工程包括管理和架构。软件工程是采用工程的概念,原理,技术和方度法莱卡法和维护软件,以工程的原理和方法来解决软件问题。
软件架构笼统的说就是设计出程序的“蓝图”,也就是好似盖房子的骨架。是在软件的详细设计阶专段的工作。
软件管理则是从项目启动就开始知道软件退役后才终止的一组跟踪和控制属活动(因为客户的需求在不断变化,为了控制和管理变化)。
3、软件开发与写程序有什么不同?
答:编写程序属于软件开发。编写程序只是程序代码的编写,而软件开发既包括编写程序(即程序代码的编写)也包括软件的需求分析、概要设计、软件的测试等等
第二次课
1、代码规范除了网课上讲得那几种,平常还要怎么养成良好的编程习惯和编程风格
答:1、成对编程
2、大括号对齐
3、程序块之间加空格
4、并排语句之间加空格
5、运算符两侧加空格 (特殊条件除外)
6、“{”前面有空格。
7、遇到“{”缩进。Tab/Shift+Tab
2、为啥在程序设计中尽可能对程序代码优化是错误的
答:确定程序过程中最花费时间的地方,决定哪些程序需要优化。在进行任何优化之前,必须找到程序的瓶颈所在。按80对20的一般性原则,在程序运行过程中,80%的时间消耗在20%的程序代码中。
更有甚者,比如在很多图像处理中,95%的时间消耗在内层循环中的图像数据运算;而在另一些程序中,95%的时间消耗在读写数据文件上,而在数据的处理时间却少于5%。
所以,在优化过程中,首先照顾那些最常用且最消耗时间的程序,才能起到显而易见的效果。优化不常用的代码不但浪费时间,而且使得代码不清晰,难于调试。
第三次课
第四次课
1、软件工程黑盒白盒测试以什么为依据
答:黑盒只针对输入和输出的关系对被测试程序的功能及外部进行测试,看其是否满足需求分析中的功能说明,而不考虑其内部逻辑和内部特性。
白盒测试是对系统内部过程性细节做细致的检查,把被测试的程序看成透明的盒子。
2、软件测试和软件开发的关系
答:软件开发是生产制造软件;软件测试是验证开发出来软件的百质量。类比传统加工制造企业,软件开发人员就是生产度加工的工人,软件测试人员就是质检人员。
关系应该是:
没有软件开发就没有测试,软件开发提供软件测试的对答象。
软件内开发和软件测试都是软件生命周期中的重要组成部分
软件开发和软件测试都是软件过程中的重要活动。
软件测试是保证软容件开发产物质量的重要手段。
3、黑盒测试和白盒测试二者有和优缺点
答:白盒测试的优点有: 1)帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐藏的问题。
白盒测试的缺点有: 2)程序运行会有很多不同的路径,不可能测试所有的运行路径;测试基于代码,只能测试开发人 员做的对不对,而不能知道设计的正确与否,可能会漏掉一些功能需求;系统庞大时,测试开销 会非常大。
黑盒测试的优点有: 1)比较简单,不需要了解程序内部的代码及实现; 2)与软件的内部实现无关; 3)从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题; 4)基于软件开发文档,所以也能知道软件实现了文档中的哪些功能; 5)在做软件自动化测试时较为方便。
黑盒测试的缺点有: 1)不可能覆盖所有的代码,覆盖率较低,大概只能达到总代码量的 30%; 2)自动化测试的复用性较低。
第五次课
1、软件过程与软件工程方法有何关系
答:软件过程是软件工程方法学的一个要素,软件过程是软件工程方法学的3个重要组成部分之一。
2、软件过程和软件开发有何区别
答:
一、指代不同
1、软件工程:是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。
2、软件开发:是根据用户要求建造出软件系统或者系统中的软件部分的过百程。
二、内容不度同
1、软件工程:涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。
2、软件开发:能熟练掌握常用的计算机软件的使用、维护与技巧;在硬件方面学生应了解计算机硬件的发展,熟练掌握计算机组装的方法,能熟练运知用应用软件检测计算机性能、故障的范围所在,掌握硬件故障的一般处理方法。
三、特点不同
1、软件工程:在给定成本、进度的前提下,开发出具有适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可追踪性、可互操作性和满道足用户需求的软件产品。追求这些目标有助于提高软件产品的质 量和开发效率,减少维护的困难。
2、软件开发:适合于熟练地按照工程化的思路进行软件编制、软件测试的工作岗位,版能担任各种企事业单位和各级工程建设部门、管理部门的计算机软件和硬件维护、网络的组建、维权护等工作,也可从事计算机研究与应用、软件 开发等方面的工作。
3、增量模型适合实时控制系统吗
第六次课
1、如何实现敏捷开发过程
答:
一. 前期准备阶段
二. 方案评审
三. 项目启动会议
四. 迭代开发
五. 集成测试
六. 最后就是发版了
2、敏捷开发的优缺点
答:①.个体和交互胜过过程和工具
②.可以工作的软件胜过面面俱到的文档
③.客户合作胜过合同谈判
④.响应变化胜过遵循计划
3、微软公司的软件开发模式
答:该战略可分为五个原则:
一、 将大项目分成若干里程碑式的重要阶段,各阶段之间有缓冲时间,但不进行单独的产品维护。
二、运用想象描述和对特性的概要说明指导项目。
三、根据用户行为和有关用户的资料确定产品特性及其优先顺序。
四、建立模块化的和水平式的设计结构,并使项目结构反蚋产品结构的特点。
五、靠个人负责和固定项目资源实施控制。
第七次课
1、团队开发不可避免的弊端
答:一个软件项目从开始到结束,由于资源、人员、管理、方法学等等各方面的因素,往往不可避免的会存在一些问题,如需求不明确、项目管理失败、沟通问题等等。
①不能很好的理解用户的需求,缺少与用户之间的沟通。
②错误的预估项目的大小和难易度。
③没有计划就匆匆开始编码。
④没有在项目初期就开始做测试,一直拖到项目后期才做,或者根本不做什么测试。
⑤选择时下最cool的技术还是已经被团队使用比较成熟的技术,往往不能做出很正确的选择。
⑥不采用任何软件过程或者方法学。
⑦没有一个真正的项目经理,让开发人员无计划的主导项目。
⑧拖延计划,把进度压力留在后期。
⑨不做版本控制,混乱的代码库和开发环境。
⑩在项目过程中随意的更换开发工具和环境。
⑪客户的任何需求都答应下来,需求会永无止境,记得学会说“不”。
⑫只有一个大的计划,没有把计划分割成一个个更小的任务,要知道,大的计划如果不分割成任务很难落实和具体实施。
⑬对开发团队的管理不足,项目内部沟通不畅,每个成员只是埋头做自己的事情。
⑭在项目后期增加人员来加快开发速度,很多时候往往适得其反。
⑮开发人员不做单元测试。
⑯一旦项目中遇到问题,就把压力抛给开发人员。遇到问题的时候往往不请教别人,而是一个人闷头搞,到最后还是不得以还是通过别人来解决。
⑰不关注软件实际的运营环境和硬件条件。
⑱没有命名规范和代码规范。对输入输出的数据不做验证。没有写代码注释的习惯。到处都用全局变量。
⑲不做压力测试,到实际环境中往往就会出现更多的跟环境和性能相关的问题。
⑳没有很好的bug管理规范和系统,往往用word、email、excel等文本方式来跟踪bug,将会导致整个项目的bug管理陷入混沌。
2、如何对团队开发的人员进行绩效管理
答:①、制定整体策略
②、目标和OKR
③、绩效考核
第八次课
1、燃尽图适用于每一个软件开发吗
答:是的。燃尽图是在项目完成之前,对需要完成的工作的一种可视化表示。燃尽图有一个Y轴(工作)和X轴(时间)。理想情况下,该图表是一个向下的曲线,随着 剩余工作的完成,“烧尽”至零。
2、只有一个产品负责人,如果团队内有几个帮派怎么办
答:从根源入手:一、因为公司领导和分工形成的帮派。二、因为公司的奖罚和激励体制不合理形成的帮派。
第九次课
1、如何协调需求的可实现和不可实现
答:与产品经理更多更好的沟通。尽量实现可实现的部分;也要向对方仔细说明不可实现的部分,其不可实现的细节和根本原因。
第十次课
1、建模作用
答:首先,用例模型是一种标准的语言,很容易成为开发人员之间交流和沟通的媒介,用例模型可以精确地定义软件需求,出现歧义的可能性很小,这可以保证用户和开发人员对需求理解的一致性
其次,用例模型可以成为我们评估压法工作量的一个标准,特别是对于迭代式开发言。迭代式开发模型里,通常依据用例模型来划分软件的开发周期:优先级别高的用例会在早期的迭代周期中实现,而优先 级别低的用例则被安排在后续的迭代周期中完成。可以通过限制每个迭代周期中的用例个数来保证迭代周期长度的合理性
再次,用例模型在整个开发过程中都扮演着非常重要的角色,它可以驱动软件的分析和设计逐步细化
最后,测试过程中使用的测试用例-----特别是那些关注软件功能的测试用例---往往也是根据用例模型来确定的
2、建模过程
答:
- 确定系统边界
- 确定参与者
- 找出所有的用例
- 确定每个用例的级别
- 撰写用例的文字描述
- 画出以整个系统为对象的顺序图
3、用例图和活动图有什么关联
答:
用例图
1, 概念:用例是系统的一个功能单元 ,是对用户需求的描述。
2,组成:参与者,用例及其之间的关系(包括关联关系,泛化关系,包含关系,扩展关系):
3,用例建模的步骤:a,确定系统的范围和边界;b,确定系统的用例和参与者;c,描述用例;d,对用例分类,并确定用例之间的关系;e,建立用例图,并定义用例图的层次结构;f,评审用例模型。
活动图:活动图(Activity Diagram)可以实现对系统动态行为的建模,主要是将用例细化,即用例内部的细节可以以活动图的方式描述。活动图描述活动的顺序,主要表活动之间的控制流,是内部处理驱动的流程,在本质上是一种流程图。先看一下基本图标。
第十一次课
1、面向对象的生活例子
答:对于吃饭这件事儿,就可以分为面向过程吃饭和面向对象吃饭。自己亲自下厨就是面向过程,点外卖就是面向对象。
在面向过程的吃饭中,我们想要填饱肚子,需要自己亲自下厨把这顿饭做出来,那么,我们就需要先想好吃什么、然后去买菜、洗菜、洗米、蒸饭、炒菜等等一系列的事情。
pubic void 做饭{制定菜单;买菜;洗菜;洗米;蒸饭;炒菜;}那么,你说和点外卖相比,自己做饭麻烦。
2、为什么用 CRC 卡,而不用文档或者更先进的 UML 工具?
答:①卡片上面的空间很小,这样就可以防止我们给这个类太多的职责。如果一个类的职责太多的话(比如,超
过 4 个) ,尝试以更抽象的方式去考虑一下,将职责划分。
②CRC 卡主要是用在探索或者讨论类的设计的阶段。如果我们觉得这个设计不行的话,我们既不用修改文档,
也不用修改类图,只要把卡片丢了就行了。此外,一旦设计完成,我们就可以把所有的卡丢了。它们不是用
来做文档的。
③如果我们觉得现在的卡片不合适,之前设计的比较好,我们只要简单的把之前的卡片拿出来组合就行了。
CRC 卡主要是用来快速的组织设计。我们不应该花很长的时候在做 CRC 卡上,也不要指望按照 CRC 卡的设计
就一切 OK 了。在编码的时候,肯定还会不断的调整设计。将设计与编码结合起来,我们才能做出好而有效的设
计。
3、类图及类图中的关系
答:1.类图和对象图
类图(Class Diagram)是显示出类、接口以及他们之间的静态结构与关系的图。其中最基本的单元是类或接口。
(1)类名
(2)属性列表
(3)方法列表
2.类图中的关系
(1)Generalization:泛化、一般化
(2)Association:关联关系
(3)Aggregation:聚合关系
(4)Composition:组合关系
(5)Dependency:依赖关系