搜档网
当前位置:搜档网 › 软件工程复习笔记

软件工程复习笔记

软件工程复习笔记
软件工程复习笔记

第一章概述

1、软件的概念和特点

软件定义:

能够完成预定的功能和性能,并对相应数据进行加工的程序,及描述程序、操作的文档。

软件特点:

软件是逻辑产品,是设计开发的,不是生产制造的

软件开发环境对产品影响较大

软件开发时间和工作量难以估计,几乎无客观衡量标准

软件生产是简单的拷贝,但大多数是定制

软件完全测试非常困难

软件不会磨损和老化,但多会多次修改

软件维护易产生新的问题

2、软件危机和现状

软件危机:

在计算机软件的开发和维护过程中所遇到的一系列严重问题。如:

项目超出预算

项目超过计划完成时间

软件运行效率很低

软件质量差

软件通常不符合要求

项目难以管理并且代码难以维护

软件不能交付

软件危机的原因:

成本增加

软件技术进步落后于需求

客观原因:逻辑部件规模庞大

主观原因:不正确的开发方法(忽视需求分析、不重视软件维护等)

3、软件工程的定义和发展过程

软件工程:

(1)应用系统化的、学科化的、定量的方法,来开发、运行和维护软件,即,将工程应用到软件。

(2)对(1)中各种方法的研究。

软件工程的四个发展过程:

1、第一代软件工程—传统的软件工程

60年代末到70年代为了克服“软件危机”(Software crisis)提出“软件工程”的名词, 将软件开发纳入工程化的轨道,基本形成软件工程的概念、框架、技术和方法。称为传统的软件工程。

2、第二代软件工程—对象工程

80年代中到90年代,面向对象的方法与技术得到发展,研究的重点转移到面向对象的分析

与设计,演化为一种完整的软件开发方法和系统的技术体系,称为对象工程。

3、第三代软件工程—过程工程

80年代中开始,人们在软件开发的实践过程中认识到:提高软件生产率,保证软件质量的关键是“软件过程”,是软件开发和维护中的管理和支持能力,逐步形成软件过程工程。4、第四代软件工程—构件工程

90年代起,基于构件(Component)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称为构件工程。

第二章过程模型

1、软件的生命周期

软件生命周期(Software Life Cycle):

软件产品或软件系统从设计、投入使用到被淘汰的全过程。

2、软件过程概念

软件过程:为建造高质量软件所需要的活动、动作和任务的框架。

3、常见的几种软件过程模型:瀑布、增量、RAD、原型、螺旋、喷泉、方面等、敏捷模型举例软件项目:

瀑布模型:图书馆软件(适用于开发成熟,要求稳定性高的项目)

原型模型:行业软件(先开发一个原型,和用户商谈进一步明确需求)

增量模型:手机操作系统(用于先发布一个核心功能版本)

第三章需求分析

1、需求分析的概念和过程

定义:确定系统必须具有的功能和性能,系统要求的运行环境,并且预测系统发展的前景。

需求分析的步骤:

需求获取

需求提炼

需求描述(撰写需求规格说明书)

需求验证

需求分析类型:功能性需求和非功能性需求

功能性需求:描述系统应该做什么,即为用户和其它系统完成的功能、提供的服务。

例:用户目标、限定范围、业务流程等

非功能需求:必须遵循的标准,外部界面的细节,技术指标,实现的约束条件,质量属性等。如:技术指标、运行平台、实现技术、编程语言和工具等。

?如何输入有关航班、乘客及订票信息。F:输入

?什么信息要出现在机票和报告中。F:输出

?如何计算乘机费用。F:计算

?什么信息必须存储在旅行社和其他人访问的数据库中。F:数据存储

?这个系统应该设计成可以处理常旅客计划(客户未要求)。NF:可扩展性

?这个系统一周中只允许有2分钟宕机时间。NF:有效性

2、结构化分析方法,重点:数据流图

3、面向对象的分析方法,重点:用例图

4、需求规格文档编制

第四章系统设计

1、软件设计过程、软件设计的概念和原则

软件设计定义:

在[IEEE610.12-90]中,软件设计定义为软件系统或组件的架构、构件、接口和其他特性的定义过程及该过程的结果。

软件架构设计(有时称为顶层设计或概要设计)

描述软件的顶层架构和组织,划分不同的组件。解决系统总体上应该如何做?,即将分析模型映射为具体的软件结构。

软件详细设计

详细设计则将概要设计的结果具体化,详细描述各组件以便能够编码实现。

设计指导原则

设计应该是一种架构

设计应该是模块化的

设计应该包含数据、体系结构、接口和组件各个方面

应该设计出系统所用的数据结构

应该设计出展现独立功能特性的各组件

应该设计出各组件与外部环境连接的各接口

设计由软件需求分析过程中获得信息驱动,采用可重复使用的方法导出

设计应该采用正确清楚的表示法

2、重点:概要设计(体系结构图)、详细设计(流程图、盒图、PAD图)

3、面向对象的系统设计方法,重点:时序图

第六章质量保证

1、质量保证相关概念

软件质量:

明确表示是否符合功能和性能要求,明确地记载开发标准和所有专业开发软件的期望的隐性特点

质量控制内容:

①元素,如过程控制、作业管理、明确和完善的管理过程、确认和记录等

②能力,如知识、技能、经验和资历等

③软要素,如人员廉正、信任、组织文化、激励、团队合作精神、与品质的关系等

质量保证原则:

①“适合用途”:该产品应符合预期的目的

②“一次成功”:错误应该被淘汰

质量成本:

预防成本

评估成本

失效成本

软件评审三种形式:

软件同行评审:同行评估产品技术的含量和质量

