您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

软件工程基础知识

软件工程概述

 

软件过程

能力成熟度模型CMM:对软件组织化阶段的描述,随着软件组织定义、实施、测量、控制和改进其软件的过程,软件组织的能力经过这些阶段逐步提高。

1)初始级:特点是杂乱无章,有时甚至很混乱,几乎没有明确定义的步骤,项目的成功完全依赖个人的努力和英雄式核心人物的作用。

2)可重复级:建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功。

3)已定义级:管理和工程两方面的软件过程已经文档化和标准化,并综合成整个软件开发组织的标准软件过程。所有项目都采用根据实际情况修改后得到的标准软件过程来开发和维护软件。

4)已管理级:制定了软件过程和产品质量的详细度量标准。

5)优化级:加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈使过程能不断持续的改进。

能力成熟度模型CMMI:将已有的几个CMM模型结合在一起,使之构造成为“集成模型”。支持多个工程学科和领域的、系统的、一致的过程改进框架,能适应现代工程的特点和需要,能提高过程的质量和工作效率

CMMI两种表示方法:

1.阶段式模型:类似于CMM,它关注组织的成熟度,五个成熟度模型如下:

初始的:过程不可预测且缺乏控制。

已管理的:过程为项目服务。

已定义的:过程为组织服务。

定量管理的:过程已度量和控制。

优化的:集中于过程改进。

2.连续性模式:关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级。

统一过程UP

统一过程模型,是一种开发过程。

三大特点:用例和风险驱动、以架构为中心、迭代并且增量。

开发的四个阶段:起始(项目的初始活动,如确认需求和风险评估等)、精华(需求分析和架构设计等)、构建(系统的构建,产生实现模型等)、移交(软件提交方面的工作,产生软件增量,进行β测试,交付系统等)。

UP的每一次迭代都是一次完整的软件开发过程,包括整个软件开发生命周期,有五个核心工作流(需求、分析、设计、实现、测试)。

软件过程模型

软件过程模型:即软件开发模型,是软件开发全部过程、活动和任务的结构框架。

瀑布模型:结构化方法中的模型,是结构化的开发,开发流程如同瀑布一样,一步步的走下去,直到最后完成项目开发,只适用于需求明确或者二次开发(需求确定),当需求不明确时,最终开发的项目会错误,有很大缺陷。

V模型:增加了很多轮测试,并且这些测试贯穿于软件开发的各个阶段。

演化模型:

原型:即快速原型开发,针对的式需求不明确的情况,首先快速构造一个功能模型,演示给用户看,并按用户要求及时修改,中间再通过不断的演示与客户沟通,最终设计出项目,采用的是迭代的思想。

螺旋模型:是多种模型的混合,针对需求不明确的项目,与原型类似,但是增加了风险分析,这也是其最大的特点。分为四步:制定计划-风险分析-实施工程-用户评估。

增量模型:首先开发核心模块功能,而后与用户确认,之后再开发次核心模块的功能,即每次开发一部分的功能,并与用户需求确认,最终完成项目开支,优先级最高的服务最先交付。特点:由于不是从系统整体角度规划各个模块,因此不利于模块划分。难点在于如何将客户需求划分为多个增量。与原型不同 的是增量模型的每一次增量版本都可作为独立可操作的作品。

喷泉模型:是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。使开发过程具有迭代性和无间隙性。

基于构件开发模型CBSD:利用预先包装的构件来构造应用系统。构件可以是组织内部开发的构件,也可以是商品化成品软件构件。特点是增强了复用性,在系统开发过程中,会构建一个构件库,供其他系统复用,因此可以提高可靠性,节省时间和成本。

形式化方法模型:建立在严格数学基础上的一种软件开发方法,主要活动是生成计算机软件形式化的数学规格说明。

软件开发方法

结构化方法:流程固定,针对需求明确的项目,自顶向下,逐层分解,面向数据流。将数据流映射为软件系统的模块结构,数据流类型包括变换流型和事务流型,不同类型的数据流有不同的映射方法。以瀑布模型为代表,一旦开发完成,将难以修改,不利于复用及后续版本的开发,现在被面向对象法给代替了。

