软件工程项目期末复习
- 格式:doc
- 大小:51.50 KB
- 文档页数:9
-
软件生命周期{软件定义[问题定义,可行性分析,需求分析]软件开发[总体设计,详细设计,(系统设计)编码与单元测试,综合测试(系统实现)]运行维护[软件维护]}
瀑布模型-快速原型模型-增量模型-螺旋模型-喷泉模型-Rational统一过程-敏捷过程与极限编程-微软过程
经济,技术,操作(法律,社会效益)可行性
可行性研究{系统流程图[CRT],数据流图[数据的原点或终点,变换数据的处理,数据存储,数据流],数据字典[数据流,数据流分量,数据存储,处理]}
需求分析{确定对系统的综合需求,分析系统的数据要求,导出系统的逻辑模型,修正系统的开发计划,业务需求,用户需求,功能需求}
用户沟通{访谈,面向数据流自顶向下求精,简易的应用规格说明技术,快速建立软件原型} 需求分析{实体联系图[数据对象,属性,联系],状态转换图(打)[初态,终态,中间状态],层次方框图,warnier图,IPO图}
验证软件需求{一致性,完整性,现实性,有效性} 非形式化缺点二义性,不完整性,抽象层次混乱
总体设计{系统设计阶段[确定具体实现方案]结构设计阶段[确定软件结构]} 设计原理{模块化,抽象,逐步求精,信息隐藏与局部化,模块独立} 耦合{数据耦合,控制耦合,公共环境耦合,容耦合}
聚{功能聚,顺序聚,通信聚,过程聚,时间聚,逻辑聚,偶然聚} 人机界面设计{系统响应时间,用户帮助设施,出错信息处理,命令交互}
过程设计的工具{系统流程图,盒图,PAD图[逐步求精],判定表[所有条件,条件组合(T,F),所有动作,条件下的动作(*)],判定树,过程设计语言}
面向数据结构的设计方法{Jackson图[表示的组成关系],改进的Jackson图[线段方向,加入编号],Jackson方法}
程序复杂度的定型度量{McCabe方法[环形复杂度V(G)=E(边)-N(结点)+2=P(判定节点)+1],HalStead方法N(程序长度)=N1(运算符出现次数)+N2 (操作数出现次数),E(错误)=Nlog2(n1+n2)/3000,H(长度)=nlog2n1+n2log2n2,} 实现{编码和测试}
编码风格{程序的部文档,数据说明,语句构造,输入输出,效率} 测试方法{黑盒测试,白盒测试}
测试步鄹{模块测试,子系统测试,系统测试,验收测试,平行运行}
单元测试{测试重点[模块接口,局部数据结构,重要的执行通路,出错处理通路,边界条件]} 集成测试{自顶向下集成,自底向上集成}
确认测试(验收测试,验证软件的有效性,黑盒测试技术){alpha和beta测试}
白盒测试{逻辑覆盖[语句覆盖,判定,条件,判定/条件,条件组合,点,边,路径]控制结构测试[基本路径测试,条件测试,循环测试]} 黑盒测试技术{等价划分,边界值分析,错误推测}
调试途径{蛮干法,回溯法,原因排除法[对分查找法,归纳法,演绎法]} 软件可靠性{稳态可用性Ass=t
正常/(t正常+t故障),平均无故障时间
MTTF,平均维修时间
MTTR,Ass=MTTF/(MTTF+MTTR)}
估算错误总数的方法{植入错误法,分别测试法}
软件维护的定义{改正性维护,适应性维护,完善性维护,预防性维护}
维护的特点{结构化维护与非结构化维护差别巨大,维护的代价高昂,维护的问题很多} 决定软件可维护性的因素{可理解、测试、修改、移植、重用性} -
面向对象方法学的优点{与人类习惯的思维方式一致,稳定性好,可重用性好,较易开发大型软件产品,可维护性好}
对象特点{以数据为中心,对象是主动的,实现了数据封装,本质上具有并行的特点,模块的独立性好}
其他概念{类,实例,消息[参数],方法,属性,封装,继承,多态性,重载}
软件再工程过程{库存记录分析,文档重构,逆向工程,代码重构,数据重构,正向工程} 面向对象分析{模型[静态结构(对象模型...对象及对象之间的关联),交互次序(动态模型...状态转换图),数据变换(功能模型...数据流图)]层次[主题层,类与对象层,结构层,属性层,服务层]}
面向对象设计{面向对象的设计准则,启发规则,软件重用,系统分解,设计问题与域系统,设计人机交互子系统,设计任务管理子系统,设计数据管理子系统,设计类中的服务,设计关联,设计优化,}
面向对象设计准则{模块化,抽象,信息隐藏,弱耦合[交互耦合,继承耦合],强聚[服务聚,类聚,一般-特殊聚]可重用}
软件重用{层次[知识重用,方法和标准的重用,软件成分的重用],级别[代码重用,设计结构重用,分析结果重用],可重用成分[项目计划,成本估计,体系结构,需求模型和规格说明,设计,源代码,用户文档和技术文档,用户界面,数据,测试用例]}
可重用类构件{特点[模块独立性强,具有高度的可塑性,接口清晰简明可靠],重用方式[实例重用,继承重用,多态重用]}
系统分解{子系统交互方式[客户供应商Client-Supplier,平等伙伴peer-to-peer],组织系统的方案[层次组织,块状组织]}
提高效率的几项技术{增加冗余关联以提高访问率,调整查询次序,保留派生属性} 面向对象的语言的优点{一致的表示方法,可重用性,可维护性}
面向对象语言的技术特点{支持类与对象概念的机制,实现整体-部分(聚集)结构的机制,实现一般-特殊(泛化结构的性质),实现属性和服务的机制,类型检查,类库,效率,持久保存对象,参数化类,开发环境}
选择面向对象的语言{将来能否占主导地位,可重用性,类库与开发环境,其他因素} 提高可重用性{提高方法的聚,减小方法的规模,保持方法的一致性,把策略与实现分开,全面覆盖,尽量不使用全局信息,利用继承机制}
提高可扩充性{封装实现策略,不要用一个方法便利多条关联链,避免使用多分支语句,尽心确定公有方法}
提高健壮性{预防用户的操作错误,检查参数的合法性,不要预先确定限制条件,先测试后优化}
测试策略{面向对象的单元,集成,确认测试} 测试类的方法{随机测试,划分测试,基于故障测试} 集成测试方法{多类测试,从动态模型导出测试用例} 估算软件规模{代码行技术,功能点技术}
工作量估算{静态单变量模型,动态多变量模型,COO2模型}
进度计划{估算开发时间,Gantt图,工程网络,估算工程进度,关键路径,机动时间} 人员组织{制程序员组,主程序员组,现代程序员组}
软件配置管理过程{标识软件配置中的对象,版本控制,变化控制,状态报告} 能力成熟度模型{初始级,可重复级,已定义级,已管理级,优化级}
软件危机:在计算机软件的开发和维护过程中所遇到的一系列严重问题[如何开发软件,以满足对软件日益增长的需求,如何维护数量不断膨胀的已有软件]典型表现:(1) 对软件开发成本和进度的估计常常很不准确。(2) 用户对"已完成的”软件系统不满意的现象经常发生。-
(3) 软件产品的质量往往靠不住。(4) 软件常常是不可维护的。(5) 软件通常没有适当的文档资料。(6) 软件成本在计算机系统总成本中所占的比例逐年上升。(7) 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
软件就是程序是不正确的,因为软件等于程序加文档加数据。(1) 文档是软件的一个非常重要的组成部分,在软件的开发过程中起着非常重要的作用。(2) 在软件开发的每一个阶段都应有相应的文档。它是开发人员与用户以及开发人员与项目管理人员之间交流的媒介(3) 文档是软件在不同阶段的表现形式。(4) 程序与文档必须一致,文档才有价值。(5) 文档质量直接决定软件质量的高低。(6) 文档也是软件测试和维护的依据。在没有文档或文档不全的情况下对大型软件进行测试与维护是不可思议的事情。(7) 文档是软件可重用的依据。
软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地、高效的开发出高质量的软件并有效地维护它,这就是软件工程。 人多瞎胡乱软件开发不同于传统的机械制造,人多不见得力量大。如果给落后于计划的项目增加新人,可能会更加延误项目。因为新人会产生很多新的错误,使项目混乱,并且原有的开发人员向新人解释工作和交流思想都要花费时间,使实际的开发时间更少,所以制定恰如其分的项目计划是很重要的。 三要素:方法、工具和过程
软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)3个时期组成。 软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。 1问题定义2可行性研究3需求分析4总体设计5详细设计6编码和单元测试7综合测试8软件维护
快速原型法所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能
往往是最终产品能完成的功能的一个子集。快速原型模型的第一步是快速建立一个能反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践来了解目标系统的概貌 瀑布模型特点[阶段的顺序性和依赖性(规化)][推迟实现的观点(系统化)][质量保证(阶段评审)][存在问题][不适合需求模糊的系统(需求的迷糊性和不确定性)][适用于操作系统、编译系统、数据库管理系统等系统软件的开发]
软件工程化思想在软件开发过程中的重要性。在软件工程思想出现之前,人们通常把软件等同于程序,认为软件开发就是程序设计。致使计算机软件的开发和维护出现一系列的问题,软件开发常常失败,从而导致软件危机的出现。例如:(1)对软件开发成本和进度的估计常常不准确;(2)用户对"已完成”的软件常常不满意;(3)软件产品的质量往往靠不住;(4)软件的可维护性也很差;(5)软件通常没有文档资料;(6)软件成本在计算机系统的总成本中的比例逐年上升。解决软件危机问题的过程中,便出现了软件工程化思想,人们逐渐地把软件工程化思想应用于软件开发过程中,使得软件开发的成本相对下降,并能得到有效控制,软件的开发进度可以得到预测,所开发的软件的质量稳步提高。人们逐步认识到,软件不仅仅是程序,而是程序、文档和数据的一个集合体,文档在软件开发的过程中起着相当重要的作用。人们按照软件工程化的思想把软件开发分为不同的阶段,每一个阶段都完成确定的任务,对每个阶段所完成的工作都可以进行评审,使得软件开发的可管理性可大大增强。对任何一个产品来说,质量都是第一位的,软件工程化思想的目的就是开发出高质量的软件系统。而事实证明,只有在软件开发过程中运用软件工程化思想才能开发出高质量的软件系统;否则只能导致软件开发的失败。
可行性分析目的:在明确了所要研究问题定义之后,分析员应该在明确目标系统所有限制和约束的前提下,去确定该问题是否值得去解决。 如何绘制数据流程图
(1)识别系统的输入和输出,画出顶层图
(2)画系统部的数据流、加工与文件,画出一级细化图 (3)加工的进一步分解,画出二级细