大学软件工程总结


前言

   软件工程在我整个大学的课程里是选修课,学的是电子工业出版社的《软件工厂--方法与实践 第2版》

   软件工程呢,我觉得是一门很需要实践的学科,光靠这样简单地靠老师讲或者看看书是学不到什么东西的。软件工程涉及到很多内容,其中软件项目管理也包括了。概念性东西很多,一些专业术语和名词在整个软件工程中也频繁地出现了。其中近些年比较火的技术领域,面向服务的软件架构和云计算。云计算这个名词,我想IT界的从业人员并不陌生,已经不是什么新鲜东西,不过近些年确实是被捧得水深火热了,我都想尽快涉足这个领域当中去。因为这就是趋势,云服务、云存储等改变了软件行业的格局,对传统的软件开发商是一个很大的冲击,我想会有越来越多的软件开发商会提供这样的服务。原因很简单,它是一个双赢的模式。不过这也是我浅薄的看法,关于云计算并不是简单就能说清楚的东西,我觉得它是技术上的创新,它能给人类带来很多的好处。

   当然,这个世界上没有完全完美的东西,双面性在云计算也有体现,云计算为我们节省了成本,节约了劳动力,那么也会丧失一些就业机会,我也不清楚中国现在的格局是怎样。还有就是,云计算是一个绝对安全的东西么,我们把所有的数据都放在云中,集中在一起真的没问题么。关于隐私问题,现在的我们随时随地都可以被一些云计算公司搜集到信息,在网上可以很轻易找到一个人各种信息,包括很多我们不希望被别人知道的信息。这又如何解决呢。总之,好东西都是需要经过锤炼的,不过我相信云计算肯定是利大于弊的东西,我很期待未来的信息化世界。



软件工程知识点总结

有以下知识点(考试内容,当然不止这些)

1. 软件工程的定义

2. 软件生存周期

3. 软件过程模型

4. 需求分析的定义、获取

5. 常见的软件体系结构(B/S 、C/S 、软件总线中间件)

6. SOA 的定义、特点、和工作模型(松耦合、明确定义的接口)

7. 云计算的定义、优势和应用模型

8. 软件测试的概念、原则、方法和测试策略

9. 软件维护的类型

10. 软件项目管理的管理过程和领域

11. 成本估算模型、进度计划的方法

12. 风险管理、质量管理的概念

13.  CMM(软件能力成熟度模型)


第一章

1. 软件工程的定义:(P3)

    软件工程是一门指导软件开发的工程学科,它以计算机理论及其他相关学科的理论为指导,采用工程化的概念、原理、技术和方法进行软件的开发和维护,把经实践证明的科学的管理措施与最先进的技术方法结合起来。软件工程研究的目标是“以较少的投资获取高质量的软件”。

2. 软件生存期(P5)

软件生命周期(SDLD)是指一个从用户需求开始,经过开发、交付使用,在使用中不断地增补修订,直至软件报废的全过程,亦称软件生存期(Life  Cycle)。

软件生命周期分为以下阶段:

可行性研究和项目开发计划。该阶段必须要回答的问题是“要解决的问题是什么”。

需求分析。该阶段的任务不是具体地解决问题,而是准确地确定“软件系统必须做什么”,确定软件系统必须具备哪些功能。

概要设计。概要设计就是设计软件的结构,该结构由哪些模块组成,这些模块的层次结构是怎样的,这些模块的调用关系是怎样的,每个模块的功能是什么。同时还要设计该项目的应用系统的总体数据结构和数据库结构,即应用系统要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。

详细设计。即对每个模块完成的功能进行具体描述,要把功能描述变为精确的、结构化的过程描述。

编码。该阶段把每个模块的控制结构转换成计算机可接受的程序代码,即写成以某特定程序设计语言表示的“源程序”。

测试。它是保证软件质量的重要手段,其主要方式是在设计测试用例的基础上检验软件的各个组成部分。测试分为,模块测试、组装测试、确认测试等。

维护。软件维护是软件生存期中时间最长的阶段。已交付的软件投入正式使用后,便进入软件维护阶段,它可以持续几年甚至几十年。

在大部分文献中将生存期划分为5个阶段,即 要求定义、设计、编码、测试及维护。其中 要求定义阶段包括可行性研究和项目开发计划及需求分析,设计阶段包括概要设计和详细设计。

为了描述软件生存期的活动,提出了多种生存期模型,如瀑布模型、循坏模型、螺旋模型、喷泉模型、智能模型等。

3. 目前常见的软件过程模型如下:瀑布模型、增量模型、螺旋模型、喷泉模型、智能模型等。

1) 瀑布模型


   

优点:在软件工程的第一阶段,瀑布模型得到了广泛的应用,它简单易用,在消除非结构化软件,降低软件的复杂性,促进软件开发工程化方面起了很大的作用。

缺点:由于瀑布模型是一种理想的线性开发模式,它将一个充满回溯的软件开发过程硬性分割为几个阶段,无法解决软件需求不明确或者变动的问题。这些缺点对软件开发带来了严重影响,由于需求不明确,会导致开发的软件不符合用户的需求而夭折。

2) 增量模型(incremental model)

  • 增量模型是一种非整体开发的模型。是一种进化式的开发过程。
  • 根据增量的方式和形式的不同,分为:
    • 基于瀑布模型的渐增模型
    • 基于原型的快速原型模型

该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。

 增量模型和瀑布模型之间的本质区别是什么?

增量模型和瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早地产生工作软件。

 一般的增量模型如下:


3)螺旋模型

对大型软件,需要多个原型描述系统的生存期,螺旋模型将瀑布模型与原型化模型结合起来,并加入了风险分析

该模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤:

制定计划:确定目标、方案和限制条件;

风险分析:评估方案、标识风险和解决风险;

实施工程:开发确认产品;

客户评估:计划下一周期工作。

 一般的螺旋模型如下图:沿着螺旋线每转一圈,表示开发出一个更完善的新的软件版本。如果开发风险过大,开发机构和客户无法接受,项目有可能就此中止;多数情况下,会沿着螺旋线继续下去,自内向外逐步延伸,最终得到满意的软件产品。


4) 喷泉模型

喷泉模型以面向对象的软件开发方法为基础,以用户需求作为喷泉模型的源泉。如下图:


6. 喷泉模型是对象驱动的过程,对象是所有活动作用的实体,也是项目管理的基本内容。

7. 喷泉模型在实现时,由于活动不同,可分为系统实现和对象实现,这既反映了全系统的开发过程,也反映了对象族的开发和重用过程

5)智能模型

    智能模型也称为基于知识的软件开发模型,是知识工程与软件工程在开发模型上结合的产物,以瀑布模型与专家系统的综合应用为基础建立的模型,该模型通过应用系统的知识和规则帮组设计者认识一个特定的软件的需求和设计,这些专家系统已成为开发过程的伙伴,并指导开发过程。

     从图中可以清楚地看到,智能模型与其他模型不同,它的维护并不在程序一级上进行,这样就把问题的复杂性大大降低了。

   智能模型的主要优点有:

   ① 通过领域的专家系统,可使需求说明更加完整、准确和无二义性。

   ② 通过软件工程的专家系统,提供一个设计库支持,在开发过程中成为设计的助手。

   ③ 通过软件工程知识和特定应用领域的知识和规则的应用来提供开发的帮助。

但是,要建立合适于软件设计的专家系统,或建立一个既适合软件工程由适合应用领域的知识库都是非常困难的。目前,在软件开发中正在使用AI技术,并已取得局部进展;例如在CASE工具系统中使用专家系统,又如使用专家系统实现测试自动化。


         

第二章

1.需求分析的定义

在传统软件工程生命周期中,涉及软件需求的阶段称做需求分析。

2.需求工程的定义

需求工程是一个包括创新和维护系统需求文档所必须的一切活动,是对系统应该提供的服务和所受到的约束进行理解、分析、检验和建立文档的过程。

3. 需求的获取和分析

需求的获取和分析是需求工程的关键和核心步骤,直接影响到后期的开发工作和系统的成败。

·需求获取

在深入实际调查研究,充分理解用户需求的基础上,获取系统需求。获取过程为:

了解领域知识,工程技术人员需要依靠领域专家,学习和理解相关的专业知识,才能正确抽取用户需求。

需求收集,与项目相关人员进行沟通,在进一步了解专业领域的基础上,发现系统需求的过程。

·需求分析

需求分析的过程是对收集到的需求进行提炼、分析和审查的过程,最终确定需求,并确保所有项目相关人员对需求取得一致性认识。分析阶段的主要工作包括:

确定系统范围。确定系统与其他外部实体或其他系统的边界和接口。

分类排序。对所收集的需求进行重新组织、整理、分类和筛选,并对每类需求进行排序,确定哪些是最重要的需求。

建立需求分析模型。这是分析阶段的核心工作。需求分析模型是对需求的主要描述手段,是根据不同的分析方法建立的各种视图,例如数据流图(DFD)、实体关系图(E-R)、用例图(Use Case)、类图、状态图、各种交互图等。还可建立辅助的说明,如数据词典。

建立需求规格说明。软件需求规格说明(Software Requirement Specification,SRS)是将需求的结果按照不同开发方法规定的格式用图形和文档形式描述出来。需求规格说明在整个开发过程中具有很重要的作用,是用户和开发人员之间进行交流和理解系统的手段。用户通过需求规格说明检查是否符合和满足所提出的全部需求。开发者则通过需求规格文档,了解和理解所开发系统的内容,并以此作为软件设计和软件测试的依据。项目管理人员以它为依据,规划软件开发过程、计划,估算软件成本和控制需求的变更过程。

第三章

·软件体系结构设计

仓库模型(The repository model)

也称“容器模型 ”,是一种集中式的模型。在这种结构模型当中,应用系统用一个中央数据仓库来存储各个子系统共享的数据,其它的子系统可以直接访问这些共享数据。当然,每个子系统可能会有自己的数据库。为了共享数据,所有的子系统之间紧密耦合的,并且围绕中央数据仓库,如下图:

  

