软件工程实践综述

实践综述

  沟通:减少摩擦和扩大双方的交流广度,双方必须互相协作以更好地交流

  策划:着眼于为了使开发整个系统或产品沿着最佳路线前进提供指导,计划应该为每个软件增量而设计,或者为整个项目而指定,无论如何,计划都必须涉及要做什么,谁来做以及什么时候完成

  建模包括分析和设计,描绘了逐渐细化的软件,建模的目的是加深对索要完成工作的理解并为软件开发人员提供技术指导

  构造包括了编码和测试循环,循环过程包括为每个构件生成源码并对其进行测试和纠错;集成则是将各个单独的构建接合起来以及对集成的模块进行功能性测试

  部署发生在向客户展示每个增量的时候,交付的关键原则是满足客户期望并且能为客户提供合适的软件信息支持。

系统工程

  一个高科技系统包含很多要素,如硬件、软件、人员、数据库、文档以及操作规程,系统工程师将用户的要求转换成由一个或多个要素构成的系统模型。

  系统工程开始于“全局视图”,分析业务领域或者查您以简历全部基本业务需求,然后焦点逐步转移到“领域视图”上,在领域视图中独立分析每个系统要素,每个要素都分成一个或多个工程构件,然后按照相应工程规范来处理

  业务过程工程是一种系统工程方法,用以确定能够有效使用信息的业务架构,业务过程工程的目的是提供易于理解的数据架构、应用架构,还有满足业务战略和每个业务领域目标的基础设施

  产品工程是从系统分析开始的系统工程,系统工程师确认用户需求,确定经济和技术可行性,将功能和性能分配到软件、硬件、人员、数据库等关键工程构件中去

需求工程

  需求工程发生在与客户沟通和为一般的软件过程定义的建模活动过程中,起个不同的需求工程功能:起始、导出、精华、协商、规格说明、确认和管理。

  在项目起始阶段,开发人员和客户简历基本的问题需求,定义最重要的项目约束以及陈述主要的特征和功能,必须为系统表现出来这些特征和功能以满足其目标。该信息在到处阶段得到提炼和延伸,在此阶段中利用有主持人的会议、QFD和用户场景开发进行需求收集活动

  精化阶段进一步把需求扩展为分析模型:基于场景、基于活动、基于类、行为和面向信息流的模型元素的集合。为了创建这些元素可以使用各种建模符号。

  当确定需求并且创建分析模型时,软件团队和其他项目共利益者协商优先级、可用性和每条需求的相对成本。协商的目标是开发一个理想的项目计划。此外,将按照客户需求确认每个需求和整个分析模型,以确保将要构建的系统是正确的。

构建分析模型

   分析模型的目标是创建各种表现形式,以描述软件信息、功能和行为的需求。为实现这一目标,可以采用两种不同的但是互补的建模原则:结构化分析和面向对象分析。结构化分析把软件看作信息转换器,辅助软件工程师识别数据对象、对象间的联系以及这些数据对象流经软件处理功能时转换的方式。面向对象分析就是检查定义为一组用例的问题域,尽量提取定义问题的类。每个类都有一组属性和操作,类和类之间有多种关联方式,并使用UML图建模。分析模型由四种建模元素构成:基于场景的模型、流模型、基于类的模型和行为模型。

  基于场景的模型从用户的角度描述软件需求。用例----参与者与软件之间的某个交互的叙述或模版驱动说明----是主要的建模元素。在需求获取过程中提取的用例,定义了某个交互的叙述或交互的关键步骤。用例的形式化和详细程度各不相同,但是最终结果为所有的其他分析建模活动提供了必须的输入。还可以使用活动图说明场景----一种类似于流程图的图形表现形式,描述在特定场景中的处理流。泳道图显示了处理流如何分配给不同的用户和类。

  流模型关注当数据对象通过处理函数转换时的流动。在结构化分析的过程中提取的流模型使用数据流图,即一种建模符号,描述当数据对象在系统中移动时的输入如何转变成输出。使用处理规格说明或叙述来说明转换数据的每一个软件功能。除了数据流图,该建模元素还说明了控制流,这是显示事件如何影响系统行为的一种表现形式。

  基于类的建模使用基于场景和面向对象流的建模元素中提取的信息确定分析类。可以使用语法分析从文本叙述中提取候选类、属性和操作,并制定了用于定义类的标准。CRC索引卡可以用于定义类之间的联系。此外,可以使用各种UML建模符号定义类之间的层次、联系、关联、聚合和以来。使用分析包可以将类分类和分组,在某种意义上为大型系统提供了更好的管理。

  前面三种分析建模元素提供了软件的静态视图,而行为建模描述了动态行为。行为模型使用基于场景、面向流和基于类的元素作为输入,从整体上表现分析类和系统的状态。要实现这一点,要识别状态,定义导致类或系统做出状态转移的时间,以及确认当转移完成时所发生的动作。状态图和顺序图是用于行为建模的UML表达方式。

