软件评测师笔记(8)软件工程

软件工程的基本要素:方法、工具、过程

1. 信息系统生命周期

  • 系统规划阶段: 对组织的环境、目标及现行系统进行初步调查,根据组织目标和发展战略确定信息系统的发展战略,对建设新系统的需求做出分析和预测。同时考虑建设新系统所受各种约束,研究建设新系统的必要性和可能性。根据需要与可能,给出制建系统的备选方案 输出:可行性研究报告、系统设计任务书
  • 系统分析阶段: 系统分析阶段的任务是回答系统“做什么”的问题。根据系统设计任务书所确定的范围,对现行系统进行详细调查,描述现行系统的业务流程,指出现行系统的局限性和不足之处,确定新系统的基本目标和逻辑功能要求,即提出新系统的逻辑模型,分析阶段又称为逻辑设计阶段,这个阶段是整个系统建设的关键阶段,也是信息系统建设与一般工程项目的重要区别所在 输出:系统说明书
  • 系统设计阶段: 系统设计阶段要回答的问题是“怎么做”。该阶段的任务是根据系统说明书中规定的功能要求,具体设计实现逻辑模型的技术方案,也就是设计新系统的物理模型。这个阶段又称为物理设计阶段,可分为总体设计(概要设计)和详细设计两个子阶段。 输出:系统设计说明书(概要设计、详细设计说明书)
  • 系统实施阶段: 是将设计的系统付诸实施的阶段。这一阶段的任务包括计算机等设备的购置、安装和调试、程序的编写和调试、人员培训、数据文件转换、系统调试与转换等。这个阶段的特点是几个相互联系、相互制约的任务同时展开,必须精心安排、合理组织。系统实施是按实施计划分阶段完成的,每个阶段应写出实施进展报告。系统测试之后写出系统测试分析报告 输出:实施进展报告、系统测试分析报告
  • 系统运行和维护阶段: 系统投入运行后需要经常进行维护和评价,记录系统运行的情况,根据一定的规则对系统进行必要的修改,评价系统的工作质量和经济效益

2. 系统分析概述

业务需求:反映企业或客户对系统高层次的目标要求,通常来自项目投资人、客户、市场营销部或产品策划部门。通过业务需求可以确定项目视图和范围。

用户需求:描述的是用户的具体目标,或用户要求系统必须能完成的任务。即描述了用户能使用系统来做什么。通常采用用户访谈和问卷调查的方式,对用户的使用场景进行整理,从而建立用户需求。

软件需求:是指用户对系统在功能、行为、性能、设计约束等方面的期望是指用户解决问题或达到目标所需的条件或能力,是系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力,以及反映这些条件或能力的文档说明。

  • 功能需求:根据要求的活动来描述需要的行为。描述所开发的软件必须具备什么样的功能。
  • 非功能需求:是指产品必须具备的属性或品质,如可靠性、性能、响应时间、容错性和扩展性
  • 设计约束:也称为限制条件、补充规约。这通常是对解决方案的一些约束说明

3. 系统设计概述

系统设计主要目的:为系统制定蓝图,在各种技术和实施方法中权衡利弊,精心设计,合理地使用各种资源,最终勾画出新系统的详细设计方法。

系统设计方法:结构化设计方法,面向对象设计方法。

系统设计的主要内容:概要设计、详细设计。

概要设计基本任务:又称为系统总体结构设计,是将系统的功能需求分配给软件模块,确定每个模块的功能和调用关系,形成软件的模块结构图,即系统结构图。

详细设计的基本任务:模块内详细算法设计、模块内数据结构设计、数据库的物理设计、其他设计(代码、输入/输出格式、用户界面)、编写详细设计说明书、评审。

系统设计基本原理

  • 抽象化;
  • 自顶而下,逐步求精;
  • 信息隐蔽;
  • 模块独立(高内聚,低耦合)

系统设计原则

  • 保持模块的大小适中
  • 尽可能减少调用的深度;
  • 多扇入,少扇出;
  • 单入口,单出口;
  • 模块的作用域应该在模块之内;
  • 功能应该是可预测的。

良好的设计模式:高内聚低耦合

内聚:模块内部关联程度

耦合:模块与模块之间的关联程度

  • 内聚程度从低到高如下

偶然内聚:一个模块内的各处理元素之间没有任何联系

