目录
九、软件开发生命周期和工具
软件开发生命周期
软件定义时期:包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标具体可分成问题定义、可行性研究、需求分析等。
软件开发时期:就是软件的设计与实现,可分成概要设计、详细设计、编码、测试等。
软件运行和维护:就是把软件产品移交给用户使用。
软件系统工具
软件系统工具通常可以按软件过程活动将软件工具分为软件开发工具、软件维护工具、软件管理和软件支持工具。
软件开发工具:需求分析工具、设计工具、编码与排错工具、测试工具等。
软件维护工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具。
软件管理和软件支持工具:项目管理工具、配置管理工具、软件评价工具、软件开发工具的评价和选择。
按描述需求定义的方法可以将需求分析工具分为基于自然语言或图像描述的工具和基于形式化需求定义语言的工具。
十、McCabe度量法
软件的两种属性:
外部属性指面向管理者和用户的属性,可直接测量,一般为性能指标。
内部属性指软件产品本身的的属性,如可靠性等,只能间接测量。
McCabe度量法:又称为环路复杂度,假设有向图中有向边数为m,节点数为n则此有向图的环路复杂度为m-n+2。
注意:m和n代表的含义不能混淆,可以用一个最简单的环路来做特殊值记忆此公式,另外,针对一个程序流程图,每一个分支边(连线)就是一条有向边,每一条语句(语句框)就是一个顶点。
环路复杂度计算公式有三种:
1. m-n+2,10条边,8个节点 10-8+2 = 4 ;
2. 判定节点+1,1,3,6=3个节点,3+1 = 4 ;
3.封闭区域+1,也是三个封闭区域,3+1= 4 ;
十一、系统转换
11.1 遗留系统
遗留系统是指任何基本上不能进行修改和演化以满足新的变化了的业务需求的信息系统,它通常具有以下特点:
(1)系统虽然完成企业中许多重要的业务管理工作,但仍然不能完全满足要求。一般实现业务处理电子化及部分企业管理功能,很少涉及经营决策。
(2)系统在性能上已经落后,采用的技术已经过时。例如多采用主机/终端形式或小型机系统,软件使用汇编语言或第三代程序设计语言的早期版本开发,使用文件系统而不是数据库。
(3)通常是大型的软件系统,已经融入企业的业务运作和决策管理机制之中,维护工作十分困难。
(4)没有使用现代信息系统建设方法进行管理和开发,现在基本上已经没有文档,很难理解。
所以针对遗留系统一般采用的策略,如下:
11.2 系统转换
系统转换是指新系统开发完毕,投入运行,取代现有系统的过程,需要考虑多方面的问题,以实现与老系统的交接,有以下三种转换计划:
直接转换:现有系统被新系统直接取代了,风险很大,适用于新系统不复杂或者现有系统已经不能使用的情况。优点是节省成本。
并行转换:新系统和老系统并行工作一段时间,新系统经过试运行后再取代若新系统在试运行过程中有问题,也不影响现有系统的运行,风险极小,在试运行过程中还可以比较新老系统的性能,适用于大型系统。缺点是耗费人力和时间资源,难以控制两个系统间的数据转换。
分段转换:分期分批逐步转换,是直接和并行转换的集合,将大型系统分为多个子系统,依次试运行每个子系统,成熟一个子系统,就转换一个子系统。同样适用于大型项目,只是更耗时,而且现有系统和新系统间混合使用,需要协调好接口等问题。
数据转换与迁移:将数据从旧数据库迁移到新数据库中。有三种方法:
系统切换前通过工具迁移;
系统切换前采用手工录入;
系统切换后通过新系统生成 。
11.3 系统维护
系统的可维护性可以定义为维护人员理解、改正、改动和改进这个软件的难易程度,其评价指标如下:
(1)易分析性。软件产品诊断软件中的缺陷或失效原因或识别待修改部分的能力。
(2)易改变性。软件产品使指定的修改可以被实现的能力,实现包括编码、设计和文档的更改。
(3)稳定性。软件产品避免由于软件修改而造成意外结果的能力。
(4)易测试性。软件产品使已修改软件能被确认的能力。
(5)维护性的依从性。软件产品遵循与维护性相关的标准或约定的能力。
系统维护包括硬件维护、软件维护和数据维护,其中软件维护类型如下:
正确性维护:发现了bug而进行的修改。
适应性维护:由于外部环境发生了改变,被动进行的对软件的修改和升级。
完善性维护:基于用户主动对软件提出更多的需求,修改软件,增加更多的功能,使其比之前的软件功能、性能更高,更加完善。
预防性维护:对未来可能发生的bug进行预防性的修改。
十二、净室软件工程
净室软件工程是一种应用数学与统计学理论以经济的方式生产高质量软件的工程技术,力图通过严格的工程化的软件过程达到开发中的零缺陷或接近零缺陷。净室方法不是先制作一个产品,再去消除缺陷,而是要求在规约和设计中消除错误,然后以“净”的方式制作,可以降低软件开发中的风险,以合理的成本开发出高质量的软件。
在净室软件工程背后的哲学是:通过在第1次正确地书写代码增量,并在测试前验证它们的正确性,来避免对成本很高的错误消除过程的依赖。它的过程模型是在代码增量积聚到系统的过程的同时,进行代码增量的统计质量验证。它甚至提倡开发者不需要进行单元测试,而是进行正确性验证和统计质量控制。
净室软件工程(CSE)的理论基础主要是函数理论和抽样理论。
净室软件工程应用技术手段:
1.统计过程控制下的增量式开发。
2.基于函数的规范与设计。
3.正确性验证(CSE的核心)。
4.统计测试和软件认证。
净室软件工程在使用过程的一些缺点:
(1)CSE太理论化,需要更多的数学知识,其正确性验证的步骤比较困难目比较耗时。 (2)CSE开发小组不进行传统的模块测试,这是不现实的。
(3)CSE也会带有传统软件工程的一些弊端。
十三、基于构件的软件工程
基于构件的软件工程(CBSE)是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径。CBSE体现了“购买而不是重新构造”的哲学,将软件开发的重点从程序编写转移到了基于己有构件的组装。
13.1 构件特征
用于CBSE 的构件应该具备以下特征:
(1)可组装型:对于可组装的构件,所有外部交互必须通过公开定义的接口进行。同时它还必须对自身信息的外部访问。
(2)可部署性:软件必须是自包含的,必须能作为一个独立实体在提供其构件模型实现的构件平台上运行。构件总是二进制形式,无须在部署前编译。
(3)文档化:构件必须是完全文档化的,用户根据文档来判断构件是否满足需求。
(4)独立性:构件应该是独立的,应该可以在无其他特殊构件的情况下进行组装和部署,如确实需要其他构件提供服务,则应显示声明。
(5)标准化:构件标准化意味着在CBSE过程中使用的构件必须符合某种标准化的构件模型。
13.2 构件模型要素
构件模型定义了构件实现、文档化以及开发的标准,其包含的模型要素为:
接口。构件通过构件接口来定义,构件模型规定应如何定义构件接口以及在接口定义中应该包含的要素,如操作名、参数以及异常等。
使用信息。为使构件远程分布和访问,必须给构件一个特定的、全局唯一的名字或句柄。构件元数据是构件本身相关的数据,比如构件的接口和属性信息。
部署。构件模型包括一个规格说明,指出应该如何打包构件使其部署成为一个独立的可执行实体部署信息中包含有关包中内容的信息和它的二进制构成的信息。
构件模型提供了一组被构件使用的通用服务,这种服务包括以下两种:
平台服务:允许构件在分布式环境下通信和互操作。
支持服务:这是很多构件需要的共性服务。例如,构件都需要的身份认证服务。
中间件实现共性的构件服务,并提供这些服务的接口。
13.3 CBSE过程
CBSE过程是支持基于构件组装的软件开发过程,过程中的6个主要活动:系统需求概览、识别候选构件、根据发现的构件修改需求、体系结构设计、构件定制与适配、组装构件创建系统。
CBSE过程与传统软件开发过程不同点:
(1)CBSE早期需要完整的需求,以便尽可能多地识别出可复用的构件。
(2)在过程早期阶段根据可利用的构件来细化和修改需求。如果可利用的构件不能满足用户需求,就应该考虑由复用构件支持的相关需求,
(3)在系统体系结构设计完成后,会有一个进一步的对构件搜索及设计精化的活动。可能需要为某些构件寻找备用构件,或者修改构件以适合功能和架构的要求。
(4)开发就是将已经找到的构件集成在一起的组装过程。
13.4 构件组装
构件组装是指构件相互直接集成或是用专门编写的“胶水代码”将它们整合在一起来创造一个系统或另一个构件的过程。常见的组装构件有以下3种组装方式:
(1)顺序组装。通过按顺序调用己经存在的构件,可以用两个已经存在的构件来创造一个新的构件如上一个构件输出作为下一个构件的输入。
(2)层次组装。这种情况发生在一个构件直接调用自另一个构件所提供的服务时。被调用的构件为调用的构件提供所需的服务。二者之间接口匹配兼容。
(3)叠加组装。这种情况发生在两个或两个以上构件放在一起来创建一个新构件的时候。这个新构件合并了原构件的功能,从而对外提供了新的接口。外部应用可以通过新接口来调用原有构件的接口,而原有构件不互相依赖,也不互相调用。这种组装类型适合于构件是程序单元或者构件是服务的情况。
构件组装的三种不兼容问题(通过编写适配器解决) :
(1)参数不兼容,接口每一侧的操作有相同的名字,但参数类型或参数个数不相同。
(2)操作不兼容,提供接口和请求接口的操作名不同。
(3)操作不完备,一个构件的提供接口是另一个构件请求接口的一个子集,或者相反。
相关推荐
【系统架构设计师】九、软件工程(软件工程定义|软件过程模型|能力成熟度模型)-CSDN博客文章浏览阅读833次,点赞19次,收藏19次。历年真题考情:本章节每年单项选择考13分左右,下午案例、论文也会有涉及,在系统架构设计师中本章节绝对是重点中的重点。主要学习软件工程、需求工程、系统分析与设计、净室软件工程、基于构件的软件工程、软件项目管理等内容。很少涉及超纲题。https://shuaici.blog.csdn.net/article/details/140095679【系统架构设计师】九、软件工程(需求工程|系统分析与设计|DFD|DD|高内聚低耦合)-CSDN博客文章浏览阅读520次,点赞14次,收藏12次。系统设计方法:结构化设计方法,面向对象设计方法。系统设计的主要内容:概要设计、详细设计。概要设计基本任务:又称为系统总体结构设计,是将系统的功能需求分配给软件模块,确定每个模块的功能和调用关系,形成软件的模块结构图,即系统结构图。详细设计的基本任务:模块内详细算法设计、模块内数据结构设计、数据库的物理设计、其他设计(代码、输入/输出格式、用户界面)、编写详细设计说明书、评审。
https://shuaici.blog.csdn.net/article/details/140259207【系统架构设计师】九、软件工程(面向对象方法|逆向工程)-CSDN博客文章浏览阅读613次,点赞10次,收藏8次。面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和用以描述流程化处理过程的活动图等。软件的逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程。与逆向工程相关的概念有重构、设计恢复、再工程和正向工程。
https://shuaici.blog.csdn.net/article/details/140287834
历年真题练习
1.在对遗留系统进行评估时,对于技术含量较高、业务价值较低且仅能完成某个部门的业务管理的遗留系统一般采用的遗留系统演化策略是()策略。
A.淘汰
B.继承
C.集成
D.改造
2.在软件系统工具中,版本控制工具属于()
A.软件开发工具
B.软件维护工具
C.编码与排错工具
D.软件管理和软件支持工具
3.在软件系统工具中,软件评价工具属于()。
A.逆向工程工具
B.开发信息库工具
C.编码与排错工具
D.软件管理和软件支持工具
人工分割线-答案
1. C
2. B
3. D