第1个回答 2009-01-12
软件工程概论
1、软件危机定义:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
2、软件危机的两个主要问题:如何开发软件,以满足对软件日益增长的需求;
如何维护数量不断膨胀的已有软件。
3、软件危机的典型表现:(1) 对软件开发成本和进度的估计常常很不准确。
(2) 用户对“已完成的”软件系统不满意的现象经常发生。
(3) 软件产品的质量往往靠不住。
(4) 软件常常是不可维护的。
(5) 软件通常没有适当的文档资料。
(6) 软件成本在计算机系统总成本中所占的比例逐年上升。
(7) 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
4、根据软件危机的典型表现,分析软件危机案例:
传统工业中知名的生产方式可算是“手工作坊式”生产方式。过去的一段时间里,甚至到现在,中国软件业中还有一部分公司的开发方式与之类似。公正地说,以此方式还是成就了好多成功的应用开发项目,甚至可以说此法支撑起了软件开发的初期事业。但是,在我们的“作坊”里还有太多的项目失败,例如开发周期的不可控制、项目结果为用户所不认可、项目最终的严重亏损,这种失败的惨痛出乎我们的意料,以至于我们无所适从。再加上技术人员、资金严重匮乏的困扰,软件开发管理举步维艰。
你认为“软件就是程序”这一个观点正确吗?如果不正确,请批驳之。
1. 请从以下几个方面结合自己的经验实例加以论述。
软件就是程序的观点是不正确的,因为软件等于程序加文档加数据。
(1) 文档是软件的一个非常重要的组成部分,在软件的开发过程中起着非常重要的作用。
(2) 在软件开发的每一个阶段都应有相应的文档。它是开发人员与用户以及开发人员与项目管理人员之间交流的媒介
(3) 文档是软件在不同阶段的表现形式。
(4) 程序与文档必须一致,文档才有价值。
(5) 文档质量直接决定软件质量的高低。
(6) 文档也是软件测试和维护的依据。在没有文档或文档不全的情况下对大型软件进行测试与维护是不可思议的事情。
(7) 文档是软件可重用的依据。
5、软件工程定义:软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地、高效的开发出高质量的软件并有效地维护它,这就是软件工程。
6、软件工程的基本原理,案例分析(严格管理,阶段评审、审查和brooks原则)某公司开发一个企业信息化项目,随着项目的进展,该项目经理发现项目进度没有按照计划在进展,于是开始计划招聘相关人员,但是由于特殊原因,没有招到理想的人员,没有办法只能降低要求招聘,新员工到来后,项目经理发现项目进展反而更慢,该经理百思不得其解。请用软件工程基本原理分析问题。
软件开发不同于传统的机械制造,人多不见得力量大。如果给落后于计划的项目增加新人,可能会更加延误项目。因为新人会产生很多新的错误,使项目混乱,并且原有的开发人员向新人解释工作和交流思想都要花费时间,使实际的开发时间更少,所以制定恰如其分的项目计划是很重要的。
7、软件工程方法学,三要素:方法、工具和过程
8、软件生命周期(概念、三时期,八阶段)
软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)3个时期组成。
软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。
1问题定义2可行性研究3需求分析4总体设计5详细设计6编码和单元测试7综合测试8软件维护
9、有人说:软件开发时,一个错误发现得越晚,为改正它所付出的代价就越大。对否?请解释你的回答。
对,
10、软件过程,案例分析:中华信息系统开发公司的软件产品以开发实验型的新软件为主。用瀑布模型进行软件开发已经有近十年了,并取得了一些成功。若你作为一名管理员刚加入该公司,你认为快速原型法对公司的软件开发更加优越,请向公司副总裁写一份报告阐明你的理由,切记:副总裁不喜欢报告长度超过300 字。
快速原型:
所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。快速原型模型的第一步是快速建立一个能反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践来了解目标系统的概貌
瀑布模型
特点
阶段的顺序性和依赖性(规范化)
推迟实现的观点(系统化)
质量保证(阶段评审)
存在问题
不适合需求模糊的系统(需求的迷糊性和不确定性)
适用于操作系统、编译系统、数据库管理系统等系统软件的开发
11、试论软件工程化思想在软件开发过程中的重要性。
论述要点:在软件工程思想出现之前,人们通常把软件等同于程序,认为软件开发就是程序设计。致使计算机软件的开发和维护出现一系列的问题,软件开发常常失败,从而导致软件危机的出现。例如:(1)对软件开发成本和进度的估计常常不准确;(2)用户对“已完成”的软件常常不满意;(3)软件产品的质量往往靠不住;(4)软件的可维护性也很差;(5)软件通常没有文档资料;(6)软件成本在计算机系统的总成本中的比例逐年上升。
解决软件危机问题的过程中,便出现了软件工程化思想,人们逐渐地把软件工程化思想应用于软件开发过程中,使得软件开发的成本相对下降,并能得到有效控制,软件的开发进度可以得到预测,所开发的软件的质量稳步提高。人们逐步认识到,软件不仅仅是程序,而是程序、文档和数据的一个集合体,文档在软件开发的过程中起着相当重要的作用。
人们按照软件工程化的思想把软件开发分为不同的阶段,每一个阶段都完成确定的任务,对每个阶段所完成的工作都可以进行评审,使得软件开发的可管理性可大大增强,。
对任何一个产品来说,质量都是第一位的,软件工程化思想的目的就是开发出高质量的软件系统。而事实证明,只有在软件开发过程中运用软件工程化思想才能开发出高质量的软件系统;否则只能导致软件开发的失败。
可行性分析
1、可行性研究的目的:在明确了所要研究问题定义之后,分析员应该在明确目标系统所有限制和约束的前提下,去确定该问题是否值得去解决。
2、可行性研究实质:
技术可行性
经济可行性
社会可行性
4、如何做可行性研究(结合案例分析)
5、系统流程图的定义和作用
可行性研究对现有系统做概括的物理模型描述,如用图形工具表示则更加直观简洁。系统流程图是描绘物理系统的传统工具,它的基本思想是用图形符号以黑盒子形式描绘系统里面的每个部件(程序、文件、数据库、表格、人工过程等)。系统流程图表达的是部件的信息流程,而不是对信息进行加工处理的控制过程。在可行性研究过程中,利用系统流程图来描述所建议系统的物理模型。
6、数据流程图的定义和作用:数据流程图有两个特征:抽象性和概括性。
抽象性指的是数据流程图把具体的组织机构、工作场所、物质流都去掉,只剩下信息和数据存储、流动、使用以及加工情况。
概括性则是指数据流程图把系统对各种业务的处理过程联系起来考虑,形成一个总体
7、数据流程图的组成元素
数据流图可以用来抽象地表示系统或软件。它从信息传递和加工的角度,以图形的方式刻画数据流从输入到输出的移动变换过程,同时可以按自顶向下、逐步分解的方法表示内容不断增加的数据流和功能细节。因此,数据流图既提供了功能建模的机制,也提供了信息流建模的机制,从而可以建立起系统或软件的功能模型。
8、数据流程图的组成:外部实体(外部实体是指系统之外的人或单位,它们和本系统有信息传递关系)数据流,处理、数据存储。
如何绘制数据流程图
(1)识别系统的输入和输出,画出顶层图
(2)画系统内部的数据流、加工与文件,画出一级细化图
(3)加工的进一步分解,画出二级细化图
(4)其它注意事项
8、数据流程图的注意点
1、每个处理都必须有流入的数据流和流出的数据流,如果没有,是错误的。(数据守恒)
2、每个数据存储应该有流入的数据流和流出的数据流,如果缺了一种,是Warning的;缺两种就错了。
3、数据流只能在处理与处理、数据存储或者外部实体之间流动。、数据存储到数据存储、外部实提到外部实体、外部实提到数据存储之间的数据流都是错误的。
4、 一个处理可以细分成多个子处理,分成若干个层次(均匀分解)
5、良好命名
9、数据字典
1. 数据字典是在数据流程图的基础上,对数据流程图中的各个元素进行详细的定义与描述,起到对数据流程图进行补充说明的作用。
2. 数据字典的内容包括:数据项、数据结构、数据流、数据存贮、处理逻辑和外部实体。
10、可行性分析的结果
需求分析
1、为什么要做需求分析
可行性分析研究阶段已经粗略的描述了用户的需求,甚至还提出了一些可行的方案,但是,许多细节被忽略了,在最终目标系统中是不能忽略、遗漏任何一个微小细节的,所以,可行性研究不能代替需求分析。
2、需求分析的任务
需求分析的主要任务不是确定系统如何完成它的具体工作,而是确定系统必须完成哪些工作,在用户的参与下提出目标系统的完整、准确、清晰、具体的实际要求,软件应完成的具体功能和性能,确定软件设计受到的限制及软件同其它系统的接口细节,描述软件用到的数据形式,逐步细化到详细定义,并为软件验收和质量评价提供依据
3、如何做需求分析
(1)确定被开发系统的综合要求:系统分析员与用户共同讨论,澄清模糊要求,删除做不到的要求,改正错误的要求,确定具体的功能要求和性能要求。如:精确度要求,运行要求,软硬件限定条件要求,出错率限定要求,文件使用权限要求与读写保护要求,资源使用要求,运行维护成本消耗要求等;
(2)分析系统信息,抽象出系统的数据要求:通过系统的调查分析,由系统的信息流归纳、汇集,抽象出系统的数据模型(ER图),包括数据的组成元素、数据间的逻辑关系、数据的输入、输出、存储的形式及数据结构关系等;
(3)由描述的系统问题结构导出系统的目标逻辑模型:利用软件需求工具和数据流分析方法导出系统的目标逻辑模型(数据流程图)。如:利用结构化分析工具、数据流程图进行描述和表达;功能模型和行为模型
(4)根据系统实际需求审定和修正软件项目的开发计划:一般可由用户、开发方、专家组成的小组对项目预算、开发成本估计、计划安排、进度安排、人员和资源安排进行审定和修正,看其是否一致,是否符合软件的实际认定范围,确定出切实可行的开发计划;
(5)审定系统需求分析的正确性:利用原型、需求分析验证工具、或人工的方法进行审定;
(6)提交软件需求规格说明书,作为系统的开发和验收的依据。
4、需求分析的难点
(1)问题空间理解
(2)人与人之间的通信
(3)需求的不断变化
5、ER图:可以把实体-联系图简称为ER图,相应地可把用ER图描绘的数据模型称为ER模型。
ER图中包含了实体(即数据对象)、关系和属性等3种基本成分,通常用矩形框代表实体,用连接相关实体的菱形框表示关系,用椭圆形或圆角矩形表示实体(或关系)的属性,并用直线把实体(或关系)与其属性连接起来。
6、状态转换图:指明了作为外部事件结果的系统行为。为此,状态转换图描绘了系统的各种行为模式(称为“状态”)和在不同状态间转换的方式。状态转换图是行为建模的基础。
7、软件需求的验证: 需求分析阶段的工作结果是开发软件系统的重要基础,大量统计数字表明,软件系统中15%的错误起源于错误的需求。为了提高软件质量,确保软件开发成功,降低软件开发成本,一旦对目标系统提出一组要求之后,必须严格验证这些需求的正确性。一般说来,应该从下述4个方面进行验证:
(1) 一致性所有需求必须是一致的,任何一条需求不能和其他需求互相矛盾。
(2) 完整性需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能。
(3) 现实性指定的需求应该是用现有的硬件技术和软件技术基本上可以实现的。对硬件技术的进步可以做些预测,对软件技术的进步则很难做出预测,只能从现有技术水平出发判断需求的现实性。
(4) 有效性必须证明需求是正确有效的,确实能解决用户面对的问题。
8、利用DFD图进行需求分析:
在结构化分析方法中,用以表达系统内数据的运动情况的工具有( A )。
供选择的答案:
A. 数据流图 B. 数据词典 C. 结构化英语 D. 判定表与判定树
在结构化分析方法中用状态―迁移图表达系统或对象的行为。在状态―迁移图中,由一个状态和一个事件所决定的下一状态可能会有( A )个。
供选择的答案:
A. 1 B. 2 C. 多个 D. 不确定
在结构化分析方法中用实体―关系图表达系统中的对象及其关系。在实体―关系图中,表达对象的实例之间的关联有三种类型:一对一联系、( B )联系、多对多联系。
供选择的答案:
A. 多对一 B. 一对多
分析:使用实体―关系图,可以建立系统中各个数据对象及对象之间的关系。对象的实例间的关联称为“基数”,共有3种类型的基数:一对一,一对多,多对多。它反映了现实世界中实体之间的联系,多对一的情况可以归入一对多的关联中去。
在软件需求分析时,首先建立当前系统的物理模型,再根据物理模型建立当前系统的逻辑模型。试问:什么是当前系统?当前系统的物理模型与逻辑模型有什么差别?
所谓当前系统可能是需要改进的某个已在计算机上运行的数据处理系统,也可能是一个人工的数据处理过程。当前系统的物理模型客观地反映当前系统实际的工作情况。但在物理模型中有许多物理的因素,随着分析工作的深入,有些非本质的物理因素就成为不必要的负担,因而需要对物理模型进行分析,区分出本质的和非本质的因素,去掉那些非本质的因素即可获得反映系统本质的逻辑模型。所以当前系统的逻辑模型是从当前系统的物理模型抽象出来的。
需求分析的结果
总体设计
1、总体设计的目的:总体设计的基本目的就是回答“概括地说,系统应该如何实现?”这个问题,因此,总体设计又称为概要设计或初步设计。1、面向结构设计(SD)2、面向对象设计(OOD)
2、总体设计的阶段组成:两个主要阶段(1)系统设计阶段,确定系统的具体实现方案;(2)结构设计阶段,确定软件结构
3、设计原理分析(模块化,在模块化程序设计中,按功能划分模块的原则是,模块化和软件成本关系)
模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求.
模块化的根据:把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了.
模块化和软件成本关系:根据总成本曲线,每个程序都相应地有一个最适当的模块数目M,,使得系统的开发成本最小.
为什么使用模块:复杂问题简单化,降低成本
抽象的概念:抽出事务的本质特性而暂时不考虑它们的细节.
衡量模块独立的两个标准是什么?它们各表示什么含义?
衡量模块的独立性的标准是两个定性的度量标准:耦合性和内聚性。
(1)耦合性。也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。
(2)内聚性。又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语句之间、程序段之间)联系得越紧密,则它的内聚性就越高。
耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。
4、启发规则(案例分析)
详细设计
1、详细设计目的:对模块的算法设计和数据结构设计(设计出的处理过程应该尽可能简明易懂)
2、过程设计的工具,具体有那些:程序流程图,盒图(NS),PAD(问题分析图)图,判定表,判定树,过程设计语言(PDL)也称伪码
3、Jackson设计方法:
(1)分析并确定输入数据和输出数据的逻辑结果,并用Jackson图描绘这些数据结构.
(2)找出输入数据结构和输出数据结构中有对应关系的数据单元。
(3)从描绘数据结构的Jackson图导出描绘程序结构的Jackson图
(4)列出所有操作和条件(包括分支条件和循环结束条件),并且把他们分配到程序结构图的适当位置
(5)用伪代码表示程序
4、程序复杂程度的定量度量
实现
1、实现定义: 通常把编码和测试统称为实现
2、软件测试定义: 为了发现程序中的错误而执行程序的过程
3、软件测试目标: 测试是为了发现程序中的错误而执行程序的过程
4、软件测试方法: 第一种方法是黑盒测试,第二种方法是白盒测试
5、软件测试步骤: 1单元测试(模块测试) 2.子系统测试3. 系统测试4. 验收测试5. 平行运行
5、软件测试和软件生命周期的关系:软件测试在软件生命周期中横跨两个阶段,编码和单元测试属于软件生命周期的同一个阶段。在这个阶段结束之后,对软件系统还应该进行各种综合测试,这是软件生命周期的另一个独立的阶段。
6、白盒测试技术: 白盒测试时将程序看作是一个透明的盒子,也就是说测试人员完全了解程序的内部结构和处理过程。所以测试时按照程序内部的逻辑测试程序、检验程序中的每条通路是否都能按预定的要求正确工作。白盒测试又称为结构测试。
7、测试用例: 输入的数据和预期的结果
8、黑盒测试技术: 黑盒测试时完全不考虑程序内部的结构和处理过程,只按照规格说明书的规定来检查程序是否符合它的功能要求。黑盒测试是在程序接口进行的测试,又称为功能测试。
9、软件可靠性分析: :软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。软件可靠性可以根据与技术系统可靠性接近的平行定义来表示。我们可以这样来定义软件可靠性:程序故障的频率和临界值。这里,故障是指在许可的运行条件下一个不可接受的结果或行为。同硬件一样,软件可靠性可以用错误出现和被纠正的速率来表示。
维护
1、软件维护定义:就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程.
2、软件维护分类:改正性维护;适应性维护;完善性维护;预防性维护
3、为什么软件难维护:因为结构化维护与非结构化维护差别巨大;维护的代价高昂;维护的问题很多.
4、决定软件课维护性的因素:可理解性;可测试性;可修改性;可移植性;可重用性;
面向对象方法学引论
1、为什么提出面向对象的方法:随着大型软件系统的出现,在中小型软件系统取得成功的传统的软件工程方法面临巨大的危机:
1、软件生产率无法满足市场需求
2、软件复用率不高
3、软件维护困难
4、软件往往不能真正满足用户需求
2、面向对象方法学的优点:与人类习惯的思维方法一致;稳定性好;可重用性好;较易开发大型软件产品;可维护性好
3、面向对象的基本概念:对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体.
4、模型定义:模型,就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。
5、面向对象开发软件的三种模型以及关系::对象模型;动态模型;功能模型; 它使用数据结构(对象模型),执行操作(动态模型),并且完成数据值的变化(功能模型)。关系:功能模型指明了系统应该”做什么”;动态模型明确规定了什么时候(即在何种状态下接受了什么事件的触发)做;对象模型则定义了做事情的实体.
6、对象模型:描述系统数据结构
7、功能模型:描述系统控制结构
8、动态模型:描述系统功能
面向对象分析
1、面向对象开发方法主要包括面向对象分析、面向对象设计和面向对象实现
2、00A的主要任务:是识别出问题域内的类与对象,并分析它们相互间的关系,最终建立起问题域的简洁,精确,可理解的正确模型.
3、OOA定义就是抽取和整理用户的需求并建立问题域精确模型的过程.
4、如何建立对象模型:确定类与对象;确定关联;划分主题;确定属性;识别集成关系.对象模型通常有5个层次:主题层;类与对象层;结构层;属性层;服务层
5、如何建立动态模型: 第一步,是编写典型交互行为的脚本
第二步,从脚本中提取出事件,确定触发每个事件的动作对象以及接受事件的目标对象,建立事件跟踪图。
第三步,排列事件发生的次序,确定每个对象可能有的状态及状态间的转换关系,并用状态图描绘它们
6、如何建立功能模型: 功能模型由一组数据流图或一组用例图组成。
首先画出基本系统模型图(基本系统模型由若干个数据源点/终点,及一个处理框组成);然后画出功能级数据流图(把基本系统模型中单一的处理框分解成若干个处理框);最后描述处理框功能
面向对象设计
1、面向对象设计定义:就是用面向对象观点建立求解域模型的过程.
2、设计准则:模块化;抽象;信息隐藏;弱耦合;强内聚;可重用.
3、启发规则:1设计结果应该清晰易懂;2一般-特殊结构的深度应适当;3设计简单的类;4使用简单的协议;5使用简单的服务;6把设计变动减至最小.
4、重用定义:也叫再用或复用,是指同一事物不作修改或稍加改动就多次重复使用.广义的说1知识重用;2方法和标准的重用3软件成分的重用
6、软件成分的重用级别:1代码重用2设计结构重用3分析结构重用
7、系统分解:大多数系统的面向对象设计模型,在逻辑上都由4大部分组成,这4大部分对应于组成目标系统的4个子系统,它们分别是问题域子系统;人机交互子系统;任务管理子系统;数据管理子系统.
面向对象实现、软件项目管理了解就可以