逻辑内聚:模块内执若干个逻辑上相似的功能,通过参数确定该模块完成那一个功能

时间内聚:把需要同时执行的动作组合在一起形成的模块

过程内聚:一个模块完成多个任务,这些任务必须按照指定的过程执行(关键字:指定顺序、指定次序)

通信内聚:模块内的所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或者产生相同的输出数据(关键字:数据结构、相同输入或者相同输出)

顺序内聚:一个模块中的各个处理元素都密切相关同一个功能且必须顺序执行,前一个功能元素的输出就是下一个功能元素的输入

功能内聚:最强的内聚,模块内的所有元素共同作用完成一个功能,缺一不可

  • 耦合程度从低到高如下表所示

无直接耦合:两个模块之间没有直接的关系,他们分别从属于不同模块的控制与调用,不传递任何信息

数据耦合:两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言中的值传递(关键字:数据、参数)

标记耦合:两个模块之间传递的是数据结构(关键字:数据结构、参数表)

控制耦合:一个模块调用另一个模块时,传递的是控制变量,被调用模块通过该控制变量的值有选择的执行模块内的某一功能

外部耦合:模块之间通过软件之外的环境链接(如I/O将模块耦合到特定的设备、格式、通信协议上时)

公共耦合:通过一个公共数据环境相互作用的那些模块之间的耦合

内容耦合:当一个模块直接使用另一个模块的内部数据,或通过非正常入口转入另一个模块内部时(关键字:非正常入口、直接使用、部分代码重合)

4. 系统运行与维护

系统维护包括硬件维护、软件维护和数据维护,其中软件维护类型如下:

  • 正确性维护:发现了bug而进行的修改。(关键字:bug、缺陷)
  • 适应性维护:由于外部环境发生了改变,被动进行的对软件的修改和升级。(关键字:外部改变)
  • 完善性维护:基于用户主动对软件提出更多的需求,修改软件,增加更多的功能,使其比之前的软件功能、性能更高,更加完善。
  • 预防性维护:对未来可能发生的bug进行预防性的修改。(关键字:预防)

5. 结构化开发

结构化方法也称为生命周期法,是一种传统的信息系统开发方法,由结构化分析(Structured Analysis,SA)、结构化设计(Structured Design,SD)和结构化程序设计(Structured Programming,SP)三部分有机组合而成,其
精髓是自顶向下、逐步求精和模块化设计。

5.1 结构化分析

结构化分析:结构化分析是一种建模技术,其建立的分析模型的核心是数据字典。

数据字典(DD):描述了在目标系统中使用和生成的所有数据对象。数据字典下有四类条目:数据流、数据项、数据存储和基本加工

数据流图(DFD):数据流图描述数据在系统中如何被传送或变换,以及描述如何对数据进行变换的功能(子功能),用于功能建模

数据流:由一组固定成分的数据组成,表示数据的流向。在DFD中,数据流的流向必须经过加工

加工:描述了输入数据流到输出数据流之间的变换,描述加工的方式有决策树、决策表和结构化语言。数据流图中常见的三种错误

  • 有输入但是没输出,成为黑洞
  • 有输出但是没输入,成为奇迹
  • 输入不足以产生输出,成为灰洞

数据存储:用来存储数据,可以代表文件、文件的一部分、数据库的元素等

外部实体:指存在于软件系统之外的人员或组织,它指出系统所需数据的源和系统所产生数据的归宿地

实体联系图(ERD):描述数据对象及数据对象之间的关系,用于数据建模

状态-迁移图(STD):描述系统对外部事件如何响应以及如何动作,用于行为模型

5.2 结构化设计

系统设计方法:结构化设计方法,面向对象设计方法

体系化结构设计主要包括:体系结构设计、数据设计、接口设计、过程设计

  • 体系结构设计:定义软件的主要构造元素及其之间的关系。依据系统规格说明、数据流图进行
  • 数据设计:确定软件涉及的文件系统的结构及数据库的表结构。依据实体联系图进行
  • 接口设计:描述用户界面、软件和其他硬件设备、其他软件系统及使用人员的外部接口,以及各种结构之间的内部接口。依据数据流图进行
  • 过程设计:确定软件各个组成部分内的算法及内部数据结构,并选定某种过程的表达形式来描述各种算法。依据加工规格说明进行

6. 软件过程模型

6.1 瀑布模型(关键字:需求明确清晰定义)