软件管理评审:管理人员代表评估当前工作,决定后续安排

软件审计评审:外部人员评估软件产品的规范性、标准化程度、合同履行情况等

软件可靠性两类指标:

①可靠性

指能够避免或者检测重大错误的能力

度量:平均失效时间、平均维修时间

②可用性

在某个时间点上程序能够按照需求执行的概率

度量:失效在维护中所占比重

2、软件测试的策略:V模型及各阶段主要内容方法

回归测试:发现问题修改之后再次测试

验收测试中α测试和β测试:

α测试:用户在开发环境下测试

β测试:用户在真实使用环境下测试

3、软件测试的技术,白盒测试:逻辑覆盖、黑盒测试:等价类划分和边界值分析

第七章:软件维护

1、软件维护的定义、分类(4类)

软件维护定义:

软件维护定义:软件维护是指由于软件产品出现问题或需要改进而对代码及相关文档的修改,其目的是对现有软件产品进行修改的同时保持其完整性。

软件维护四种类型:

纠错性维护(出错)

适应性维护(软硬件变化、数据存储变化,如移植Android软件到苹果,功能不变平台变)完善性维护(扩展新功能)

预防性维护(补充漏洞)

2、软件维护应注意的问题(3个方面基本内容)

①技术方面(确定修改的影响及范围)

②管理方面(责任到人、外包需要完善的合约)

③成本方面

3、软件维护过程模型

软件分类与鉴别阶段

分析阶段

设计阶段

实现阶段

系统测试阶段

验收阶段

交付阶段

4、软件维护技术(程序理解的任务、再工程的定义和模型、逆向工程的定义和主要内容)程序理解的任务:

以软件维护、升级和再工程为目的,在不同的抽象级别上建立基本软件的概念模型,包括从代码本身的模型到基本应用领域的模型,即建立从问题/应用域到程序设计/实现域的映射集

再工程定义:

软件再工程(Re-engineering)指对现有软件进行仔细审查和改造,对其进行重新构造,使之成为一个新的形式,同时包括随之产生的对新形式的实现。

再工程模型:

库存目录分析(用于预防性维护,尽量对最少的模块进行,需要对目录中的模块分析)

文档重构(原来没文档,不必要的不建,需要的只写这次维护修改的文档,关键的建尽量小的全文档)

逆向工程(分析源程序以在更高的层次上描述,设计其结构)

代码重构(不改变体系结构,部分代码难于理解的只重写代码就行)

数据重构(数据体系结构差,要整体重构)

正向工程(应用现代软件工程知识重新开发现有系统)

逆向工程定义:

软件逆向工程(Software Reverse Engineering)是分析目标系统,识别系统的构件及其交互关系,并且通过高层抽象或其他形式来展现目标系统的过程。

逆向工程主要内容:

数据的逆向工程

处理的逆向工程

用户界面的逆向工程

逆向工程的工具

第八章:项目管理

1、软件项目管理相关概念:项目管理、四要素(了解)

项目管理定义:

计划、协调、度量、监控、控制及报告等管理方法在软件开发和维护中的具体应用,以保证整个过程是系统的、有原则的、可量化的。

项目管理四要素:

人员(人员配备、报酬、沟通协调、企业文化)

产品(产品目标、预算、人员安排、交付日期)

过程(全面计划、框架、任务集合)

项目(项目计划、监控、控制)

2、软件度量:软件度量定义、决定要素,基于规模测量的基本思想,功能点度量方法(给定数据计算)、基本的COCOMO模型(给定数据计算)

软件度量含义:

一种量化衡量方法,使得人们可以理解和把握软件项目的(生产)效率(或者所需要的劳动量) 决定要素:

软件测量两种类型:

直接测量:基于规模测量的基本思想,按代码量,结合错误数、文档页数、开发成本等

间接测量:功能点度量

功能点数FP计算:

FP=198×(0.65+0.01 ×14 ×3)=211.86

3、项目计划:会画任务网络图、次序图,会计算关键路径

额外知识记录:

1、题目给出一段描述,让说明其中的一些类,形式如下(类名、属性值、动作)

2、软件复用(面向对象技术为什么有利于软件复用)

软件复用是将已有的软件成分用于构建新的软件系统,可以显著提高软件开发质量和利用率,降低软件成本。

面向对象技术之所以有利于软件复用,是因为它的主要概念与原则和软件复用十分吻合。支持复用的概念和原则有:对象和类、抽象、封装和继承、粒度控制、多态性、一般-特殊结构、整体-部分结构。面向对象方法用对象描述问题域中的事务,并用类作为同种对象的抽象表示。类是系统的基本构成单位,它可以符合可复用构件应该具备的那些特性:完整性,独立性、可标识性、抽象封装:尤其是对象封装性为软件复用技术提供了良好的条件。而继承机制本质上就是一种复用机制,因而面向对象为软件复用提供了一个良好的环境。

3、子父图是否平衡

父图与子图的输入流、输出流个数要一致,但是也可能子类中多个输入流等于父图中的一个输入流也可以。如父图:某个处理输入账单,而子图中输入名字、金额、菜名也可以平衡。

4、软件生命周期包括:

问题定义、可行性研究、需求分析、系统设计、编码实现、软件测试、运行与维护总结为三个阶段:计划阶段、开发阶段和运行阶段

5、耦合性的几种类型:

模块的耦合性从低到高可分为以下几种类型:

(假设某人为一模块)

无直接耦合(比如陌生人之间的联系)

数据耦合(比如售货员与顾客之间的联系)

标记耦合(比如两个人下棋)

控制耦合(领导和下属之间的联系)

公共耦合(比如图书馆的所有借书者之间的联系)

内容耦合(比如小两口之间的联系)

相关主题