软件工程
什么是软件危机?软件危机产生的原因是什么?怎样克服软件危机?你认为摆脱软件危机了吗?
软件危机:是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题和难题。它包括两方面:(1)如何开发软件,以满足对软件日益增长的需求;(2)如何维护数量不断膨胀的已有软件。
原因:
(1)开发人员方面,对软件产品缺乏正确认识,没有真正理解软件产品是一个完整的配置组成。造成开发中制定计划盲目、编程草率,不考虑维护工作的必要性。
软件本身方面,对于计算机系统来说,软件是逻辑部件,软件开发过程没有统一的、公认的方法论和规范指导,造成软件维护困难。
(3)尤其是随着软件规模越来越大,复杂程度越来越高,原有软件开发方式效率不高、质量不能保证、成本过高、研制周期不易估计、维护困难等一系列问题更为突出,技术的发展已经远远不能适应社会需求。
克服:
(1)对计算机软件应该有正确的认识;
(2)要吸取和借鉴人类长期从事各种工程项目积累的原理、概念、技术和方法;
(3)积极开发和使用计算机辅助开发软件;
(4)探索更好更有效的管理措施和手段对开发过程进行控制和管理.
CMM全称是什么?级别?CMM对软件工程有什么益处?
全称:CMM是Capability Maturity Model的简称,即软件过程能力成熟度模型。
CMM五个级别:
1)初始级:过程无序、混乱,无过程模型。项目能否成功完全取决于开发人员的个人能力。
2)可重复级:软件机构建立了基本项目管理过程。可跟踪成本、进度、功能和质量。
3)已定义级:软件过程文档化、标准化。软件开发成本、进度、功能和质量均受到控制。
4)已管理级:软件过程和产品建立了定量的质量目标,软件过程可度量、可预测。
5)持续优化级:软件机构能持续不断地改进软件过程,保持思想新、过程新、技术新。
益处:CMM是用于评价软件机构的软件过程能力和成熟度。给出从混乱、个人的过程到成熟的规范化过程的一个框架。
软件需求的目的、任务、属性?
软件需求是:
(1)用户解决问题或达到目标所需条件或权能(Capability)。
(2)系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或权能。
(3)一种反映上面(1)或(2)所述条件或权能的文档说明。
软件需求的特性有:
(1)完整性,是指每一项需求都必须将所要实现的功能描述清楚,不能丢失一些信息;
(2)正确性,是指每一项需求都必须准确地陈述其要开发的功能;
(3)可行性,是指需求是否能被正常地实现,每一项目需求都必须是可以在已知系统和环境的权能和限制范围内实施的;
(4)必要性,是指每一项需求都应把客户真正所需要的和最终所需遵从的标准记录下来;
(5)划分优先级;
(6)无二义性;
(7)可验证性。
需求分析主要是确定待开发软件的功能、性能、数据和界面等要求,具体来说可由如下几点:
确定软件系统的综合要求;
(2)分析软件系统的数据要求;
(3)导出系统的逻辑模型;
(4)修正项目开发计划;
(5)开发一个原型系统。
软件的生命周期分为几个阶段?开发要求->报备截止(8个阶段)
答:一个软件从定义到开发、使用和维护,直到最终被废弃,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为软件生存周期。它包括制定计划(问题定义)、可行性研究、需求分析、总体设计、详细设计、程序编写(编码)、综合测试、运行维护等。
模块独立性的标准,如何衡量?
(1)衡量模块独立的两个标准
衡量模块的独立性的标准是两个定性的度量标准:耦合性和内聚性。耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。
(2)衡量模块独立的两个标准的含义
①耦合性
也称块间联系,指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。
②内聚性
又称块内联系,指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语句之间、程序段之间)联系得越紧密,则它的内聚性就越高。
测试?黑盒测试:基于功能?白盒测试:基于结构?黑盒测试与白盒测试的区别是什么?
(1)白盒测试:白盒测试也称为结构测试,将软件看成透明的白盒,根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,以程序的源代码为基础进行测试而不使用用户界面。
(2)黑盒测试:黑盒测试是在完全不考虑软件的内部结构和特性的情况下,测试软件的外部特性。黑盒测试只检查程序功能是否符合需求规格说明书的规定。
(3)两者的区别:
①白盒测试可以有效地发现程序内部的编码和逻辑错误,但无法检验出程序是否完成了规定的功能。
②黑盒测试可以根据程序的规格说明检测出程序是否完成了规定的功能,但未必能够提供对代码的完全覆盖。
③一般来说在单元测试阶段白盒法使用较多而在集成测试阶段则较多用到黑盒方法。
什么是软件工程?内容?目标?
软件工程:用科学知识和技术原理来定义、开发、维护软件的一门学科。
软件工程的目标:是成功的建造一个大型软件系统,所谓成功是要达到以下几个目标:
a.付出较低的开发成本;
b.面到要求的软件功能;
c.取得较好的软件性能;
d.开发的软件易于移植;
e.需要较低的维护费用;
f.能按时完成开发任务,及时交付使用;
g.开发的软件可靠性高;
软件工程的内容:
1)软件开发技术:软件开发方法、软件开发过程、软件开发工具和环境。
2)软件开发管理:软件管理学、软件经济学、软件心理学。
什么是数据字典?数据字典与数据流图的关系?
数据字典(Data dictionary)是一种用户可以访问的记录数据库和应用程序源数据的目录。
关系:数据字典的作用是给数据流图上每个成分加以定义和说明。换句话说,数据流图上所有的成分的定义和解释的文字集合就是数据字典,数据流图是描述各个子块之间如何进行数据传递,数据字典相当于数据库中的对照表。
什么是软件的可维护性?常见的软件维护活动有哪几类?
定义:软件能够被理解、校正、适应及增强功能的容易程度;
常见的软件维护活动有:改正型、适应型、完善型、预防型。
1.PERT
工程评估评审技术的PERT - 加权方法(三点估算法)
最可能时间(Tm):基于最可能的资源所获得的活动持续时间。
最乐观时间(To):基于活动的最好情况所获得的活动持续时间。
最悲观时间(Tp):基于活动的最差情况所获得的活动持续时间。
PERT分析方法对以上3种估算进行加权平均,来计算:
预计活动持续时间(Te):
标准差:
方差:
概率值:
1. 项目经理正在进行一个图书馆信息查询系统的项目估算,他采用Delphi 的专家估算方法,邀请了 3 位专家进行估算, 第一位专家给出了2 万元、 7 万元、 12 万元的估算值, 第二位专家给出了 4 万元、 6 万元、 8 万元的估算值,第三位专家给出了2 万元、 6 万元、 10 万元的估算值,试计算这个项目的成本估算值。
答:专家一:E1 = ( 2+4*7+12 )/ 6 = 7
专家二: E2 = ( 4+4*6+8 )/ 6 = 6
专家三: E3 = ( 2+4*6+10 )/ 6 = 6
Ei = ( 7+6+6 )/ 3=6.33 (万元)
2. 对一个软件任务进行进度估算时,A是乐观者,估计用6天完成,B 是悲观者,估计用24 天完成, C 是有经验者,认为最有可能用12 天完成,那么这个任务的历时估算介于10 天到16 天的概率是多少?
解:E = (6+4*12+24)/6 = 13,
δ = (24-6)/6 = 3
E -δ= 10
E +δ= 16
所以任务历时估算介于
10 — 16 天的概率为: 68.3%
3. 根据下面的任务流程图和下表给出的项目历时估算值,采用PERT方法估算,求出项目在14.57天内完成的概率的近似值。
E1 = (2+4*3+6)/ 6 = 3.33
E2 = (4+4*6+8)/ 6 = 6
E3 = (3+4*4+6)/ 6 = 4.17
E = E1 + E2 + E3 = 13.5天 δ=1.07
E-δ = 12.43 E+δ = 14.57, 即在[12.43,14.57]的概率为:68.3%
所以,项目在14.57天内完成的概率为:50%+68.3%/2=84.15%
4.设存在任务A 和任务 B,它们的最乐观值分别为 8 和 2,最悲观值分别为 22 和 10,最可能值分别为 11 和 6,试说明包含此两个任务的项目在20 天内完成的概率近似值。
2.关键路径
数据结构与算法中AOE网求关键路径,略关键路径可以不止一条
3.MVC
经典MVC模式中,M(model)是指业务模型,V(view)是指用户界面,C(controller)则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。
4.定额估算法
计算公式:
T:活动历时
Q:任务工作量
R:人力数量
S:工作效率(贡献率)
一个软件项目的规模估算是12 人月,如果有4 个开发人员,而每个开发人员的开发效率是 1.5,则该项目工期为多少?
答案:由题意可知,该项目有4 个开发人员,即 R=4 人;而每个开发人员的开发效率是 1.5,即 S=1.5;该项目的规模估算为 12 人月,即 Q=12 人月,则由公式可知: T=Q/R×S=12 人月/(4×1.5)=2 月。
5.决策树分析
EMV:损失期望值,是决策树的一种计算值,根据预期结果、发生的概率计算出一种期望的损益。例如:某行动成功的概率是50%,收益是10,则EMV = 10*50% = 5
1.某旅游胜地拟建一饭店,提出甲、乙两方案,甲为建高档饭店,投资25000万元,乙为建中档饭店,投资 13000 万元,建成后饭店要求 15 年收回投资。根据预测该地区饭店出租率较高的概率是 0.7,较低的概率是 0.3。
若建高档饭店,当出租率较高时,每年可获利3000 万元,出租率不高时,将亏损 300 万元;
若建中档饭店,出租率较高时,每年可获利1200万元,出租率不高时,可获利 300 万元。
另据预测,在15年中,情况会发生变化,必须将15年分成前6年和后9年两期进行考虑。如果在前6年,本地区旅游业发展较快,则后9年可发展得更好,饭店出租率高的概率可上升至 0.9,如前 6 年发展较慢,则后 9 年的情况相应较差,饭店出租率低的概率为 0.9。
请决策应采用哪一个方案。
解:按已知条件,可列出决策表如表1(前 6 年)、表 2(后 9 年)所示。
按题意画出决策树,如图2所示。
先计算后9 年的收益期望值(从树叶往树根计算):
点④:[3000×0.9+(-300)×0.1]×9=24030
点⑤:[3000×0.1+(-300)×0.9]×9=270
点⑥:[1200×0.9+300×0.1]×9=9990
点⑦:[1200×0.1+300×0.9]×9=3510
再计算两个方案全部收益期望值:
点②:[3000×0.7+(-300)×0.3]×6+24030×0.7+270×0.3=28962
点③:(1200×0.7+300×0.3)×6+9990×0.7+3510×0.3=13626
收益期望值由两个部分构成,前一部分是方案前6年的收益期望值,后一部分是加上后9年的收益期望值。但是,所有的两段的收益期望值不是简单的相加,获得后 9 年收益期望值的可能性是建立在前 6 年的基础上的,即点④的 24030 万元必须乘以获得此值的概率 0.7,点⑤的 270 万元乘以获得此值的概率0.3,点⑥和点⑦也必须乘上各状态获得的概率。
各方案实际收益期望值:
高档饭店28962-25000(投资)=3962(万元)
中档饭店 13626-13000(投资)=626(万元)
结论:根据期望值准则进行决策,应采用建高档饭店的方案,净收益期望值为 3962 万元。将建中档饭店的方案删除。
2.下面以南方医院供应公司为例,看一看如何利用决策树作出合适的生产能力计划。
南方供应公司是一家制造医护人员的设备的公司。该公司正在考虑扩大生产能力。它可以有以下几个选择:1、什么也不做;2、建一个小厂;3、建一个中型厂;4、建一个大厂。新增加的设备将生产一种新型的大褂,目前该产品的潜力或市场还是未知数。如果建一个大厂且市场较好就可实现$100,000的利润。如果市场不好则会导致$90,000的损失。但是,如果市场较好,建中型厂将会获得$ 60,000,小型厂将会获得$40,000,市场不好则建中型厂将会损失$10,000,小型厂将会损失$5,000。当然,还有一个选择就是什么也不干。最近的市场研究表明市场好的概率是0.4,也就是说市场不好的概率是0.6。参下图:
在这些数据的基础上,能产生最大的预期货币价值(EMV)的选择就可找到。
EMV(建大厂)=(0.4) *($100,000)+(0.6)*(-$90,000) = -$14,000
EMV(中型厂)=(0.4) *($ 600,000))+(0.6)* (-$10,000) = +$18,000 (EMV值最大)
EMV(建小厂)=(0.4) *($40,000)+(0.6)*(-$5,000) = +$13,000
EMV(不建厂)=$0
6.计划偏差计算
结合科研方向,谈一谈软件工程的方法学,在专业上的应用?
平时作业。(重点:图要看懂,数据字典怎么来的?)
活动图
基本元素:
(1)初始节点和活动终点:实心圆表示初始节点(只有一个),圆圈内加一个实心圆来表示活动终点(可有多个)。
(2)活动节点:用来表示一个活动。
(3)转换:一条带箭头的直线来表示。一旦前一个活动结束马上转到下一个活动(无触发转换)。
(4)分支与监护条件:分支是用菱形表示的,它有一个进入转换(箭头从外指向分支符号),一个或多个离开转换(箭头从分支符号指向外)。而每个离开转换上都会有一个监护条件,用来表示满足什么条件的时候执行该转换。
具体图形:
用例图
(1)参与者(Actor):与应用程序或系统进行交互的用户、组织或外部系统。用一个小人表示。
(2)用例(Use Case):用例就是外部可见的系统功能,对系统提供的服务进行描述。用椭圆表示。
(3)子系统(Subsystem):用来展示系统的一部分功能,这部分功能联系紧密。
泳道图(带泳道的活动图)
(1)泳道表明每个活动是由哪些人或哪些部门负责完成。
(2)每个泳道代表特定含义的状态职责的部分。在活动图中,每个活动只能明确的属于一个泳道,泳道明确的表示了哪些活动是由哪些对象进行的。
(3)每个泳道都有一个与其他泳道不同的名称。
(4)每个泳道可能由一个或者多个类实施,类所执行的动作或拥有的状态按照发生的事件顺序自上而下的排列在泳道内。
在活动图中泳道区分了负责活动的对象,它明确地表示了哪些活动是由哪些对象进行的。
在包含泳道的活动图中每个活动只能明确地属于一个泳道。
类的属性的表示方式
在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个Employee类,它包含name,age和email这3个属性,以及modifyInfo()方法。