瀑布模型是一个经典的软件生命周期模型一般将软件开发分为:可行性分析(计划)、需求分析、软件设计(概要设计详细设计)、编码(含单元测试)、测试、运行维护等几个阶段。

2024-05-08T02:19:40-giusjvup.png

6.2 螺旋模型(关键字:风险、大型项目)

螺旋模型是一个演化软件过程模型,将原型实现的迭代特征与线性顺序(瀑布)模型中控制的和系统化的方面结合起来。在螺旋模型中,软件开发是一系列的增量发布。

2024-05-08T02:23:15-gqykigls.png

6.3 V模型(关键字:需求明确、需求变更不频繁)

V模型从整体上看起来,就是一个V字型的结构,由左右两边组成。左边的下画线分别代表了需求分析、概要设计、详细设计、编码。右边的上画线代表了单元测试、集成测试、系统测试与验收测试。

2024-05-08T02:25:19-qvbaqwvc.png

6.4 原型化模型(关键字:对用户需求动态响应、逐步纳入、需求不明确且规模不太大)

原型化模型第一步就是创建一个快速原型,能够满足项目干系人与未来的用户可以与原型进行交互,再通过与相关干系人进行充分的讨论和分析,最终弄清楚当前系统的需求,进行了充分的了解之后,在原型的基础上开发出用户满意的产品。

6.5 增量模型、演化模型(关键字:先开发核心功能、每一次增量都可以交付)

增量模型:首先开发核心模块功能,而后与用户确认,之后再开发次核心模块的功能,即每次开发一部分功能,并与用户需求确认,最终完成项目开发,优先级最高的服务最先交付。

2024-05-08T02:30:47-fjyqgiuq.png

6.6 喷泉模型(关键字:面向对象)

喷泉模型以用户需求为动力,以应用对象为驱动,适合于面向对象的开发方法

7. 敏捷开发

结对编程:一个程序员开发,另一个程序在一旁观察审查代码,能够有效的提高代码质量,在开发同时对代码进行初步审查,共同对代码负责。

自适应开发:强调开发方法的适应性(Adaptive)。不象其他方法那样有很多具体的实践做法,它更侧重为软件的重要性提供最根本的基础,并从更高的组织和管理层次来阐述开发方法为什么要具备适应性。(关键字:设立目标但是不描述如何达到)

水晶方法:每一个不同的项目都需要一套不同的策略、约定和方法论。

特性驱动开发:是一套针对中小型软件开发项目的开发模式。是一个模型驱动的快速迭代开发过程,它强调的是简化、实用、易于被开发团队接受,适用于需求经常变动的项目。(关键字:需求经常变动)

极限编程XP:核心是沟通、简明、反馈和勇气。因为知道计划永远赶不上变化,XP无需开发人员在软件开始初期做出很多的文档。XP提倡测试先行,为了将以后出现bug的几率降到最低。极限编程是敏捷方法中最普遍的一种,由价值观、原则、实践和行为四个部分组成。是激发开发人员创造性、使得管理负担最小的一种技术。(关键字:测试先行)

四个价值观:沟通、简单性、反馈、勇气

五大原则:简单性假设、快速反馈、逐步修改、提倡更改、优质工作

十二个最佳实践:计划游戏,小型发布,系统隐喻,简单设计,测试驱动,重构,结对编程,集体所有权,持续集成,每周工作40小时,现场客户,编码标准

并列争球法SCUM:是一种迭代的增量化过程,把每段时间(30天)一次的迭代称为一个“冲刺”,并按需求的优先级别来实现产品,多个自组织和自治的小组并行地递增实现产品。(关键字:多个小组)

8. CMM(能力成熟度模型)

  • 初始级别:该级别表示软件开发过程尚未被规范化。在这种状态下,软件开发项目极度依赖个别的英雄式人物。
  • 可重复级:建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功
  • 已定义级:管理和工程两方面的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准软件过程
  • 已管理级:制定了软件过程和产品质量的详细度量标准
  • 优化级:加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈使过程能不断持续更新改进

9. CMMI(能力成熟度模型集成)

  • 初始级:过程不可预测且缺乏控制
  • 已管理级:过程为项目服务
  • 已定义级:过程为组织服务
  • 定量管理:过程已度量和控制
  • 优化级:集中于过程改进和优化
消息盒子

# 暂无消息 #

只显示最新10条未读和已读信息