设计工程

  在需求工程的首次迭代有结论时开始设计工程,软件设计的目的是应用一系列能够引导高质量的系统或产品的开发原则、概念和时间。设计的目标是创建一个软件模型,该模型将正确地实现所有的客户需求并为那些使用软件的人带来快乐。设计工程师必须从大量可供选择的设计中筛选并最终集中于一个最适合项目共利益者需求的解决方案。

  设计模型包括四种不同的元素。随着每个元素的开发,逐渐形成更全面的设计视图。体系结构元素使用各种信息以获得软件、软件子系统和构建的完整的结构标识,这些信息来自与应用域、分析模型和模式与风格的分类。接口设计元素为外部和内部的接口以及用户接口建模。构建级元素定义体系结构中的每一个模块(构建)。最后,部署级设计元素划分体系结构、构建和容纳软件的无力配置的接口。

进行体系结构设计

  软件体系结构提供了待建造系统的整体试图,它描述软件构建的结构和组织、构建的性质以及构建之间的连接。软件构建包括程序模块和程序操作的各种数据标识,因此数据设计是软件体系结构设计的一个有机部分。体系结构关注与早起设计决策,并提供了考虑多个可选系统结构有点的机制。

  数据设计将在分析模型中定义的数据对象转换成驻留与软件中的数据结构。描述数据对象的属性、数据对象间的关系以及他们在程序中的使用都会影响数据结构的选择。在更高的抽象层次上,数据设计可能导致数据库或数据仓库的体系结构的定义

  总体来讲,体系结构设计需要完成四个不同步骤:第一步系统不许标识在响应的环境中,也就是设计人员应该定义与软件交互的外部实体及其交互性质。一旦环境得到说明,设计人员应该确定一系列的顶层抽象,称之为原始模型,该原始模型可以表示本系统行为或者功能的关键元素。定义抽象后,设计开始向实现移动。在支持构件的体系结构环境中标识和描述这些构件。最后,开发体系结构的特定实例,在显示设接种验证所得的设计。

构件级设计建模

  根据所开发软件的特点,可以从两种不同的角度进行构件级设计。面向对象的观点注重细化来自于问题域和基础设施域的射击类。传统的观点细化三种不同的构建或模块:控制模块、问题域模块和基础设施模块。在这两种观点中,都需要应用那些导致高质量软件的基本设计原则和概念。当从过程角度考虑时,构件级设计采用了可复用的软件构建和设计模式,这些是基于构件级的软件工程的关键要素。

  面向对象的构建级设计是以类为基础的,在进行类的细化时,有许多重要的原则和概念可以指导软件工程师,如开关原则、依赖倒置原则、以及偶合兴和内聚性等概念都可以知道工程师构造具有可测性、可实现性和可维护的软件构件。在这种情况下,为了实施构件级设计,需要细化类,这通过一下方式达到:详细描述消息发送方式,确定合适的接口,细化属性并定义实现他们的数据结构,描述每个操作的处理流,标识类或构件级的行为等。在任何情况下,设计迭代都是必须的活动。

  传统构件级设计需要充分表示出数据结构、接口和程序块的算法以知道编程语言源码的产生。为达到这一要求,设计者采用设计表示方法来表示构件细节,可以使用图形、表格或者文本格式。

  结构化编程是一种过程设计思想,它限制描述算法细节时使用的逻辑构造数量和类型。结构化编程的目的是帮助设计师定义简单的算法,因而也就易于阅读、测试和维护。