仓库模型的主要优点:

①数据由一个子系统产生,并且被另外一些子系统共享;

②共享数据能得到有效的管理,各子系统之间不需要通过复杂的机制来传递共享数据。

③一个子系统不必关心其他的子系统是如何使用它产生的数据的。

④所有的子系统都拥有一致的基于中央数据仓库的数据视图。如果新子系统也采用相同的规范,则将它集成与系统中是容易的。

仓库模型的主要缺点:

①为了共享数据 ,各子系统必须有一致的数据视图 ,不可避免地会影响了整个系统的性能。

②一个子系统发生了改变,它产生的数据结构也可能发生改变。为了其他共享的目的,数据翻译系统会被用到。但这种翻译的代价是很高的,并且有时是不可能完成的。

③中央数据仓库和各子系统拥有的数据库必须有相同的关于备份、安全、访问控制和恢复的策略,这可能会影响子系统的效率。

④集中式的控制使数据和子系统的分布变得非常困难甚至成为不可能。这里分布指的是将数据或子系统分散到不同的机器上。

一般来说,命令控制系统、CAD系统等常采用这种结构。

分布式结构

分布式结构有如下一些优势:

资源共享:系统中每个服务结点上的资源都可以被系统中的其他结点访问。

开放性高:系统可以方便地增删不同软、硬件结构的结点。

可伸缩性好:系统可以方便的增删新的服务资源以满足需要。

容错能力强:分布式系统中的信息冗余可以容忍一定程度的软、硬件故障。

透明性高:系统中的结点一般只需知道服务的位置而不必清楚系统的结构。

分布式结构有如下一些不足:

①复杂性:分布式系统比集中式系统要复杂的多。集中式系统的性能主要依赖于主机的处理能力,而分布式系统的性能则还要依赖于网络的带宽,这让情况变得更加复杂。

②安全性:网络环境随时面临着各种威胁,如病毒、恶意代码、非法访问等,如何保证安全性是一个让人头痛的问题。

③可管理性:分布式系统的开放性造成了系统的异构性,显而易见,管理异构的系统比管理主机系统要困难得多。

④不可预知性:这主要指系统的响应时间。网络环境本身的特点决定了网络负载会明显地影响整个系统的响应时间。

下面主要讨论几种不同的分布式结构.

1)客户-服务器模型(Client/Server Architectural Model)

客户-服务器结构(Client/ServerArchitecture)是一种典型的分布式结构。典型的客户-服务器C/S 结构的系统包括三个组成部分:

①服务器(Server):多个独立的服务器为系统提供诸如Web、文件共享、打印等服务。

②客户(Client):多个并发客户应用访问多个服务器提供的服务,每个客户应用都是独立的同样的客户应用可以同时有多个实例。

③网络(Network):客户和服务器通过网络连接在一起。这是C/S结构的常用模式。有时客户应用和服务器应用会在同一台机器上运行,但两个应用还是要通过本机的网络协议进行通信,其效果就像在不同的机器上运行一样。

C/S 结构的应用都由三个相对独立的逻辑部分组成:

①用户界面部分:数据表示层,实现与用户交互。

②应用逻辑部分:业务逻辑层,进行具体运算和数据处理;

③数据访问部分:数据访问层,完成数据查询、修改、更新等任务。

以上三种逻辑之间的关系如下图:


根据应用逻辑层所处的位置,C/S 结构的应用系统常可以分为两层结构、三层/多层应用结构。

1)两层客户-服务器模型(Two Tier Client/ServerArchitectural Model)

在两层C/S 结构中,应用系统有两个典型的应用组成,其中一个是主要负责用户界面部分的客户端,另一个是主要负责数据访问的服务器,两者通过网络进行数据交换。其结构如下图:


现在举数据库应用的例子来说明两层C/S结构的工作方式。

客户应用工具需求向数据库服务器发出数据访问请求,数据库服务器会响应这个请求,查询、更新数据,然后将结果返回给客户端。这是典型的“请求-响应-得结果”模式。当然,不是所有的请求都需要返回结果。实际上,C/S 的工作模式是一种远程过程调用(Remote Procedure Call, RPC)模式。允许客户端和服务器端有不同的软硬平台。

 

 

·完整的应用包含三个相对独立的逻辑部分,而两层的C/S结构只有两个端应用。应用逻辑应该映射到哪一端上呢? 三种情况:

 

 

在上图中:

C/S 应用1的结构中,客户端应用负责用户界面和应用逻辑部分,因此他的工作比较繁重。这种结构往往被称为胖客户端(Fat-Client)结构,一般的数据库应用都是属于这种结构的。以此相反,

C/S 应用3的结构中,服务器负责了更多的工作,而客户端的工作就变得非常单纯。这种结构成为瘦客户(Thin-Client)结构。浏览器/Web 服务器结构就属于瘦客户结构,而且常被称为Browser/Server(B/S)结构。

不过,越来越多的B/S应用包含了一些可以迁移的代码,例如包含客户端脚本的网页,这些代码从服务器端下载到客户端并在客户端执行,这样一来,客户端也或多或少地要处理一部分的应用逻辑。这种B/S结构实际上介于胖客户和瘦客户结构之间,就如上图中的C/S 应用2的结构。

由于两层C/S 架构将数据表示和处理逻辑分开,这样,客户端和服务器的功能相对来说就比较单一,两端的维护和升级也比集中式结构简单。

但C/S 架构也存在着明显的缺陷:

由于应用逻辑和两端之一是紧耦合的,因此当它发生改变时,不是客户端就是服务器也要跟着做出相应的改变,同时这种改变极有可能会影响到另一端。因此,C/S 架构不适合用在多用户、多数据库、非安全的网络环境中。另外,客户端应用程序越来越大,对使用者的要求也越来越高。

 

3)三层/多层应用模型(Three/Multi Tier Model)

第一级是数据库管理结点(databasemanagement node)。

第二级或中间级是“商业逻辑结点” (business logic node),是指具体应用中实施的 程序逻辑和法则。

第三级是用户界面级,强调高效、方便易用的用户界面。

 

 

在下图所示的多层应用模型中,为了有效地管理那些完成业务逻辑的组件,中间层会用到应用服务,包括事务服务、消息服务等。常见的事务服务器有Microsoft Transaction Server,消息服务器有Microsoft Message Queue。


常见的三层结构应用有浏览器-Web服务-数据服务结构。这是一种典型的B/S结构。在这种结构中,

客户应用是一个通用的浏览器,如 Microsoft Internet Explorer(IE),它完成网页的显示和客户端脚本的远行;

Web服务器,如Microsoft Internet Information Server,它响应客户的网页访问请求,运行服务端脚本,并通过Microsoft ADO组件对象向数据库服务器发出数据请求;

数据库服务器,如Microsoft SQL Server ,响应数据请求并返回结果。

·多层应用模型的优点相当的明显:

①客户端的功能单一,变得更“瘦”。

②每一层可以被单独改变,而无须其他层的改变。

③降低了部署与维护的开销,提高了灵活性、可伸缩性。

④应用程序各部分之间松散耦合,从而使应用程序各部分的更新相互独立。

⑤业务逻辑集中放在服务器上有所有用户共享,使得系统的维护和更新变得简单,也更安全。

4) 分布式对象结构(Distributed Objects Architecture)

采用分布式对象结构 :

·服务的提供者是被称为“对象(Object)”的系统组件(System Component)。

·每个对象在逻辑上是平等的,它们可以互相为对方提供所需的服务。

·提供服务的对象就是服务器,而提出服务请求的对象就是客户。

·为了能够提供服务,每个对象都有一个服务接口。

下图是分布式对象结构:


分布式对象结构的另一个重要特点是,对象可能分布在网络的各个结点上而不是集中在一台硬件服务器上。为了将分散的对象提供的服务“串”起来,一种被形象地称为“软件总线(Software Bus)”的中间件起了关键的作用。

由于分布式对象结构具有相当好的开放性和透明性,用户可以非常方便地在总线上添加或者删除组件对象,从而完成增加、更新或删除功能。

“软件总线(Software Bus)”的中间件(Middleware) ,即对象请求代理(Object Request Broker,简称ORB) 。

流行的ORB技术标准有:

1 、CORBA(Common Object Request BrokerArchitecture)

公共对象请求代理体系结构。由对象管理组织OMG (Object Management Group)提出的应用软件体系结构和对象技术规范。

2、DCOM(Distributed Component ObjectModel)

组件对象模型。为组件之间、组件与应用程序之间的通信和互操作提供了统一的标准和技术规范,使不同语言开发的组件可进行基于组件的软件开发。

3、 EJB(Enterprise Java Bean)

由Sun公司定义的规范,EJB构件是实现EJB规范的Java构件,完成企业级应用中的业务逻辑。EJB构件驻留在EJB容器中。

5) 中间件(Middleware)

现代应用系统具有如下的一些特点:

分布性。整个任务不只是在单机上运行,而是由网络中多台计算机上的相关应用共同协作完成,这需要考虑网络传输、数据安全、数据一致性、同步等诸多问题。

异构性。支撑应用的计算机硬件、操作系统、网络协议、数据库系统,以及开发工具种类繁多,需要考虑数据表示、调用接口、处理方式等诸多问题。

动态协作性。参与协作的应用允许位置透明性、迁移透明性、负载平衡性等需求。

④应用程序各部分之间松散耦合,从而使应用程序各部分的更新相互独立。

⑤业务逻辑集中放在服务器上有所有用户共享,使得系统的维护和更新变得简单,也更安全。

应用中间件系统可以满足现代系统的需要。中间件是一种处于系统软件(操作系统和网络软件)与应用软件之间的软件,它能使应用软件之间进行跨网络的协同工作(也就是互操作),并允许个应用软件所涉及的“系统结构、操作系统、通信协议、数据库和其他应用服务”各不相同。

