软件工程学习通课后讨论
第一章
1.软件生命期中各阶段的输入(从哪获得?)与输出(送去哪儿?)分别是什么?
三个时期八个阶段 软件定义、软件开发、运行维护
时期 | 输入 | 输出 |
---|---|---|
问题定义 | 对客户的访问调查 | 关于问题性质、工程目标的调查报告 |
可行性研究 | 上一阶段的调查报告 | 工程是否继续进行 |
需求分析 | 用户确认的系统逻辑模型 | 规格说明书 |
总体设计 | 软件工程师设计的方案 | 解决问题的策略及目标系统中应包含的程序 |
详细设计 | 总体设计的结果 | 详细的算法和数据结构 |
编码和单元测试 | 目标系统的性质和实际环境 | 用选定语言书写的程序 |
综合测试 | 用户参与测试的结果 | 测试结果文档 |
软件维护 | 软件出现的问题 | 每项维护活动的文档资料 |
2.为什么要对软件划分生命周期?请联系个人经验和实际,列举1-2个实例。
同任何事物一样,一个软件产品或软件系统也要经历孕育、诞生、成长、成熟、衰亡等阶段,一般称为软件生存周期(软件生命周期)。把整个软件生存周期划分为若干阶段,使得每个阶段有明确的任务,使规模大,结构复杂和管理复杂的软件开发变的容易控制和管理。
就像我们上学,会经历从幼儿园到小学到初中到高中到大学,也是有阶段的,每个阶段都有每个阶段的学习任务。
3.常用的软件工程方法学有哪些?各自特点、区别及应用?
方法学 | 特征 | 优点 | 缺点 | 应用 |
---|---|---|---|---|
传统方法学 | 强调自顶向下 | 每个阶段的任务相对独立,而且比较简单,降低了整个软件开发工程的困难程度; 保证质量,提高可维护性; |
当软件规模庞大,或者对软件的需求是模糊的或会随时间变化而变化的时候,使用传统方法学开发软件往往不成功 使用传统方法学开发出的软件,维护起来仍然很困难。 数据与操作相分离 |
小型软件 |
面向对象方法学 | 面向对象方法=对象+类+继承+用消息通信 | 面向对象方法学的尽量模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程。 面向对象方法学开发软件的过程,是一个主动地多次反复迭代的演化过程,保证了在各项开发活动之间的平滑过渡。 促进了软件重用。最终的软件产品由许多较小的、基本上独立的对象组成,每个对象相当于一个微型程序,而且大多数对象都与现实世界中的实体相对应,降低了复杂性,提高了可理解性,简化了开发和维护工作。 |
… | 大型智能软件 |
区别:传统方法和面向对象是软件工程的程序设计方法中最本质的思想方法。传统方法编程的基本思想就是把大的程序划分为若干个相对独立、功能简单的程序模块,它以过程为中心, 强调的是过程, 强调功能和模块化, 通过一系列过程的调用和处理完成相应的任务。 面向对象编程以对象为中心, 是对一系列相关对象的操纵, 发送消息给对象, 由对象执行相应的操作并返回结果, 强调的是对象。 理论上, 面向对象的程序设计方法将产生更好的模块内聚和耦合特性, 使得软件更易于重用与维护。在执行效率上来说,传统方法比面向对象方法产生的代码更直接,更高效。从应用的范围看,传统方法适用于数据少而操作多的问题。时间证明对于像操作系统这样的以功能为主的系统,传统方法比较适应它。面向对象方法正好相反,对于数据库,信息管理等以数据为主的而操作较少的系统,用面向对象方法描述要好于传统方法。 在实践中程序设计方法关注软件生命周期的各个环节, 从需求分析、总体设计到编码、测试和维护,同时设计方法在各个阶段需要工具和环境的支撑, 因此在选择程序设计方法时, 需要综合考虑这些因素
4.增量模型中:模块、构件的概念与关系。
增量模型(渐增模型)
模块:源码级的。指的实现某个功能的源码。想使用某个模块,就需要有它的源码。
模块的划分是其中一个核心内容,模块还可以是指功能方面的划分。
构建:构件应用层的,可以完成某个特定的功能, 可能是多个组件的组合。
每个构建由许多相互作用的模块构成,并可以完成特定的功能。
5.软件过程模型有哪些?各自特点及应用场景?
模型 | 优点 | 缺点 | 应用场景 |
---|---|---|---|
瀑布模型 | 1.质量保证 | 1.开始需要把需求做到最全 2.惧怕用户测试中的反馈,惧怕需求变更 |
适合于结构化方法,也就是面向过程的软件开发方法(变化小,稳定,低风险,需熟悉)。 |
快速原型模型 | 1.克服瀑布模型的缺点 2.减少由于软件需求不明确带来的开发风险。 |
1.所选用的开发技术和工具不一定符合主流的发展; 2.快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。 |
开发时间紧,用户需求不确定。 |
增量模型 | 1.短时间内向用户提供可完成部分工作的产品 2.逐步增加产品功能可以使用户有时间了解和适应新产品 3.开放结构的软件拥有的维护性明显好于封闭结构的软件 |
1.容易退化为边做边改模型,从而使软件过程的控制失去整体性 2.如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析 |
对于已有的软件进行二次开发 |
螺旋模型 | 1.设计上的灵活性,可以在项目的各个阶段进行变更. 2.以小的分段来构建大型系统,使成本计算变得简单容易 3.客户始终参为保证了项目不偏离正确方向以及项目的可控性 4.客户始终掌握项目的最新信息,从而他或她能够和管理层有效地交互. 5.客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品. |
1.很难让用户确信这种演化方法的结果是可以控制的. 2.建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求. |
大型项目软件的开发 |
喷泉模型 | 1.可以提高软件项目开发效率 2.节省开发时间 3.适应于面向对象的软件开发过程 |
1.各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理. 2.此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况. |
适用于应用面向对象方法学开发的软件开发 |
6.软件中的错误是何时以及怎样造成的?改正软件错误的代价大吗?
所有的软件都是文档和代码组成的。
软件的错误来自于代码编写的错误和最初文档设计的错误,但大部分来自文档的错误,后期代码编写的错误所占比相对更小。
改正软件错误的代价和发现的时间有关系,越晚发现错误,代价越大。
7.请说说您在软件工程导论课程第1章概述中所学到的内容及想法。
第一章概述中学到了软件危机的相关知识,软件工程学的方法学分面向对象和面向过程。明白了一个软件的诞生是要经过3个时期,每个时期都分不同的阶段。针对不同的要求,可以利用不同的模型进行生产软件。
第二章
1.系统流程图与数据流图分别是什么及其区别?
系统流程图:描绘物理系统的工具,用图形符号以黑盒子的形式描绘组成系统的各个部件。表达数据在系统各部件之间的流动的情况,而不是对数据加工处理的过程,他是物理数据流图而不是程序流程图。