结构化方法的设计:体系结构设计是宏观架构设计;数据设计是数据流的设计;接口设计关注模块间的连接设计;过程设计是模块内的具体实现过程的数据结构和算法的设计。

Jackson方法:面向数据结构的开发方法,适用于小规模的项目。

原型方法:适合于需求不明确的开发,以原型模型为代表。

面向对象方法:强调复用性,构建全面合理的模型,供不同项目使用,方便修改,节省开发时间和效率,增强复用性,以构件组装模型为代表。

敏捷开发:针对中小型项目,主要是为了给程序员减负,去掉一些不必要的会议和文档。指代一组模型(极限编程、自适应开发、水晶方法....),这些模型都具有相同的原则和价值观。开发宣言:个体和交互胜过过程和工具、可以工作的软件胜过面面俱到的文档、客户合作胜过合同谈判、响应变化胜过遵循计划。

  •  结对编程:一个程序员开发,另一个程序员在旁边审查代码,能够有效的提高代码质量,在开发的同时对代码进行初步审查,共同对代码负责。
  • 自适应开发:强调开发的适应性。
  • 水晶方法:每一个不同的项目都需要一套不同的策略、约定和方法论。
  • 特性驱动开发:是一套针对中小型软件开发项目的开发模式。是一个模型驱动的快速迭代开发过程,它强调的是简化、实用、易于被开发团队接受,适用于需求经常变动的项目。
  • 极限编程xp:核心是沟通、简明、反馈和勇气。因为知道计划赶不上变化,xp无需开发人员在软件开始初期做出很多文档。xp提倡测试先行,为了将以后出现bug的几率降到最低。
  • 并列征球法SCRUM:是一种迭代的增量化过程,把每段时间(30天)一次的迭代称为一个“冲刺”,并按需求的优先级别来实现产品,多个自组织和自治的小组并行地递增实现产品。

软件工具

软件开发工具:对于软件开发过程中的各种活动。包括需求分析工具、设计工具、编码与拍错工具、测试工具。

软件维护工具:辅助软件维护过程中活动的软件,辅助维护人员对软件代码及其文档进行各种维护活动。包括版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具。

软件管理和软件支持工具:辅助管理人员和软件支持人员 的管理活动和支持活动,以确保软件高质量的完成。包括项目管理工具  、配置管理工具、软件评价工具。

软件开发环境

软件开发环境:指支持软件产品开发的软件系统,由软件工具集和环境集成机制构成。工具集用于支持软件开发的相关过程、活动和任务;环境集成机制为工具集成和软件开发、维护和管理提供统一的支持。

开发支持环境(环境信息库,过程控制和消息服务,用户界面规范)

软件项目管理

有效的项目管理集中在4P上:人员、产品、过程、项目。

软件项目的估算方法:成本估算方法。

自顶向下估算:又称类比估算法,确定一个总金额,再向下分摊到每一个功能点。

自底向上估算:从底层功能点开始估算成本,向上累加。

差别估算法:与以前项目比较,找出不同点重新估算,相同点则直接估算。

专家估算:聘请专家以其经验对项目整体费用进行估算。

COCOMO模型:常见的软件规模估算方法。常用的代码行分析方法作为其中一种度量估计单位,以代码行数估算出每个程序员工作量,累加得软件成本。

模型按其详细程度可以分为三级:基本COCOMO模型,中间COCOMO模型,详细COCOMO模型。其中基本COCOMO模型是一个静态单变量模型,它用一个以已估算出来的原代码行数(LOC)为自变量的经验函数计算软件开发工作量。中级COCOMO模型在基本COCOMO模型的基础上,再用涉及产品、硬件、人员、项目等方面的影响因素调整工作量的估算。详细COCOMO模型包括中间COCOMO模型的所有特性,但更近一步考虑了软件工程中每一步骤(如分析、设计)的影响。