·中间件按其应用领域分为以下6种:

①远程过程调用中间件

②分布式对象中间件

③数据库访问中间件

④事务处理中间件

⑤消息中间件

⑥其他中间件



补充内容:面向服务的软件架构(PPT)

1. 面向服务的体系结构(service-oriented architecture,SOA)的定义

   面向服务的体系结构(service-orientedarchitecture,SOA)是一个构件模型,它将应用程序的不同功能单元(称为服务)通过定义良好的接口和契约联系起来。

·接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。

2. 服务(service)是封装成用于业务流程的可复用构件的应用程序函数。它提供信息或简化业务数据从一个有效的、一致的状态向另一个状态的转变。

3.  SOA的特点

·松耦合

①在该体系架构中,客户端不和任何服务器相关联,它只和服务相联系,所以客户端和服务器的集成不影响客户端应用程序。

②无论老的或者新的功能模块都可以被封装成服务构件被发布。

③功能构件和它们的接口分离,所以新的接口可以非常方便地插入。

④在复杂的应用程序里,业务过程的控制可以被隔离:引入一个业务规则引擎用来控制已经定义好的业务过程流。引擎根据工作流的状态调用各种不同的服务。

⑤服务可以在运行时动态地合成进来。

⑥通过配置文件进行绑定,所以可以非常容易地适应各种新的需要。

·明确定义的接口

·服务交互必须是明确定义的

· Web 服务描述语言(Webservices Description Language,WSDL)是受到广泛支持的方法,用于描述服务请求者所要求的绑定到服务提供者的细节

· 服务

·调用操作的消息

·构造这种消息的细节

· 关于向何处发送用于构造这种消息的处理细节的消息的信息

· 无状态的服务设计

· 服务应该是独立的、自包含的请求,在实现时它不需要从一个请求到另一个请求的信息或状态

· 服务不应该依赖于其他服务的上下文和状态。当需要依赖时,它们最好定义成通用业务流程、函数和数据模型

 

补充内容:云计算(PPT)

1. 云计算的定义

云计算(Cloud Computing ):是分布式处理(Distributed Computing)、并行处理(ParallelComputing)和网格计算(Grid Computing)的发展,或者说是这些计算机科学概念的商业实现。是指基于互联网的超级计算模式--即把存储于个人电脑、移动电话和其他设备上的大量信息和处理器资源集中在一起,协同工作。在极大规模上可扩展的信息技术能力向外部客户作为服务来提供的一种计算方式。

 

2. 云计算的优势:

①开发容易快速

②无多余的开支

③每月花费低

④IT人员减少,费用降低

⑤提供最新的技术和功能

⑥支持、推行IT标准

⑦系统和信息共享更容易

3. 云计算的应用模型

·云计算三种服务方式

·SAAS( Software as a Service )

·PAAS(Platform as a Service )

·IAAS(Infrastructure as a Service )

云计算的应用—IAAS(Infrastructure as a Service)

实现模式

·完全操作系统(软硬件)接入

·防火墙

·路由器

·负载平衡

优势

·节省费用/所付及所用

·即时升级

·安全

·可靠

·APIs

实例

当你想运行成批的程序组,但是没有合适的软硬件环境,可使用Amazon的EC2。

当你想在网络上发布一个短期(几天到几个月)的网站,可使用Flexiscale。

云计算的应用—PAAS( Platform as a Service )

实现模式

·平台价格昂贵

·需求估算不科学

·平台管理复杂麻烦

流行的服务

·存储

·数据库

·扩展性

优势

·节省费用/所付及所用

·即时升级

·安全

·可靠

·APIs

实例

当你想把一个大容量的文件上传到网络上,允许35000个用户使用2个月的时间,可使用Amazon的Cloud Front即时升级。

当你想在网络上存储大量的文档,但是你没有足够的存储空间,可使用Amazon的S3。可靠。

 

云计算的应用—SAAS( Software as a Service )

 实现模式

·在中小企业盛行

·无需管理软硬件

·服务通过浏览器实现

优势

·无浪费费用

·即时扩展

·安全

·可靠

·APIs

实例

·CRM

·财务计划

·HR

·文字处理

·Email

云计算的应用

IaaS、PaaS & SaaS共性

·无浪费费用

·即时扩展

·安全

·可靠

·APIs

优势

·用户花费低

·减少底层管理职责

·允许意想不到的资源装载

·业务应用实现迅速

风险

·安全性

·宕机问题

·接入问题

·独立性

·协同互动问题


第七章 软件测试

1. 软件测试的概念

2. 软件测试的原则

· Davis 提出了一组指导软件测试的基本原则:

①所有的测试都应根据用户的需求来进行。

②应该在测试工作真正开始前的较长时间内就进行测试计划(测试规划)的编写。一般而言,测试计划可以在需求分析完成后开始,详细的测试用例定义可以在设计模型被确定后立即开始,因此,所有测试可以在任何代码被编写前进行计划和设计。

③Pareto 原则应用于软件测试。Pareto 原则意味着测试发现的80%的错误很可能集中在20%的程序模块中。

④测试应从“小规模”开始,逐步转向“大规模”。即从模块测试开始,再进行系统测试。

⑤穷举测试是不可能的,因此,在测试中不可能覆盖路径的每一个组合。然而,充分覆盖程序逻辑,确保覆盖程序设计中使用的所有条件是有可能的。

⑥为达到最佳的测试效果,提倡由第三方来进行测试。

·其他的测试原则:

①在设计测试用例时,应包括合理的输入条件和不合理的输入条件

②严格执行测试计划,排除测试的随意性

③应当对每一个测试结果做全面检查

④妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便

⑤检查程序是否做了应做的事仅是成功的一半,另一半是检查程序是否做了不该做的事。

⑥在规划测试时不要设想程序中不会出错误

3. 测试用例的设计方法大体可分为两类

白盒测试/白箱测试

 把测试对象看作一个透明的盒子,根据程序内部的逻辑结构及有关信息设计测试用例

黑盒测试/黑箱测试

把测试对象看做一个黑盒子,完全不考虑程序内部的逻辑结构和内部特性

4.  白盒测试

又称结构测试、逻辑驱动测试或基于程序的测试

把测试对象看作一个透明的盒子,测试人员根据程序内部的逻辑结构及有关信息设计测试用例,检查程序中所有逻辑路径是否都按预定的要求正确地工作。

主要用于对模块的测试

白盒法常用的测试方法

①基本路径覆盖测试

根据程序或设计图画出控制流图,并计算其区域数,然后确定一组独立的程序执行路径,最后为每一条基本路径设计一个测试用例

②逻辑覆盖测试

考察使用测试数据运行被测程序时对程序逻辑的覆盖程度

通常希望选择最少的测试用例来满足所需的覆盖标准

语句覆盖:每个可执行语句都至少执行一次

判定覆盖:每个判定的每个分支至少经过一次

条件覆盖:每个判定中的每个条件的所有可能结果都至少出现一次

判定-条件覆盖:每个判定的所有可能结果都至少执行一次,并且,每个判定中的每个条件的所有可能结果都至少出现一次

条件组合覆盖:每个判定中条件结果的所有可能组合都至少出现一次

路径覆盖:每条可能执行到的路径都至少经过一次(如果程序中包含环路,则要求每条环路至少经过一次)

 

③数据流测试

·根据程序中变量的定义(赋值)和引用位置来选择测试用例

④循环测试

·简单循环、嵌套循环、串接循环和非结构循环

⑤检查程序是否做了应做的事仅是成功的一半,另一半是检查程序是否做了不该做的事。

⑥在规划测试时不要设想程序中不会出错误

5. 黑盒测试

黑盒法是把测试对象看做一个黑盒,测试时完全不考虑程序内部的逻辑结构与内部特性,只需根据需求规格说明书,测试程序的功能或程序的外部特性,因此黑盒发又称为功能测试或数据驱动测试。

 黑盒测试法注重于测试软件的功能需求,主要试图发现下列几类错误:功能不对或遗漏;性能错误;初始化和终止错误;界面错误;数据结构或外部数据库访问错误。

黑盒法的主要测试方法:

①等价分类法

·将所有可能的输入数据划分成若干个等价类,然后在每个等价类中选取一个代表性的数据作为测试用例

②边界值分析法

·挑选那些位于边界附近的值作为测试用例

③错误推测法

·凭以往的经验和直觉推测程序中某些可能存在的各种错误,从而针对性地设计测试用例

④因果图法

·既考虑输入条件的组合关系,又考虑输出条件对输入条件的依赖关系

⑤比较测试法

分别开发二个软件版本,用相同的测试用例对二个版本的软件分别进行测试,比较其测试结果

6.软件测试的策略

·单元测试

 单元测试(UnitTesting),也称模块测试(Module Testing)。测试的主要目的是检查模块内部的错误。因此,测试方法应以白盒法为主。

单元测试的内容

①模块接口

②局部数据结构

③重要的执行路径

④边界条件

⑤错误处理

 

·单元测试步骤:

 由于被测试的模块往往不是独立的程序,它处于整个软件结构的某一层位置上,被其他模块调用或调用其他模块,其本身不能单独运行,因此在单元测试时,需要为被测试模块设计若干辅助测试模块。辅助模块有两种

 一种是驱动模块(driver),用以模拟主程序或者调用模块的功能,用于向被测模块传递数据,接收、打印从被测模块返回的数据。一般只设计一个驱动模块。

另一种是桩模块(stub),用于模拟那些由被测模块所调用的下属模块的功能,可以设计一个或者多个桩模块,才能更好地对下属模块进行模拟。

·集成测试(Integrated Testing)

    集成测试(IntegratedTesting)是指在单元测试的基础上,将所有模块按照设计要求组装成一个完整的系统而进行的测试,也称为联合测试或组装测试。重点测试模块的接口部分,需设计测试过程所使用的驱动模块或桩模块。测试方法以黑盒法为主

