软件工程 | https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1 |
---|---|
作业要求 | https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10618 |
作业目标 | 提交问题清单,以方便同学之间相互查看 |
作业正文 | 如下 |
参考文献 | 百度 |
第1次课
-
Q:软件的生命周期可以分为哪些阶段?
A:三个阶段:软件定义、软件开发、运行维护。
其主要活动阶段包括:可行性分析与计划制定、需求分析、软件设计(概要设计和详细设计)、软件实现(编码)、测试、维护等活动,其中软件开发阶段包括软件设计、实现与测试。 -
Q:软件工程面临哪些问题或挑战?
A:多样性的挑战:必须开发出新技术,制作可靠的软件,从而足以灵活应对这种多样性。
交付上的挑战:在不损及系统质量的前提下,缩短大型、复杂系统的移交时间。
信任的挑战:研究能说明软件可信的技术。 -
Q:一个高质量的软件具备哪些特点?
A:用户体验好、了解用户需求、UI设计美观。
第2次课
-
Q:我们要学习Python吗?
A:没有硬性要求,可以自学。 -
Q:在学习Python的过程中可以提高哪方面的能力?
A:学习在于培养自己勤思考、善于思考的能力。能力包括的方面有很多,有逻辑能力、思维能力、判断能力、动手操作能力等。 -
Q:代码运行出现异常但能运行是否有必要修改代码?
A:有能力还是需要进行优化。
第3次课
-
Q:代码静态检查分为哪些步骤?
A:可以分为动态检查和静态检查。
动态检查:程序运行时检查,侧重于内存和资源使用情况检查;
静态检查:指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。 -
Q:代码静态检查能够检查出哪些问题?
A:变量未初始化、空指针引用、数据类型不匹配、返回局部变量、数组越界、内存泄漏等等。 -
Q:有动态检查吗?和静态检查的区别是什么?
A:有,区别:静态检查:bug在程序运行前发现,所有变量的类型在编译时均已知,因此编译器可以在编译时检查类型。
动态检查:bug在程序运行中发现,变量的类型在代码编写中不一定可知,如动态语言Python。
第4次课
-
Q:为什么不要追求代码100%覆盖率?
A:测试覆盖率是对测试完全程度的一种评价。但是达到百分之百只是一个理想情况,即使达到百分之百,也很难说明测试是完全彻底的。测试覆盖率只能代表测试过哪些代码,并不能代表测试的好坏。测试覆盖率过低说明测试做得不够,反过来并不成立。我们不能盲目地追求高的覆盖率,要结合整体要求和测试成本来决定。 -
Q:一个测试用例包括了哪些内容?
A:项目名称,软件版本,测试环境,设计人,最新更新日期,序号,模块,子模块,用例分类,用例标题,前提条件,操作步骤(输入值),期望结果,实际结果,备注,更新日期,用例级别,评审人。
第5次课
-
Q:软件过程中哪个步骤最重要,需要投入更多的精力?
A:每个环节都重要,花费精力和费用最多的一个阶段是维护阶段。 -
Q:哪种软件过程模型最好?
A:各有优劣,4种模型优点如下:
瀑布模型:为项目提供了按阶段划分的检查点;当前一阶段完成后,只需要去关注后续阶段;可在迭代模型中应用瀑布模型。
原型化模型:克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险。
迭代式开发:1)降低了在一个增量上的开支风险。如果开发人员自重复某个迭代,那么损失只是这一个开发有误的迭代的花费。
2)降低了产品无法按照既定进度进入市场的风险。通过在开发早期就百确定风险,可以尽早来解决而不至于在开发后期匆匆忙忙。
3)加快了整个开发工作的进度。因为开发人员清楚问题的焦度点所在,他们的工作会更有效率。
4)由于用户的需求并不能在一开始就作出问完全的界定,它们通常是在后续阶段中不断细化的。因此,迭代过程这种模式使适应需求的变化会更容易些。
可转换模型:1)设计上的灵活性,可以在项目的各个阶段进行变更。
2)降低了产品无法按照既定进度进入市场的风险。通过在开发早期就百确定风险,可以尽早来解决而不至于在开发后期匆匆忙忙。
3)加快了整个开发工作的进度。因为开发人员清楚问题的焦度点所在,他们的工作会更有效率。 -
Q:各种软件过程模型适用于什么范围?
A:瀑布模型:1)用户的需求非常清楚全面,且在开发过程中没有或很少变化。
2)开发人员对软件的应用领域很熟悉。
3)用户的使用环境非常稳定。
4)开发工作对用户参与的要求很低。
原型化模型:1)项目需求在项目前不明确(需求获取困难)。
2)对现有产品进行升级或功能完善。
3)开发人员对技术不熟
迭代式开发:1)在项目开发早期需求可能有所变化。
2)分析设计人员对应用领域很熟悉。
3)高风险项目。
4)用户可不同程度地参与整个项目的开发过程。
5)使用面向对象的语言或统一建模语言。
可转换模型:对于新近开发,需求不明确的情况下,适合用螺旋模型进行开发,便于风险控制和需求变更。
第6次课
-
Q:敏捷开发有没有适用范围?
A:有。需应对迅速变化的需求快速开发软件;灵活,在动态的环境中快速交付产品。 -
Q:敏捷开发的优劣?
A:优势:敏捷确实是项目进入实质开发迭代阶段,用户很快可以看到一个基线架构版的产品。敏捷注重市场快速反应能力,也即具体应对能力,客户前期满意度高。
劣势:敏捷注重人员的沟通,忽略文档的重要性,若项目人员流动大太,又给维护带来不少难度,特别项目存在新手比较多时,老员工比较累。需要项目中存在经验较强的人,不然在大项目中容易遇到瓶颈问题。 -
Q:敏捷开发步骤是什么?
A:挑选一位产品负责人→挑选一个团队→挑选Scrum主管→拟定待办事项清单,并确定优先顺序→改进和评估待办事项清单→冲刺规划会→工作透明化→每日立会→冲刺评估或冲刺展示→冲刺回顾→上一个冲刺阶段结束之后,立即开始新的冲刺阶段
第7次课
-
Q:团队在哪些环节中容易闹矛盾?
A:确定方案的时候各自坚持自己的意见会导致沟通方面出现矛盾。 -
Q:在沟通的时候有哪些经常出现的问题?如何解决?
A:团队成员之间各抒己见,提供自己的想法利于软件提升和完善,但是想法太多反而不知如何选择,容易产生争执。沟通中的矛盾是不可避免的,但团队仍需成员大胆提出自己的想法,一切问题以为软件优化的基础解决。
第8次课
- Q:网课中Tower介绍得非常详细,所以在以后的学习过程中要使用Tower软件吗?
A:暂时没有要求。
第9次课
-
Q:除了课中讲到的,需求工程当中还有没有需要执行的活动?
A:有,过程管理活动和项目管理活动。
过程管理活动是跟踪项目开发过程,记录项目开发过程当中所遇到的问题或者教训;
项目管理活动是管理项目开发的一系列问题与进度,管理人员配置,以达到最大效益。 -
Q:客户与开发人员的合作关系建立的前提是什么?
A:明确双方权利和义务。 -
Q:好的需求有什么特征?
A:1.深入理解用户的真正的意图和需要
2.清晰完整的需求表达
3.借助需求分析工具,如UML工具等,使用科学的需求管理方法,完善需求变更控制流程。
第10次课
- Q:用例规约包括哪些内容?
A:每一个用例的用例规约都应该包含以下内容:- 简要说明 (Brief Description)
简要介绍该用例的作用和目的。 - 事件流 (Flow of Event)
包括基本流和备选流,事件流应该表示出所有的场景。 - 用例场景 (Use-Case Scenario)
包括成功场景和失败场景,场景主要是由基本流和备选流组合而成的。 - 特殊需求 (Special Requirement)
描述与该用例相关的非功能性需求(包括性能、可靠性、可用性和可扩展性等)和设计约束(所使用的操作系统、开发工具等)。 - 前置条件 (Pre-Condition)
执行用例之前系统必须所处的状态。 - 后置条件 (Post-Condition)
用例执行完毕后系统可能处于的一组状态。
- 简要说明 (Brief Description)
第11次课
-
Q:面向对象设计的过程分为哪些步骤?
A:- 进行适当的领域分析
- 撰写问题描述,确定系统的开发任务
- 基于问题描述抽取需求
- 开发用户界面原型
- 识别对象类
- 定义每个类的职责
- 确定类之间的交互关系
- 建立系统的设计模型
-
Q:建立类图的步骤?
A:1.研究分析问题领域,确定系统的需求。
2.发现对象与类,明确他们的含义和责任,确定属性和操作。
3.发现类之间的关系。把类之间的关系用关联、泛化、聚合、组合、依赖等关系表达出来。
4.设计类与关系。调整和细化已得到的类和类之间的关系,解决诸如命名冲突、功能重复等问题。
5.绘制类图并编制相应的说明。
第13-14次课
-
Q:如何绘制顺序图?
A:1.在顺序图顶端绘制矩形框,定义参与交互的类实例(对象)名;
2.在每个对象下面绘制竖直虚线,表示该对象的生命线;
3.在对象间添加箭头表示各种类型的消息,跟踪对象间的控制流;
4.生命线加竖直矩形定义对象激活期,表明对象正在执行某操作;
5.根据需要添加框的组合与关联,表示复杂的控制结构。 -
Q:顺序图与用例有什么关系?
A:(1)- 顺序图表达单个情景实例的行为
- 每个用例对应一个顺序图
- 顺序图表达对象间如何协作完成用例所描述的功能
- 顺序图用于表示为完成用例而在系统边界输入输出的数据以及消息
- 顺序图也用于表示系统内部对象间的消息传递
(2) - 顺序图可帮助分析人员对用例图进行扩展、细化和补遗
- 顺序图可用于开发周期的不同阶段,服务于不同目的,描述不同粒度的行为
- 分析阶段的顺序图不要包含设计对象和关注消息参数
第16-17次课
-
Q:当系统的规模和复杂度不断增大的时候,构造整个系统的关键是什么?
A:随着软件系统的规模和复杂性不断增加,对系统的全局结构设计和规划变得比算法的选择和数据结构的设计明显重要得多。 -
Q:如何增强模块的独立性?
A:增强模块独立性的方法是尽量做到高内聚、低耦合。 -
Q:B/S体系结构有什么不足?
A:(1)缺乏对动态页面的支持能力,数据库处理能力差。
(2)系统扩展能力差,安全性难以控制。
(3)响应速度远低于C/S体系结构。
(4)数据提交一般以页面为单位,数据的动态交互性不强,不利于在线事务处理(OLTP)应用。