COCOMOⅡ模型:COCOMO的升级,也是以软件规模作为成本的主要因素,考虑多个成本驱动因子。该方法包括三个阶段性模型,即应用组装模型(软件工程前期阶段使用)、早期设计阶段模型(需求已经稳定并且基本的软件体系结构已经建立时使用)和体系结构阶段模型(软件的构造过程中使用)。

Putnam估算模型:一种动态多变量模型,假设在软件开发的整个生存周期中工作量有特定的分布。

进度管理

基本原则:划分、相互依赖、时间分配、工作量确认、确定责任、明确输出结果、确定里程碑。

Gantt图:又称为横道图,横轴表示时间,纵轴表示活动,以时间顺序表示活动,能反应活动间的并行关系,但无法反应活动之间的依赖关系,因此也难以清晰的确定关键任务和关键路径。

PERT图:类似于前趋图,是有向图。反应活动之间的依赖关系,有向边标注活动的运行时间,但无法反应活动之间的并行关系。

软件质量管理

质量特性:

功能性(functionality):与一组功能及其指定的性质的存在有关的一组属性,功能是指满足规定或隐含需求的那些功能。

  • 适合性(suitablity):与对规定任务能否提供一组功能以及这组功能是否适合有关的软件属性。
  • 准确性(accurateness):与能够得到正确或相符的结果或效果有关的软件属性。
  • 互用性(interoperability):与其他指定系统进行交互操作的能力相关的属性。
  • 依从性(compliance):使软件服从有关的标准、约定、法规及类似规定的软件属性。
  • 安全性(security):与避免对程序及数据的非授权故意或意外访问的 能力有关的软件属性。

可靠性(reliability):与在规定的一段时间内和规定的条件下软件维持在其性能水平有关的能力。

  • 成熟性(maturity):与由软件故障引起失效的频度有关的软件属性。
  • 容错性(fault tolerance):与在软件错误或违反指定接口的情况下维持指定的性能水平的能力有关的软件属性。
  • 易恢复性(recoverability):与在故障发生后,重新建立其性能水平并恢复直接受影响数据的能力,以及为达到此目的所需的时间和努力有关的软件属性。

易使用性(usability):与为使用所需的努力和由一组规定或隐含的用户对这样使用所做的个别评价有关的一组属性。

  • 易理解性(understandability):与用户为理解逻辑概念及其应用所付出的劳动有关的软件属性。
  • 易学性(learnability):与用户为学习其应用(例如操作控制、输入、输出)所付出的努力相关的软件属性。
  • 易操作性(operability):与用户为进行操作和操作控制所付出的努力有关的软件属性。

效率(efficiency):在规定条件下,与软件的性能水平与所用资源量之间的关系有关的软件属性。

  • 时间特性(time behavior):与响应和处理时间以及软件执行其功能时的吞吐量有关的软件属性。
  • 资源特性(resource behavior):与软件执行其功能时,所使用的资源量以及使用资源的持续时间有关的软件属性。

可维护性(maintainability):与进行规定的修改所需要的努力有关的一组属性。

  • 易分析性(analyzability):与为诊断缺陷或失效原因,或为判定待修改的部分所需努力有关的属性。
  • 易改变性(changeability):与进行修改、排除或使用环境变换所需努力有关的软件属性。
  • 稳定性(stability):与修改造成未预料效果的风险有关的软件属性。
  • 易测试性(testability):为确认经修改软件所需努力努力有关的软件属性。

可移植性(portability):与软件可从某一环境转移到另一环境的能力有关的一组属性。

  • 适应性(adaptability):与软件转移到不同环境时的处理或手段有关的软件属性。
  • 易安装性(installability):与在指定环境下安装所需努力有关的软件属性。
  • 一致性(conformance):使软件服从与可移植性有关的标准或约定的软件属性。
  • 易替换性(replaceability):与一软件在该软件环境中用来替代指定的其他软件的可能和努力有关的软件属性。

 

 

 

 


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进