集成的方式

·非渐增式测试

非渐增式测试方法采用一步到位的方法来集成系统。首先对每个模块分别进行单元测试,然后再把所有的模块按设计要求组装在一起进行测试。

非渐增式是将所有的模块一次连接起来,简单、易行,节省机时,但测试过程中难于查错,发现错误也很难定位,测试效率低。

·渐增式测试

  它的集成式逐步实现的,组装测试也是逐步完成的,也可以说它把单元测试与组装测试结合起来进行的。该测试是逐个把未经过测试的模块组装到已经测试过得模块上去,进行组装测试,每加入一个新模块进行一次集成的测试。重复此过程直至程序组装完毕。

在增量集成测试过程中发现的错误,往往与新加入的模块有关。

增量式集成又可分为自顶向下结合和自底向上结合

α测试和β测试

 α测试是邀请某些有信誉的软件用户与软件开发人员一道在开发场地对软件系统进行测试,其测试环境要尽量模拟软件系统投入使用后的实际运行环境。在测试过程中,软件系统出现的错误或使用过程中遇到的问题,以及用户提出的修改要求,均要由开发人员完整、如实地记录下来,作为对软件系统进行修改的依据。α测试的整个过程是在受控环境下,由开发人员和用户共同参与完成的。α测试的目的是评价软件的FLURPS,其中FLURPS 表示对一下项目的测试:

①Function Testing(功能测试)

②Local Area Testing(局部化测试)

③Usability Testing(可使用性测试)

④Reliability Testing (可靠性测试)

⑤Performance Testing (性能测试)

⑥Supportability Testing(可支持性测试)

  β测试是由软件产品的全部或部分用户在实际使用环境下进行的测试。整个测试活动是在用户的独立操作下完成的,没有软件开发人员的参与。β测试是投入市场前由支持软件预发行的客户对FLURPS 进行测试,主要目的是测试系统的可支持性。β测试的涉及面最广,最能反映用户的真实愿望,但花费的时间最长,不好控制。一般地,软件公司与β测试人员之间有一种互利的协议。即β测试人员无偿地为软件公司做测试,定期递交测试报告,提出批评与建议。而软件公司将向β测试人员免费赠送或以很大的优惠价格提供软件的正式版本。

综合测试策略

 一般都应该先进行静态分析,再考虑动态测试。

1) 单元测试

通常应该先进行“人工走查”,再以白盒法为主,辅以黑盒法进行动态测试。使用白盒法时,只需要选择一种覆盖标准,而使用黑盒法时,应该采用多种方法。

2) 组装测试

关键是要按照一定的原则,选择组装模块的方案(次序),然后再使用黑盒法进行测试。在测试过程中,如果发现了问题较多的模块,需要进行回归测试时,再采用白盒法。

3) 确认测试、系统测试

应该以黑盒法为主。确定测试中进行软件配置复查,主要是静态测试。


第九章 软件维护

1.  软件维护的类型

软件维护是指软件系统交付使用以后,为了改正错误或满足新的需求而修改软件的过程。按照不同的维护目的,维护工作可分成4类。

完善性维护(Perfective Maintenance)

这种扩充软件功能、增强软件性能、提高软件运行效率和可维护性而进行的维护活动称为完善性维护。

此项维护的策略是,可以使用功能强、使用方便的工具,或采用原型化方法开发的等。

适应性维护(Adaptive Maintenance)

适应性维护是为了适应计算机的飞速发展,使软件适应外部新的硬件和软件环境或者数据环境(数据库、数据格式、数据输入/输出方式、数据存储介质)发生的变化,而进行修改软件的过程。

    它主要的维护策略是,对可能变化的因素进行配置管理,将因环境变化而必须修改的部分局部化,即局限于某些程序模块等。

纠错性维护(Corrective Maintenance)

对在测试阶段未能发现的,在软件投入使用后才逐渐暴露出来的错误的测试、诊断、定位、纠错,以及验证、修改的回归测试过程称为纠错性维护。

它主要的维护策略是,开发过程中采用新技术,利用应用软件包,提高系统结构化程度,进行周期性维护审查等。

预防性维护(Preventive Maintenance)

 预防性维护是为了提高软件的可靠性和易维护性,采用先进的软件工程方法对需要维护的软件或软件中的某一部分重新进行设计、编制和测试,为以后进一步维护和运行打好基础。也就是软件开发组织选择在最近的将来可能变更的程序,做好变更它们的准备。

    它主要的维护策略主要是采用提前实现、软件重用等技术。


 

 

第十章 软件项目管理

1.  软件项目管理的管理过程和领域

项目管理的9个知识领域、5个过程组、和44个过程之间的相互关系可以通过下表来表示:


·软件项目管理过程

软件项目管理,是对整个软件生存期的所有活动进行管理。主要过程包括:

①项目启动

确定系统范围、组建项目团队、建立项目环境。

②项目规划

  确定项目活动、项目成本估算、制定进度计划

③项目实施

  监控项目执行、管理项目风险、控制项目变更

④项目收尾

  项目验收、软件安装培训、项目总结

项目管理的主要活动

 1、软件项目的规划

 ·可行性分析

 ·软件成本估算

 ·软件计划

 2、人员的组织管理

 ·人员配备原则

 ·人员配备模式

 ·软件团队建设

 ·软件项目沟通活动

 3、软件风险管理

 ·风险识别

 ·风险分析

 ·风险规划

 ·风险监控

 4、 软件配置管理

是为了有效地控制和管理软件开发过程中的变化,进行标识、组织和控制修改的技术。

配置管理活动:

·配置项的标识

·版本管理

·系统构建

·变更控制


2.  成本估算模型

·软件成本估算通常是估算软件的下列特性。

①源代码行(LOC)估算。源代码行是指机器指令行/非机器语言的执行步,使用它们可以作为度量生产率的基本数据。

②开发工作量估算。它是估算任何项目开发成本最常用的技术方法。根据项目开发过程,通常使用的度量单位是人月(PM)、人年(PY)或人日(PD)。

③软件生产率估算。它是指单位劳动量所能完成的软件数量,度量单位常用LOC/PM,¥/LOC或¥/PM。

④软件开发时间估算。在软件项目开发前必须进行估算。

·软件成本估算模型可分为两大类:理论模型和统计模型

·有代表性的软件开发成本估算模型:专家估算模型、IBM估算模型、Putnam 估算模型。

Ø  专家估算模型


其中:ai — 估计的最小行数     bi —估计的最大行数     mi — 最可能的行数

最后,通过与历史资料进行类比,推算出该软件每行源代码所需成本,将估算的源代码行数,乘以推算出的每行源代码所需成本,就得到该软件的成本估算值。

Ø  IBM估算模型

估算公式:(其中:源代码行数L,以千行计)

    工 作量:       E=5.2*L       (PM)

    项目持续时间:  D=4.1*L      (月)

    人员需要量:     S=0.54*E      (人)

    文 档数:       DOC=49*L      (页)

    IBM估算模型是一种静态单变量模型,它利用已估算的结果,如源代码行,来估算各种资源的需求量.

但IBM 估算模型不是一种通用模型,因此应用中应根据具体实际情况调整模型中的参数.


Ø  Putnam估算模型


其中: L—源代码行数,    K — 所需人力(PY)    td— 开发时间,  

CK —技术水平常数其值与开发环境有关。(差:2500-2000,正常:10000-8000,好:12500-11000)

由上述公式可以得到所需开发工作量的公式:


Ø  COCOMO模型

²  COCOMO模型是一种层次模型,按照其祥细程度分为三级:即基本的COCOMO模型、中间的COCOMO模型和详细的COCOMO模型。

²  该模型主要对工作量MM(单位:PM)和进度TDEP(单位:月)进行估算。模型中考虑到估算量与开发环境有关,将开发项目分为三类:

①组织型(Organic):相对较小、较简单的软件项目。程序规模不是很大(小于5万行),开发人员对产品目标理解充分,经验丰富,熟悉开发环境。大多数应用软件及老的操作系统、编译系统属于此种类型。

②嵌入型(Embadded):此种软件要求在紧密联系的硬件、软件和操作的限制条件下运行,通常与某些硬件设备紧密结合在一起,因此,对接口、数据结构,算法要求较高。如大型复杂的事务处理系统,大型、超大型的操作系统,军事指挥系统,航天控制系统等

③半独立型(Semidetached):对项目要求界于上述两者之间,规模复杂度中等。最大可达30万行。如大多数事务处理系统、新操作系统,大型数据库,生产控制等软件属此种类型。

²  下面分别讨论三级COCOMO模型:

① 基本的COCOMO模型(静态单变量模型)


其中: MM — 工作量(PM),Kloc— 估计的源代码行

Cl模型系数,a —模型指数 . Cla 取决于开发项目的模式为组织型、半独立型或嵌入型。


 ②中间的COCOMO模型

③详细的COCOMO模型

3.进度计划的方法

·描述计划进度的主要工具:一般的表格工具、甘特图、PERT技术与CPM方法。   

4.  项目风险管理

·风险的定义

风险(risk)是一种潜在的危险。软件项目由于其自身的特点而存在风险,甚至是灾难性的风险。

·软件项目风险管理过程:

项目风险管理主要包括:风险标识、风险估算、风险评价、风险监控和管理。

· 风险标识

1)  项目风险(project)。与项目有关的预算、进度、人力、资源、用户需求、项目规模、复杂性等方面的问题。

2)  技术风险(technical)。是指影响开发质量和交付时间的设计、实现、验证、维护、接口等方面的问题。

3)  商业风险(business )。包括与产品的商业运作有关的市场风险、预算风险、决策风险、销售风险等。

·风险估算

也称为风险评估,一般是从两方面进行估算:

⑴  从影响风险的因素考虑风险发生的可能性,即风险发生的概率。