完成用户界面设计

  三个重要的原则可用于指导有效的用户界面设计:置用户与控制之下;减少用户的记忆负担;保持界面一致性。为了得到符合这些原则要求的界面,必须实施有组织的设计过程。

  用户界面的开发开始于一系列的分析任务,包括用户确认,任务和环境分析/建模。用户分析确定了各类最终用户的概况,并且使用了从各种业务和技术资源收集来的信息。任务分析定义了用户任务和行为,其中使用了细化或面向对象方法、用户用例的应用、任务和对象的细化、工作流分析和层级任务表示等,来获得对人机交互的充分理解。环境分析标识出了界面必须操作的物质和社会结构。

  一旦任务被标识,就可以通过创建和分析用户场景来定义一组界面对象和动作。这为创建屏幕布局提供了基础,屏幕布局描述了图标的图形设计和放置、描述性屏幕文字的定义、窗口的规格说明和标题以及主、子菜单项规格说明。诸如响应时间、命令和动作结构、错误处理和帮助设施等设计问题应该在精华设计模型时考虑。

软件测试策略

  测试的目的是发现错误。为达到这个目标,需要计划和执行一系列的测试步骤:单元测试、集成测试、确认测试和系统测试。单元测试和集成测试侧重于严重模块的功能以及将模块集成到程序结构中区;确认测试用来展示软件需求的可追踪性;系统测试在软件集成为较大的系统时才进行。每个测试步骤都是通过有助于测试用例设计的一系列系统化测试技术来完成的。在每一步测试中,所考虑的软件抽象层次都提高了。

  搞质量的软泥吉安需要更系统的测试方法,所需要的是贯穿整个测试过程的整体策略,而且在方法学上应当与基于分析、设计和编码的系统化软件开发一样,进行周密的计划。

测试战术

  测试用例设计的主要目的是设计有可能发现软件错误的测试用例集。为了达到这个目标,可采用两个不同的测试用例设计技术:白盒测试和黑盒测试,这些技术也可应用于传统的软件系统和面向对象系统。

  白盒测试侧重于程序控制结构,设计测试用例以保证测试期间程序中所有的语句至少被执行一次,且所有的逻辑条件被检查。基本路径测试是一种白盒测试技术,利用程序图或图矩阵生成保证覆盖率的现行无关的测试集。条件和数据流测试进一步检查程序逻辑,循环测试补充其他的白盒测试技术,检查不同复杂度的循环。

  黑盒测试用来确认功能需求,而不考虑程序的内部结构。黑盒测试技术侧重于软件的信息域,通过划分程序的输入域和输出域来设计测试用例以提供完全的测试覆盖。等价划分将输入域划分为有可能检查软件特定功能的数据类。边界值分析则检查程序处理边界数据的能力。正交数组测试提供了一种高效的、系统的、使用少量的输入参数的测试方法。

  尽管面向对象测试的总体目标与传统软件的测试目标是相同的,但是面向对象软件测试策略和战术稍微有些不同。测试的视角放宽以包括分析模型和设计模型的评审。另外,测试的重点由子程序构建和模块转向类。类的测试设计使用多种方法:基于鼓掌测试、随机测试和划分测试。其中每种方法检查类中封装的操作。设计测试序列以保证检查有关操作。通过检查类的状态以确定是否存在错误。

  集成测试可以通过基于使用的策略来完成。基于使用策略从那些不使用服务类的类开始,以分层的方式构造系统。集成测试用例设计方法也使用随机测试和划分测试。另外,基于场景和从行为模型中生成的测试可用于测试类及其协作关系。测试序列追踪类间写作的操作流。

  特定测试方法包括广泛的软件能力和应用领域。图形用户界面、客户/服务器体系结构、文档与帮助设计以及实时系统,每种都需要特定的测试指导和测试技术。

产品度量

  软件度量为产品内部属性的质量评估提供了一种定量方法,从而可以使软件工程师在产品开发出来之前进行质量评估。度量为创建有效的分析模型、设计模型、可靠的代码和完全的测试提供必要的理解。

  分析模型的度量侧重于分析模型的三个成分:功能、数据和行为。设计度量考虑体系结构、构件级设计和界面设计问题。体系结构设计度量考虑设计模型的结构方面;构件级设计度量通过为内聚性、偶合兴和复杂性建立直接的测度,指示了模块质量情况;用户界面设计度量为GUI的易用性提供指示。

  面向对象系统的度量侧重于能应用于类与设计特征的测量:局部化、封装、信息隐藏、集成及对象抽象技术。这些特征使类具有唯一性。

posted @ 2013-12-05 14:53  xp19870106  阅读(285)  评论(0编辑  收藏  举报