数据流程图:数据流图DFD是描述系统中数据流程的一种图形工具,它标志了一个系统的逻辑输入和逻辑输出,以及把逻辑输入转换逻辑输出所需的加工处理。

区别:
同:两者都是描述数据的流动情况。
异:系统流程图允许硬件,文档,甚至人工的介入,有物理设备等。数据流图无硬件设备,系统物理部件等,只是描述数据在系统中加工变换的情况。
2.可行性研究的任务是什么?
系统分析员需要进行一次大大压缩和简化了的系统分析和设计过程(较抽象的高层次上)。
研究问题的范围;探索这个问题是的实现价值;找出可行的解决方案。
3.第二章可行性研究的学习目标?
1.首先进一步分析和澄清问题定义,导出系统的逻辑模型;
2.然后从系统逻辑模型出发,探索若干种可供选择的主要解法(即系统实现方案);
3.对每种解法都研究它的可行性,至少应该从三方面研究每种解法的可行性 。
4.在软件项目开发前,为何要做可行性研究?
可行性研究的目的:用最小的代价在尽可能短的时间内确定问题是否能够解决。它压缩简化了系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行系统分析的过程。如果在项目开始进行前,没有进行可行性研究,当开发时遇到问题且该问题根本得不到解决,那么之前在这项工程上所有的花费都只能是浪费。
5.可行性研究的内容是什么?
一、技术方面。
对要开发项目的功能性能和限制条件进行分析,即在现有的资源条件下(包括开发人员水平、硬件、软件设备),是否能够按时按量完成该项目的所有功能,开发的风险有多大。
二、经济方面
对开发成本的估算,分析开发软件需要的资金是否值得投入,当时对类产品的市场需求如何,市场前景如何,公司的运营方式是否适合软件的推广。
三、操作方面
系统的操作方式是否使用于该产品的用户,界面是否简洁友好,操作方便,用户不需要掌握一些后台的相关知识。
可行性研究最根本的任务是对以后的行动方针提出建议,如果问题没有可行的解,分析员应该建议停止这项开发工程,避免时间资源人力金钱的浪费,如果问题值得去解决,那么应该推荐一个较好的解决方案,并且为工程制定一个初步的计划。
6.成本效益分析的目的是什么?
1.从经济角度分析开发一个特定的新系统是否划算,从而帮助客户组织的负责人正确地作出是否投资于这项开发工程的决定。
2.减小运行费用+增加收入
7.数据字典是什么及其作用?
定义:数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明,使用数据字典为简单的建模项目。简而言之,数据字典是描述数据的信息集合,是对系统中使用的所有数据元素的定义的集合。
作用:数据字典最重要的作用是作为分析阶段的工具。任何字典最重要的用途都是供人查询对不了解的条目的解释,在结构化分析中,数据字典的作用是给数据流图上每个成分加以定义和说明。换句话说,数据流图上所有的成分的定义和解释的文字集合就是数据字典,而且在数据字典中建立的一组严密一致的定义,很有助于改进分析员和用户的通信。