⑵  风险发生所带来的损失的严重程度,即评价若风险一旦发生所产生的后果。

·为了反映风险产生的可能程度和风险产生后果的严重程度,建立风险度量的指标体系,如一种简单的风险评估技术是建立风险评估表。


· 风险评价

风险评价是指在风险估算的基础上,对所确定的风险做进一步的确认。定义项目的风险参考水准,进一步验证风险评估结果的准确性,并按照风险发生概率高低和后果严重的程度进行排序。一般可定义成本、性能和进度是三个典型的参考量。


·风险监控和管理

一个有效的策略必须考虑风险避免、风险监控和风险管理及意外事件计划这样三个问题。风险的策略管理可以包含在软件项目计划中,或者风险管理步骤也可以组成一个独立的风险缓解、监控和管理计划。

⑴  避免风险(avoidance)

这一种主动避免风险的活动。是在风险发生前分析引起风险的原因,采取措施,避免风险发生。

 

(2)风险监控

   贯穿在软件开发的全过程,是一种项目跟踪活动。主要监控对项目风险产生主要影响的因素。

(3)风险管理监控计划

    风险监控计划RMMP(Risk Management and Monitoring Plan), 保证文档的正确性,按监控计划记录、管理风险分析的全过程。


5.  软件质量保证

我们把影响软件质量的因素分成三组,分别反映用户在使用软件产品时的是三种不同倾向或观点。这三种倾向是:产品运行、产品修改和产品转移。如下图:

 软件质量度量方法有以下三种:

①精确度量:使用质量度量评价准则进行详细度量,工作量大,但度量精确度也高;

②全面度量:可以与简易度量并用对各个质量设计评价准则进行度量,工作量可以控制在一定的范围内。

③简易度量:简易度量顾名思义就是对各个质量评价进行简单的工作量度量。


· 软件质量度量方法有以下三种:

①精确度量:使用质量度量评价准则进行详细度量,工作量大,但度量精确度也高;

②全面度量:可以与简易度量并用对各个质量设计评价准则进行度量,工作量可以控制在一定的范围内。

③简易度量:简易度量顾名思义就是对各个质量评价进行简单的工作量度量。

 



第11章 软件能力成熟度模型

1.  CMM概述

u  软件能力成熟度模型CMM(Capability Maturity Model)是由美国卡内基-梅隆大学软件工程研究所(CMU/SEI)推出的评估软件能力与成熟度的一套标准,该标准基于众多软件专家的实践经验。

u  CMM的主要用于:

①软件过程评估SPA(Software Process Assessment)

②软件过程改进SPI(Software Process Improvement)

③软件能力评价SCE(Software Capability Evaluation)

2.  CMM的基本概念

·什么是软件过程

软件过程是指软件开发人员开发和维护软件及其相关产品所采取的一系列活动。

·什么是软件能力成熟度?

软件过程成熟度是指某个具体软件过程被明确定义、管理、度量和控制的有效程度。成熟意味着软件过程能力持续改善的过程,成熟度代表软件过程能力改善的潜力。

·软件过程的成熟度等级

CMM将软件过程的成熟度分为5个级别(MaturityLevels),如图所示,5个等级分别是:


Ø  初始级(Initial)

软件过程的特点是无秩序的,甚至是混乱的。企业一般不具备稳定的软件开发与维护环境。项目成功与否在很大程度上取决于是否有杰出的项目经理和经验丰富的开发团队。此时,项目经常超出预算和不能按期完成,组织的软件过程能力不可预测。

Ø  可重复级(Repeatable)

建立基本的项目管理过程来跟踪成本、进度和功能特性。组织建立了管理软件项目的方针以及为贯彻执行这些方针的措施。组织基于在类似项目上的经验对新项目进行策划和管理。组织的软件过程能力可描述为有纪律的,并且项目过程处于项目管理系统的有效控制之下。因为软件项目的计划和跟踪是稳定的,并能重复以前的成功。

Ø  已定义级(Defined)

已将管理和工程活动两方面的软件过程文档化、标准化,并综合成该机构的标准软件过程。组织形成了管理软件开发和维护活动的组织标准软件过程,包括软件工程过程和软件管理过程。项目依据标准定义自己的软件过程进行管理和控制。

组织的软件过程能力可描述为标准的和一致的,因为无论是软件工程活动还是管理活动,过程是稳定的和可重复的。对软件质量也进行了跟踪。项目的这种过程能力是建立在整个机构对项目定义的软件过程中的活动、任务和职责具有共同的理解的基础上的。

Ø  已管理级(Managed)

组织对软件产品和过程都设置定量的质量目标。项目通过把过程性能的变化限制在可接受的范围内,实现对产品和过程的控制。组织的软件过程能力可描述为可预测的,软件产品具有可预测的高质量。

Ø  优化级(Optimizing)

在优化级,组织通过预防缺陷、技术创新和更改过程等多种方式,不断提高项目的过程性能以持续改善组织软件过程能力。组织的软件过程能力可描述为持续改善的。

 

 

u  表描述了SW-CMM不同成熟度等级过程的可视性和过程能力。


3.  CMM的内部结构

· 关键过程域

Ø  在CMM中一共有18个关键过程域,分布在2~ 5个级别中 。

Ø  要达到一个成熟度等级,必须实现该等级上的全部关键过程区域。要实现一个关键过程区域,就必须达到该关键过程区域的所有目标。

Ø  此外,只有实现了下一成熟度等级的所有关键过程域的目标,才能实施高一级成熟度等级的关键过程域的活动。


 如上图所示,对关键过程域简单说明如下:

①可重复级关键过程域集中关注从非软件工程化向软件工程化转变初期必须做好的事情。其中包括它的6个关键过程域。

②已定义级中的关键过程域既涉及项目,又涉及组织,这是因为组织建立了对所有项目都有效的软件工程过程和管理过程的规范化基础设施。该等级包括7个关键过程域。

③已管理级中的关键过程域的主要任务是,为软件过程和软件产品建立一种可以理解的定量的方式。该等级中有两个关键过程域,即定量过程管理和软件质量管理。

④优化级有3个关键过程域,主要涉及的内容是软件组织和项目中如何实现持续不断的过程改进。

 共同特性

不同成熟度级别中的关键过程域执行的具体实践不同。这些实践分别组成关键过程域的5个属性,即5个共同特性。

共同特性用来指明一个关键过程域的执行和制度化是否有效、可重复和可持续。

①执行约定(Commitmentto Perform)

②执行能力(Ability to Perform)

③实施活动(Actives Performed)

④度量和分析(Measurementand Analysis)

⑤验证实施(Verifying Implementation) 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、软件工程概述 1.软件特点 软件:计算机程序、方法、规则、相关的文档资料,以及计算机程序运行时所需要的数据。 软件是计算机系统中的逻辑成分,具有无形性。其主要内容包括:程序、配置文件、系统 文档、用户文档等。 2.软件分类 (1)按功能划分:系统软件、支撑软件、应用软件。 (2)按工作方式划分:实时处理软件、分时处理软件、交互式软件、批处理软件。 (3)按规模划分:微型软件、小型软件、中型软件、大型软件。 (4)按服务对象划分:通用软件、定制软件。 3.软件发展阶段 (1)程序设计时代(20世纪50年代)。 (2)程序系统时代(20世纪60年代)。 (3)软件工程时代(20世纪70年代起)。 4.软件危机 (1)危机现象:软件开发成本与进度估计不准确,软件产品与用户要求不一致,软件产品质量可靠性差,软件文档不完整不一致,软件产品可维护性差,软件生产率低。 (2)危机原因:软件的不可见性,系统规模庞大,生产工程化程度低,对用户需求关心不 够,对维护不够重视,开发工具自动化程度低。 5.软件工程 软件工程:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必须的相关文件资料。 软件工程是一门关于软件开发与维护的工程学科,它涉及软件生产的各个方面,能够为经济、高效地开发高质量的软件产品提供最有效的支持。 (1)工程方法:结构化方法、JSD方法、面向对象方法。 (2)软件工具:具有自动化特征的软件开发集成支撑环境。 (3)工程过程:在软件工具支持下的一系列工程活动,基本活动是软件定义、软件开发、 软件验证、软件维护。 (4)工程管理:项目规划,项目资源调配,软件产品控制。 (5)工程原则:分阶段生命周期计划,阶段评审制度,严格的产品控制,采用先进的技术, 成果能清楚地审查,开发队伍精练,不断改进工程实践。 (6)工程目标:开发成本较低,软件功能能满足用户需求,软件性能较好,软件可靠性高, 软件易于使用、维护与移植,能按时完成开发任务并及时交付使用。 (7)工程文化:包括工程价值、工程思想和工程行为三个方面的内容。 二、软件工程过程模型 1.软件生命周期 如同任何事物都有一个发生、发展、成熟直至衰亡的全过程一样,软件系统或软件产品也有一个定义、开发、运行维护直至被淘汰这样的全过程,我们把软件将要经历的这个全过程称为软件的生命周期。它包含:软件定义、软件开发、软件运行维护三个时期,并可以细分为可行性研究、项目计划、需求分析、概要设计、详细设计、编码实现与单元测试、系统集成测试、系统确认验证、系统运行与维护等几个阶段。 软件定义期 软件定义是软件项目的早期阶段,主要由软件系统分析人员和用户合作,针对有待开发的软件系统进行分析、规划和规格描述,确定软件是什么,为今后的软件开发做准备。这个时期往往需要分阶段地进行以下几项工作。 1.软件任务立项 软件项目往往开始于任务立项,并需要以“软件任务立项报告”的形式针对项目的名称、性质、目标、意义和规模等作出回答,以此获得对准备着手开发的软件系统的最高层描述。 2.项目可行性分析 在软件任务立项报告被批准以后,接着需要进行项目可行性分析。可行性分析是针对准备进行的软件项目进行的可行性风险评估。因此,需要对准备开发的软件系统提出高层模型,并根据高层模型的特征,从技术可行性、经济可行性和操作可行性这三个方面,以“可行性研究报告”的形式,对项目作出是否值得往下进行的回答,由此决定项 目是否继续进行下去。 3.制定项目计划 在确定项目可以进行以后,接着需要针对项目的开展,从人员、组织、进度、资金、设备等多个方面进行合理的规划,并以“项目开发计划书”的形式提交书面报告。 4.软件需求分析 软件需求分析是软件规格描述的具体化与细节化,是软件定义时期需要达到的目标。 需求分析要求以用户需求为基本依据,从功能、性能、数据、操作等多个方面,对软件系统给出完整、准确、具体的描述,用于确定软件规格。其结果将以“软件需求规格说明书”的形式提交。 在软件项目进行过程中,需求分析是从软件定义到软件开发的最关键步骤,其结论不仅是今后软件开发的基本依据,同时也是今后用户对软件产品进行验收的基本依据。 软件开发期 在对软件规格完成定义以后,接着可以按照“软件需求规格说明书”的要求对软件实施开发,并由此制作出软件产品。这个时期需要分阶段地完成以下几项工作。 1.软件概要设计 概要设计是针对软件系统的结构设计,用于从总体上对软件的构造、接口、全局数据结构和数据环境等给出设计说明,并以“概要设计说明书”的形式提交书面报告,其结果将成为详细设计与系统集成的基本依据。 模块是概要设计时构造软件的基本元素,因此,概要设计中软件也就主要体现在模块的构成与模块接口这两个方面上。结构化设计中的函数、过程,面向对象设计中的类、对象,它们都是模块。概要设计时并不需要说明模块的内部细节,但是需要进行全部的有关它们构造的定义,包括功能特征、数据特征和接口等。 在进行概要设计时,模块的独立性是一个有关质量的重要技术性指标,可以使用模块的内聚、耦合这两个定性参数对模块独立性进行度量。 2.软件详细设计 设计工作的第二步是详细设计,它以概要设计为依据,用于确定软件结构中每个模块的内部细节,为编写程序提供最直接的依据。 详细设计需要从实现每个模块功能的程序算法和模块内部的局部数据结构等细节内容上给出设计说明,并以“详细设计说明书”的形式提交书面报告。 3.编码和单元测试 编码是对软件的实现,一般由程序员完成,并以获得源程序基本模块为目标。 编码必须按照“详细设计说明书”的要求逐个模块地实现。在基于软件工程的软件开发过程中,编码往往只是一项语言转译工作,即把详细设计中的算法描述语言转译成某种适当的高级程序设计语言或汇编语言。 为了方便程序调试,针对基本模块的单元测试也往往和编码结合在一起进行。单元测试也以“详细设计说明书”为依据,用于检验每个基本模块在功能、算法与数据结构上是否符合设计要求。 4.系统集成测试 所谓系统集成也就是根据概要设计中的软件结构,把经过测试的模块,按照某种选定的集成策略,例如渐增集成策略,将系统组装起来。 在组装过程中,需要对整个系统进行集成测试,以确保系统在技术上符合设计要求,在应用上满足需求规格要求。 5.系统确认验证 在完成对系统的集成之后,接着还要对系统进行确认验证。 系统确认验证需要以用户为主体,以需求规格说明书中对软件的定义为依据,由此对软件的各项规格进行逐项地确认,以确保已经完成的软件系统与需求规格的一致性。为了方便用户在系统确认期间能够积极参入,也为了系统在以后的运行过程中能够被用户正确使用,这个时期往往还需要以一定的方式对用户进行必要的培训。 在完成对软件的验收之后,软件系统可以交付用户使用,并需要以“项目开发总结报告”的书面形式对项目进行总结。 软件运行与维护期 软件系统的运行是一个比较长久的过程,跟软件开发机构有关的主要任务是对系统进行经常性的有效维护。 软件的维护过程,也就是修正软件错误,完善软件功能,由此使软件不断进化升级的过程,以使系统更加持久地满足用户的需要。因此,对软件的维护也可以看成为对软件的再一次开发。在这个时期,对软件的维护主要涉及三个方面的任务,即改正性维护、适应性维护和完善性维护。 2.瀑布模型 瀑布模型诞生于20世纪70年代,是最经典的并获得最广泛应用的软件过程模型。瀑布模型中的“瀑布”是对这个模型的形象表达,即山顶倾泻下来的水,自顶向下、逐层细化。 (1)特点:线性化模型、阶段具有里程碑特征、基于文档的驱动、阶段评审机制。 (2)作用:为软件项目按规程管理提供了便利,为其他过程模型的推出提供了一个良好的 拓展平台。 (3)局限性:主要适合于需求明确且无大的需求变更的软件开发,但不适合分析初期需求 模糊的项目。 3.原型模型 (1)快速原型方法:是原型模型在软件分析、设计阶段的应用,用来解决用户对软件系统在需求上的模糊认识,或用来试探某种设计是否能够获得预期结果。 (2)原型进化模型:针对有待开发的软件系统,先开发一个原型给用户使用,然后根据用 户的使用意见,对原型不断修改,使它逐步接近,并最终到达开发目标。 4.增量模型 增量模型结合了瀑布模型与原型进化模型的优点。在整体上按照瀑布模型的流程实施开发,以方便对项目的管理。但在软件的实际创建中,则将软件系统按功能分解为许多增量构件逐个地创建与交付,直到全部构件创建完毕,并都被集成到系统之中交付使用。 比较瀑布模型、原型进化模型,增量模型具有非常显著的优越性。但增量模型对软件设计有更高的技术要求。 5.螺旋模型 螺旋模型是一种引入了风险分析与规避机制的过程模型,是瀑布模型、快速原型方法和风险分析方法的有机结合。其基本方法是,在各个阶段创建原型进行项目试验,以降低各个阶段可能遇到的项目风险。 6.喷泉模型 喷泉模型是专门针对面向对象软件开发方法而提出的。“喷泉”一词用于形象地表达面向对象软件开发过程中的迭代和无缝过渡。 7.组件复用模型 组件复用方法是最近几年发展起来的先进的软件复用技术,在基于组件复用的软件开发中,软件由组件装配而成,这就如同用标准零件装配汽车一样。因此,组件复用模型能够有效地提高软件生产率。 三、项目分析与规划 1.计算机系统分析 (1)计算机系统 计算机系统是一个非常复杂并具有智能特性的开发系统,包括:硬件系统、软件系统、网络通信系统、人工操作系统等诸多子系统。 (2)系统分析 系统分析是对软件项目的高层分析,需要获取的是有关系统的框架描述,并需要使系统从它所处的环境中分离出来,为划分系统边界与确定系统构架提供依据。 (3)系统分析模型 分析模型是指采用作图方式对系统进行直观的描述。系统前期分析过程中经常使用的图形模型有系统框架图和系统流程图。其中,系统框架图用于说明系统的基本构造框架,而系统流程图则用于表现系统的基本加工流程。 2.项目可行性分析 (1)意义 •以少量的费用对项目能否实施尽早作出决断。 •根据项目条件限制,对系统的体系构造、工作模式等作出高层抉择。 •其结果可作为一个高层框架被用于需求分析之中。 (2)分析内容 •技术可行性:从技术与技术资源这两个方面作出可行性评估。 •经济可行性:从项目投资和经济效益这两个方面作出可行性评估。 •应用可行性:从法律法规、用户操作规程等方面作出可行性评估。 (3)分析过程 •建立系统模型。 •进行可行性评估。 •撰写可行性研究报告。 3.项目成本效益分析 (1)项目成本估算方法:基于软件规模的成本估算;基于任务分解的成本估算。 (2)项目效益分析指标:纯收入;投资回收期;投资回收率。 4.项目规划 (1)项目开发计划 项目开发计划涉及的内容包括: •开发团队的组织结构,人员组成与分工。 •项目成本预算。 •项目对硬件、软件的资源需求。 •项目任务分解和每项的任务里程碑标志。 •基于里程碑的进度计划和人员配备计划。 •项目风险计划。 •项目监督计划。 (2)项目进度表 项目进度是基于里程碑制定的,可以使用进度图表来描述项目进度。甘特图表是一种常用的项目进度图表,可以直观地描述项目任务的活动分解,以及活动之间的依赖关系、资源配置情况、各项活动的进展情况等。 四、软件需求分析 1.需求分析任务 (1)用户需求 用户需求是用户关于软件的一系列意图、想法的集中体现,是用户关于软件的外界特征的规格表述。 (2)系统需求 系统需求是比用户需求更具有技术特性的需求陈述,是提供给开发者或用户方技术人员阅读的,并将作为软件开发人员设计系统的起点与基本依据。主要包括:功能、数据、性能、安全等诸多方面的需求问题。 2.需求分析过程 需求分析是对软件系统的后期分析,需要进行的活动包括:分析用户需求、建立需求原型、分析系统需求和进行需求验证等。 3.用户需求获取 (1)用户调查是最基本的用户需求信息收集方法,比较常用的调查方法包括:访谈用户、开座谈会、问卷调查、跟班作业、收集用户资料。 (2)需求原型可被用来解决用户对软件系统在需求认识上的不确定性。一般情况下,开发人员将软件系统中最能够被用户直接感受的那一部分东西构造成为原型。例如,界面、报表或数据查询结果。 4.结构化分析建模 所谓模型,就是对问题所做的一种符号抽象。可以把模型看作为一种思维工具,利用这种工具可以把问题规范地表示出来。主要的分析模型包括: (1)功能层次模型。它使用矩形来表示系统中的子系统或功能模块,使用树形连线结构来表达系统所具有的功能层级关系。 (2)数据流模型。用于描述系统对数据的加工过程,其图形符号是一些具有抽象意义的逻辑符号,主要的图形符号包括:数据接口、数据流、数据存储和数据处理。可以依靠数据流图来实现从用户需求到系统需求的过渡。结构化分析就是基于数据流的细化实现的,它是结构化分析方法的关键。 (3)数据关系模型。也称为ER图,是应用最广泛的数据库建模工具。需要通过数据实体、数据关系和数据属性这三类图形元素建立数据关系模型。 (4)系统状态模型。通过系统的外部事件、内部状态为基本元素来描绘系统的工作流程,这种建模方式比较适合于描述一些依赖于外部事件驱动的实时系统。 5.需求有效性验证 需求有效性验证是指对已经产生的需求结论所要进行的检查与评价。一般需要对需求文档草稿从有效性、一致性、完整性、现实性、可检验性等几个方面进行有效性验证。比较常用的需求有效性验证方法与工具包括:需求评审、需求原型评价和基于CASE工具的需求一致性分析。 6.需求规格定义 需求规格说明书是需求分析阶段需要交付的基本文档,将成为开发者进行软件设计和用户进行软件验证的基本依据,涉及引言、术语定义、用户需求、系统体系结构、系统需求等有关软件需求及其规格的诸多描述与定义。 五、软件概要设计 1.设计过程与任务 概要设计中首先需要进行的是系统构架设计,然后是软件结构、数据结构等方面的设计。主要有以下几个方面的设计任务:制定规范、系统构架设计、软件结构设计、公共数据结构设计、安全性设计、故障处理设计、可维护性设计、编写文档、设计评审。 2.系统构架设计 (1)集中式结构 集中式系统由一台计算机主机和多个终端设备组成。其具有非常好的工作稳定性和安全保密性。但系统建设费用、运行费用比较高,灵活性不够好,结构不便于扩充。 (2)客户机/服务器结构 客户机/服务器结构依靠网络将计算任务分布到许多台不同的计算机上,但通过其中的服务器计算机提供集中式服务。其优越性是结构灵活、便于系统逐步扩充。 (3)多层客户机/服务器结构 •两层结构:将信息表示与应用逻辑处理都放在了客户机上,服务器只需要管理数据库事务。 •三层结构:将两层结构的客户机上的容易发生变化的应用逻辑部分提取出来,并放到一个专门的“应用服务器”上。 •B/S结构:是Web技术与客户机/服务器结构的结合。其优点是不需要对客户机进行专门的维护。 (4)组件对象 分布式结构通过组件进行计算分布。它依赖于对象中间件建立,具有灵活的构架,系统伸缩性好,能够给系统的功能调整与扩充带来便利。 3.软件结构设计 软件结构设计是对组成系统的各个子系统的进一步分解与规划。主要设计内容有:确定模块元素、定义模块功能、定义模块接口、确定模块调用与返回、进行结构优化。 (1)模块概念 •模块化:使用构造程序,可使软件问题简化。 •抽象化:概要设计中的模块被看成是一个抽象化的功能黑盒子。 •信息隐蔽:每个模块的内部实现细节对于其他模块来说是隐蔽的。 (2)模块的独立性 软件系统中每个模块都只涉及自己特定的子功能,并且接口简单,与软件中其他模块没有过多的联系。一般采用耦合和内聚这两个定性的技术指标进行度量。 耦合用来反映模块相互关联程度,模块间连接越紧密,耦合性就越高。内聚用来反映模块内元素的结合程度,模块内元素结合越紧密,则内聚性就越高。为提高模块独立性,要求模块高内聚、低耦合。 耦合形式由低至高是:非直接耦合、数据耦合、控制耦合、公共耦合、内容耦合。 内聚形式由低至高是:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚。 (3)设计建模 •软件结构图:由Yourdon于20世纪70年代提出,被广泛应用于软件结构设计中,能够有效说明软件中模块之间的调用与通信。 •HIPO图:由美国IBM公司推出。其中,H图用于描述软件的分层调用关系,作用类似软 件结构图,IPO图用于说明描述模块的输入—处理—输出特征。 (4)软件结构优化 主要优化设计原则有:使模块功能完整、使模块大小适中、使模块功能可预测、尽量降低模块接口的复杂程度、使模块作用范围限制在其控制范围之内、模块布局合理。 4.面向数据流的结构设计 (1)变换分析 软件结构由输入、变换和输出三个部分组成。 (2)事务分析 软件结构由接收事务与事务活动两个部分组成。 (3)混合流分析与设计 软件系统是变换流与事务流的混合。对于这样的系统,通常采用变换分析为主、事务分析为辅的方式进行软件结构设计。5.数据库结构设计 (1)逻辑结构设计 •设计数据表 •规范数据表 •关联数据表 •设计数据视图 (2)物理结构设计 •数据存储结构 •数据索引与聚集 •数据完整性 六、面向对象分析与设计 1.面向对象方法学 面向对象技术涉及面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程实现(OOP)这三个方面的问题。 (1)基本概念 •类:面向对象模块单位,作用是为创建对象实例提供模板。其具有数据与行为这两个方面的特征,并需要通过属性、操作和方法进行描述。 •属性、操作与方法:类具有数据与行为这两个方面的特征,并需要通过属性、操作和方法进行描述。 •类的继承性:指上级父类能够把自己的属性、操作传递给下级子类。 •类的多态性:子类对象可以像父类对象那样使用,它们可以共享一个操作名,然而却有不同的实现方法。 •对象:对象是类模块实例化的结果。 •消息:指对象之间的通信。 (2)优越性 •跟现实世界更加接近 •可使软件系统结构更加稳定 •软件具有更好的可重用性 •软件更加便于维护与扩充 2.面向对象分析建模 面向对象分析建模需要建立的是软件系统的用户领域模型,需要从系统业务流程、组织结构和行为过程等几个方面对系统进行分析。 (1)用例图 用例图涉及参入者、用例等元素,用于描述用户与系统之间的交互关系,说明系统所具有的业务能力和业务流程,能够方便开发者理解用户领域的专有术语和业务内容。 (2)活动图 活动图是一种行为模型,主要用于描述用例图中用例的内部活动状态与活动转换过程,以获得对用例的交互行为与工作流程的细节说明。涉及活动状态、活动转换等元素。 (3)分析类图 建立类图的概念模型,描述体现现实世界中数据构造的实体类及其它们之间的关系。 (4)序列图 以用例图中的用例为描述单位,以类图中的类为对象依据,以活动图中的活动转换为行为依据,建立与时间顺序有关的用例中对象之间的交互模型。 3.面向对象设计建模 面向对象设计建模需要把分析阶段的结果扩展成技术解决方案,需要建立的是软件系统的技术构造模型。 (1)设计类图 设计类图中的类是构造系统的基本模块单位,需要在分析类图基础上进行更加完整的面向设计的描述。除了实体类,设计类图中还需要考虑用于向外提供操作接口的边界类和用于实现内部协调的控制类。 (2)协作图 描述对象交互时的链接关系和基于链接而产生的消息通信及其操作接口。 (3)状态图 描述一个特定对象的所有可能的状态以及引起状态转换的事件。 (4)构件图 描述组成系统的物理构件及其它们之间的关系。构件之间关系主要是依赖关系。 (5)部署图 描述系统运行时的物理架构,涉及物理节点、节点之间的连接关系以及部署到各个节点上的构件的实例等。 七、用户界面设计 1.图形用户界面(GUI)所具有的特点 (1)比较容易学习和使用。 (2)用户可利用多屏幕(窗口)与系统进行交互,并可通过任务窗方便地由一个任务转换到另一个任务。 (3)可以实现快速、全屏的交互,能很快在屏幕上的任何地方进行操作。 图形用户界面设计已不是设计人员能够独立解决的了,需要邀请图形设计人员、系统分析人员、系统设计人员、程序员、用户应用领域方面的专家和社会行为学方面的专家以及最终用户的共同参入。 2.基于原型的用户界面设计 用户界面设计是一个迭代的过程,其基本过程包括三个步骤: (1)建立界面需求规格模型。 (2)以界面需求模型为依据创建界面原型。 (3)评价界面原型。 3.界面设计中需要考虑的因素 用户界面设计将会受诸多用户因素的影响,并主要体现在以下几个方面: (1)用户工作环境与工作习惯。 (2)用户操作定势。 (3)界面一致性。 (4)界面动作感。 (5)界面信息反馈。 (6)个性化。 (7)容错性。 (8)审美性与可用性。 4.界面类型 在基于图形界面的应用系统中,用户界面一般由若干个窗体组成,其窗体类型包括: (1)单窗体界面(SDI)。其特点是应用程序一次只能打开一个独立窗体。 (2)多窗体界面(MDI)。由一个MDI主窗体和多个MDI子窗体组成。其中MDI主窗体如同容器用来装载MDI子窗体,而MDI子窗体则被限制于MDI主窗体之内,不能独立存在。诸多公共操作都被放置在MDI主窗体上。 (3)辅助窗体。通常也叫做对话框,它是对主窗体的补充,用于扩展主窗体的功能。辅助窗体的种类主要有:登录窗、消息窗、设置窗等。 (4)Web页面。当采用到基于Web的B/S结构时,系统中的某个Web页面可能会被作为Web应用的进入点,则它可以作为一个特殊的主窗体看待。 5.界面功能特征 在进行用户界面设计时,需要考虑界面的功能问题。大体上说来,用户界面的功能主要体现在以下方面: (1)用户交互。指用户与计算机系统之间的信息交流。 (2)信息表示。指系统提供给用户信息,信息可以采用文本形式表示,也可以采用图形形式表示。 (3)用户联机支持。指系统给用户提供的应用指导。 6.界面导航设计 界面导航所指的是如何由一个界面转换到另一个界面。可以使用活动图来描述界面之间的转换关系,其中活动图中的每一个活动状态可用来表示系统中的每一个界面。 八、程序算法设计与编码 1.结构化程序特征 结构化程序的基本特征是程序的任何位置是单入口、单出口的。因此,结构化程序设计中,GOTO语句的使用受到了限制,并且程序控制也要求采用结构化的控制结构,以确保程序是单入口和单出口的。 2.程序算法设计工具 (1)程序流程图 程序流程图又称为程序框图,其历史悠久、应用广泛,从20世纪40年代末到70年代中期,它一直是程序算法设计的主要工具。程序流程图的主要优点是能够非常直观的描述程序的控制流程。但是,传统的程序流程图却是一种非结构化的程序算法设计工具。 (2)N-S图 为了满足结构化程序设计对算法设计工具的需要,Nassi和Shneiderman推出了盒图,又称为N-S图。它是一种严格符合结构化程序设计原则的图形描述工具。 N-S图的基本特点是通过矩形框描述模块内部程序的各个功能区域,并通过由外到内的矩形框嵌套表示程序的多层控制嵌套。 (3)PAD图 PAD是问题分析图(ProblemAnalysisDiagram)的英文缩写,由日本日立公司首先推出,并得到了广泛的应用。它是符合结构化程序设计原则的图形描述工具。 PAD图的基本特点是使用二维树形结构表示程序的控制流程,从上至下是程序进程方向,从左至右是程序控制嵌套关系。 (4)PDL语言 PDL语言也称为伪码,或过程设计语言,它一般是某种高级语言稍加改造后的产物,可以使用普通的正文编辑软件或文字处理系统进行PDL的书写和编辑。 PDL语言的语法规则分外部语法和内部语法。其中,外部语法用于定义程序中的控制结构和数据结构,内部语法则用于表示程序中的加工计算或条件。 (5)判定表 判定表是算法设计辅助工具,专门用于对复杂的条件组合关系及其对应的动作行为等给出更加清晰的说明,能够简洁而又无歧义地描述涉及条件判断的处理规则。 3.Jackson程序设计方法 1983年法国科学家Jackson提出了一种以软件中的数据结构为基本依据的程序算法设计方法。在以数据处理为主要内容的信息系统开发中,具有一定的应用价值。 Jackson程序设计方法的基本设计途径是通过分析输入数据与输出数据的层次结构,由此对程序算法的层次结构进行推论。 为了方便由数据结构映射出程序结构,Jackson将软件系统中所遇到的数据分为顺序、选择和重复三种结构,并使用图形方式加以表示。Jackson程序结构也是顺序、选择和重复这三种结构,并可以使用与数据结构相同的图形符号表示。 4.程序编码 在完成程序算法设计之后,接着需要编码。 (1)编程语言种类 •低级语言:包括第一代机器语言与汇编语言,它们是直接面向机器的语言。 •高级语言:指面向问题求解过程的语言,使用了与人的思维体系更加接近的概念和符号,一般不依赖于实现这种语言的计算机,具有较好的可移植性。 •第四代语言(4GL):指一些面向问题的高级语言,第四代语言是在更高一级抽象的层次上表示数据与猜想结构,它不需要规定程序算法细节。 (2)选择编程语言的依据 在对软件系统进行编码之前,必须抉择使用什么样的程序设计语言实现这个软件系统。在选择编程语言时往往需要考虑诸多方面的因素,例如软件项目的应用领域、软件问题的算法复杂性、软件的工作环境、软件在性能上的需要、软件中数据结构的复杂性、软件开发人员的知识水平和心理因素等。 (3)编程风格与质量 编程风格是编写程序时需要遵守的一些规则。在衡量程序质量时,源程序代码的逻辑简明清晰、易读易懂是一个重要因素,而这些都与编程风格有着直接的关系。 (4)影响程序工作效率的因素 一般说来,程序工作效率会受到处理器计算速度、存储器存储容量和输入输出速度等几个方面因素的影响,并与程序设计语言、操作系统、硬件环境等有着直接关系。因此,在考虑程序工作效率时,需要将诸多因素综合起来分析。 5.程序算法复杂性度量 程序算法复杂性主要指模块内程序的复杂性。比较著名的程序算法复杂性度量方法是McCabe度量法,其对程序复杂性的度量采用的是程序的环形复杂度,计算公式是: V(G)=m–n+p 其中,V(G)是程序有向图G中的环数,m是程序有向图G中的弧数,n是程序有向图G中的节点数,p是程序有向图G中分离部分的数目。 九、软件测试 1.测试目标 尽力发现软件中的错误,而不是为了验证软件的正确性。 2.测试方法 (1)黑盒测试:基于程序的外部功能规格而进行的测试,又称为功能测试。 (2)白盒测试:基于程序的内部结构与处理过程而进行的测试,又称为结构测试。 3.单元测试 单元测试的对象是单元模块,一般以白盒测试为主,以黑盒测试为辅。测试内容包括模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试。 单元测试通常在编码阶段进行。测试时需要用到辅助模块,如驱动模块、桩模块。 4.集成测试 系统集成时主要有非渐增组装测试和渐增组装测试这两种方法: (1)非渐增组装测试:一种一次性地进行系统组装的方法。 (2)渐增组装测试:一种将单元模块的确认测试与集成测试结合在一起的测试方法,它比非渐增组装测试是具有更大的优越性。可以自顶向下渐增集成,也可以自底向上渐增集成。5.确认测试 确认测试又称有效性测试,其任务是验证软件的功能、性能及其他特性是否与用户的要求一致。在进行确认测试时,可以采用Alpha测试或Beta测试。其中,Alpha测试是在开发环境下由用户进行的测试,而Beta测试则是由软件用户在软件实际使用环境下进行的测试。 6.测试用例设计 设计测试用例就是为测试准备测试数据。由于测试用例不同,发现程序错误的能力也就不同,为了提高测试效率降低测试成本,应该选用高效的测试用例。 白盒测试用例设计主要采用逻辑覆盖,包括语句覆盖、判定覆盖、条件覆盖、判定—条件覆盖、条件组合覆盖和路径覆盖。 黑盒测试用例设计包括等价划分、边界值分析和错误推测等几种方法。 7.面向对象测试 (1)面向对象单元测试 不能孤立地测试单个操作,而应该把操作作为类的一部分来测试。 (2)面向对象集成测试 •基于线程的测试。 •基于使用的测试。 (3)面向对象确认测试 研究系统的用例模型和活动模型,设计出确认测试时的用户操作脚本。 8.软件调试 软件调试也叫做排错,涉及诊断与排错这两个步骤。但调试的关键是诊断。 常用的调试方法有:输出存储器内容、在程序中插入输出语句、使用自动调式工具。 常用的调试策略有:试探法、回溯法、对分查找法、归纳法、演绎法。 9.自动测试工具 常用的自动测试工具有:测试数据生成程序、动态分析程序、静态分析程序、模块测试、程序。 10.软件可靠性评估 软件可靠性的定义是:程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。 软件可用性的定义是:程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。为了方便可用性的计算,一般使用稳态可用性对系统进行可用性评价。 系统平均无故障时间的估算式是:MTTF=1/(K(ET/IT–Ec(t)/IT)) 十、软件维护 1.软件维护定义 软件维护是在软件运行维护阶段,为了改正软件错误或为了满足用户新的应用需要,而对软件进行改错、变更或进化的过程。 维护任务一般分为:改正性维护、适应性维护、完善性维护和预防性维护。 2.影响软件维护工作的因素 主要因素有:系统大小、程序设计语言、系统文档和系统年龄等。 3.非结构化维护 没有按照软件工程原则实施软件开发,以致和软件配套的一系列文档没有建立起来,保留下来的可能只有源程序。 4.结构化维护 建立在严格按照软件工程原则实施软件开发基础上,因此各个阶段的文档完整,能够比较全面地说明软件的功能、性能、软件结构、数据结构、系统接口和设计约束等。 5.软件维护的代价 软件维护代价包括有形与无形这两个方面的代价。其中,有形代价是指软件维护的直接费用支出,无形代价则指其他非直接的维护代价。 6.软件可维护性 软件可维护性是指维护人员理解、改正、改动和改进这个软件的难易程度。 可以从系统的可理解性、可靠性、可测试性、可修改性、可移植性、运行效率和可使用性这七个方面对软件的可维护性进行综合评估。 7.软件维护的实施 软件维护实施过程中,一般涉及以下几个问题:维护机构、维护申请报告、软件维护工作流程、维护记录和维护评价。 8.对老化系统的维护 老化系统是指一些使用早期程序设计语言开发的系统。为了能够有效地对老化系统进维 护,Yourdon提出了以下的几点维护建议: (1)尽可能得到更多的背景信息。 (2)力图熟悉程序的所有控制流程。 (3)评价现有文档的可用性。 (4)充分利用交叉引用信息。 (5)必须非常谨慎地对程序进行修改。 (6)在删除某些代码时,要确认代码确实不再使用。 (7)不要试图共享程序已有的临时变量或工作区。 (8)保持详细的维护活动和维护结果记录。 (9)如果程序结构混乱,修改受到干扰,可抛弃程序重新编写。 (10)插入出错检验。 9.逆向工程与再工程 逆向工程是通过源程序,甚至是目标程序,由此导出设计模型、分析模型的过程。可以把逆向工程描述为一个魔术管道,从管道一端流入的是一些非结构化的无文档的源代码或目标代码,而从管道另一端流出的则是计算机软件的分析、设计文档。 逆向工程被用到了软件维护上,通过从老化系统的源代码中提取程序流程设计、系统结构设计,甚至是数据流图,给老化系统的维护带来方便。 当逆向工程被用于重新构造或重新生成老化系统时,这个过程就叫做再工程。再工程不仅能从已存在的程序中重新获得设计信息,而且还能使用这些信息来改建或重建现有的系统。 10.软件配置管理 配置管理包括软件配置标识、软件变更控制和软件版本控制等方面的内容。 当对软件进行维护时,软件产品发生了变化,这一系列的改变,必须在软件配置中体现出来,以防止因为维护所产生的变更给软件带来混乱。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值