《软件工程复习笔记.pdf》由会员分享,可在线阅读,更多相关《软件工程复习笔记.pdf(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、CH0 概论 本章重点:软件工程的定义 什么是软件退化 软件与程序的区别 软件工程的组成 客户和用户的定义 常见的软件神话,他们错在何处?软件工程的目标有哪些?软件工程的目标中最重要的是哪个?软件过程是一种层次化的技术,其层次结构是什么样的?软件是想改就能改的吗?软件开发时是不是越早开始写代码越好 1.为什么需要软件工程:个人、企业和政府在日常活动、管理和战略战术决策时越来越依赖于软件,因此必须确保软件的质量;鉴于软件开发成本巨大,因此必须确保开发出来的软件能够满足目标用户的真实要求;随着软件越来越复杂,其开发和实际也越来越复杂,必须确保开发活动的有序、有效;随着软件用户数量和寿命的增加,对其
2、适应性、可扩展性的要求也在增加。必须确保软件具备良好的可维护性。2.软件工程定义 最经典的定义:软件工程是对合理工程原则的建立和使用,其目的是为了经济地获得可靠的、可以在实际机器上高效运行的软件。IEEE 给出的定义:将系统化的、规的、可量化的方法应用于软件的开发、运行和维护。即将工程化方法应用于软件。课程给出的定义:软件工程是为了经济的开发出高质量的软件,并有效的维护它,将工程、管理手段与技术手段相结合应用于软件的方法的集合 目的:经济的开发出高质量的软件,并有效的维护它 方法:将工程、管理手段与技术手段相结合 3.软件工程要实现多个目标,这些目标之间的重要性不一样价值观问题 软件工程的目标
3、如下:又好又快 保证软件质量 提升开发效率、降低开发成本 提高维护效率、降低维护成本 4.软件的定义:计算机系统中与硬件相互依存的另一部分,是程序、数据及其相关文档的完整集合。软件是逻辑的而非物理的系统元素。5.软件的特点:没有物理实体 设计开发成本高昂,生产复制则几乎是零成本的 软件不会磨损、老化,但是也会退化 软件退化:随着软件的维护升级,软件结构逐渐偏离原有设计并导致了软件质量的下降,称为软件退化。软件发展的速度落后于硬件和实际需求 软件占计算机系统成本的比重越来越大 软件开发尚未真正实现标准化 6.软件与程序的区别:软件不仅仅只是计算机程序 7.软件工程组成:软件工程是一种层次化的技术
4、 质量优先是整个软件工程的核心价值观(以质量为中心)(软件)过程:由为建造、维护高质量软件所需要完成的一系列相互关联的活动组成的框架,即形成软件产品的一系列步骤。过程是软件工程管理和实施的基础。方法:软件开发和维护过程中一些具体问题的最佳解决手段。方法是软件工程的核心手段 工具:为实现软件工程中各种过程和方法的自动化和半自动化而开发的程序系统。工具是软件工程的效率倍增器。8.软件工程必须重视人员的培训。9.软件工程中的相关人员:用户 User:软件使用者。目的是使用软件解决问题或提高工作效率。客户 Customer:为软件付钱的人。他们的目标是增加利润,或只是使业务运作更为有效。软件开发人员
5、Developer:开发并维护软件的人。开发管理人员 Manager:管理软件开发过程的人员。其目标是花最少的钱满足客户要求 10.软件神话:关于软件及其开发过程的一些错误说法。神话一:因为软件是由弹性的,因此可以很容易的适应需求变化。(修改软件要付出成本)神话二:如果我们无法按时完成计划,可以通过增加电脑和程序员人数赶上速度。神话三:软件过程就是严格按照完成的软件开发标准和规程来开发软件。(错在把手段当成了目的,应该根据项目实际需要,灵活安排实际的软件过程活动)神话四:当程序编写完成并交付给客户后,任务就完成了,因此应该尽快开始编写代码。神话五:软件工程会导致我们产生大量无用的文档,因此降低
6、了效率。(创建文档的目的是保证开发软件的质量)文档最重要的作用是(1)促使开发者认真思考和(2)促进交流。CH1 软件过程与方法 本章重点:过程管理的任务 过程的定义 五个核心软件活动 几种软件过程模型,其活动间的顺序关系是怎样的(顺序、迭代、演化还是并行?)原型及其作用 敏捷开发的价值观 敏捷开发的基本推动力 1.过程管理:辨识出一连串的商业活动,并针对这些活动的作业流程进行管理。2.过程管理的目标:确保企业中各种商业活动的执行成果能具有一定的水平和精确度。确保能持续改善活动的进行方式,串连活动的作业流程 让企业能保持市场上的竞争力 3.过程管理的任务:寻找、发现企业中有价值的业务过程(过程
7、识别)发现、去除非增值活动,简化过程;通过合理安排活动顺序提高过程效率(过程梳理和优化)对过程各个活动进行规,形成标准(过程固化)对过程执行情况加以监控(过程监控)寻找过程中的错误、薄弱、低效环节并加予以纠正(过程改进)4.过程:也称业务过程,指为客户创造价值的一系列相互关联、有组织的活动或任务的集合。管理学意义上的过程是有明确目的性的:为客户(或企业)创造价值 5.(业务)过程的特点:可确定性:有明确的输入、输出和边界;顺序:构成过程的活动,必须在时间和空间里具有确定的顺序;客户:过程的结果必须有接收者客户。增值:在过程中发生的转换必须为接收者增加价值,无论接收者是在过程的上游还是下游。6.
8、软件过程:构建、维护软件产品时所执行的一系列步骤(活动、动作和任务)的集合。活动:组成软件过程的最主要的宏观步骤。例如:需求分析、设计、编码、发布等。动作:对活动进一步细分的得到的步骤。例如设计活动,可以细分分为总体设计、模块设计等多个动作。任务:具体的工作步骤 7.核心软件活动:所有合理的软件过程都包含一些共同的必要的活动(步骤),这些活动我们称为核心软件活动。8.软件过程通常包括下列五个核心软件活动:需求分析:通过与客户的沟通协作,了解客户的真实需要,决定软件特性和功能,制定项目目标。建模(设计):通过构造软件模型(通常是图形形式的模型)的方法来研究、理解具体问题,(向客户和其他开发人员)
9、展现具体解决方案。编码与测试:实际编写代码、验证代码的正确性 运行与部署:将软件交付用户使用。通常用户会对软件进行一段时间的试用,并给出反馈意见 维护:修复用户使用过程中发现的软件缺陷,或者根据用户使用意见对软件进行改进 9.在实际软件过程中往往还存在一些贯穿整个过程的普适性活动,以帮助软件团队管理和控制项目进度、质量、变化和风险。项目管理的角度说,这些“普适性活动”实质上是项目管理活动。常见普适性活动包括:策划:创建软件项目的“地图”,以指导团队的项目旅程。通常包括:需要执行的具体任务、每个任务需要的资源分配,每个任务的具体产品,以及工作计划等 项目跟踪和控制:定期评估项目进度情况,采取必要
10、措施确保项目按期完成 风险管理:对可能影响项目进度和产品质量的风险进行评估,并采取必要措施来降低风险 测量:定义和采集关于过程、项目和产品的度量数据,以帮助管理和改进其他活动。例如:开发人员的生产率等 软件质量保证:确保软件质量的措施和活动 软件配置管理:管理软件(代码、配置信息及其文档)的版本变化历史 可复用管理:建立产品(代码等)复用的机制和标准(如公用函数库等)人员培训:对相关人员进行必要的培训,使其具备必要的知识和技能,掌握相关工具的使用方法 10.软件过程模型是从一特定角度提出的软件过程的简化描述。过程流(模型)是最主要的一类软件过程模型。过程流描述了如何在执行顺序和执行时间这一层面
11、上,组织软件过程中(除维护之外的)的活动。11.几种主要的过程流及典型过程模型:线性过程流:瀑布模型 迭代过程流:原型开发模型 演化过程流:螺旋模型 并行过程流 混合过程流:增量模型 12.瀑布模型:又称软件生存周期模型,瀑布模型严格按照软件生存周期各个阶段来进行开发,上一阶段的输出即是下一阶段的输入,并强调每一阶段的严格性。每一阶段的任务完成后,都必须对其阶段性产品(主要是文档)进行评审,通过后才能开始下一阶段的工作。是一种以文档作为驱动的模型 软件生存周期:软件从定义开始,经过开发、使用和维护,直到最终退役的全过程称为软件生存周期。瀑布模型将软件生命周期分成软件定义、软件开发、运行、维护及
12、退役五个时期组成。优点:可强迫开发人员采用的规方法;严格规定了每一阶段必须提交的文档;要求每一阶段交付之产品都必须经过质量保证小组的仔细审查;清晰区分了逻辑设计与物理设计,尽可能推迟程序的物理实现;提供了软件开发的基本框架,有利于大型软件开发过程中人员的组织、管理,有利于软件开发方法和工具的研究与使用,因此,在软件工程中占有重要的地位。缺点:要求在项目开始的需求分析阶段就能够完整的得到客户的所有需求,现实中很难实现 客户要到项目接近尾声的验收阶段才能够看到实际的程序执行效果。如果这时才发现程序和客户实际要求有重大偏差,就可能会造成重大的损失 13.原型开发模型:原型,就是软件的一个模拟的可执行
13、界面。用户可在原型上进行操作,直观的感受软件的执行效果。原型开发就是软件开发人员根据用户提出的软件基本需求快速开发一个原型,向用户展示软件界面和功能。在征求用户对原型的评价意见后,进一步改进、完善原型,如此迭代,直到软件开发人员和用户都确认软件系统的需求并达成一致的理解为止。优点:原型的开发和评审时系统分析员和用户/客户共同参与的迭代过程,有利于双方充分理解和沟通。比瀑布模型更符合人们认识事物的过程和规律,项目成员能够更清晰的理解用户实际需求。如果原型的开发语言和实际软件相同,那么它的若干高质量的程序片段和开发工具也可被用于工作程序的开发。快速原型的开发途径:原型仅仅是需求分析的一部分,因此必
14、须尽可能快速的开发原型。建造原型应尽量采用相应的软件工具和环境,并尽量采用软件重用技术,在运行效率方面可做出让步,以便尽快提供。同时,原型应充分展示软件系统的可见部分,如人机界面、数据的输入方式和输出格式等。缺点:原型开发模型要求开发者和用户在一段时间紧密配合、共同参与完成原型系统的开发,特别是需要用户的及时反馈。如果用户对此不够重视,那么原型开发的意义也就大打折扣了。原型的快速构造容易让用户误以为实际软件的开发也是可以很容易、很快就完成的,或者要求开发者直接将原型稍加修改使之成为实际运行的产品。而实际上,为了快速开发原型,开发者往往会牺牲软件质量和可维护性而采取了最快速的开发手段,因此实际的
15、高质量软件产品需要抛弃原型从头开发。如果不能够充分的向客户解释这一点的话,就容易导致软件开发人员和用户之间产生矛盾。原型开发模型最大的缺点在于,它仍然没有解决需求变化的问题。14.螺旋模型:一种演化式的软件过程模型。结合了原型开发模型的迭代性和瀑布模型的系统性和可控性特点。螺旋模型的每一个迭代周期都包括计划(需求定义)、风险分析、工程实现和评审 4 个阶段。螺旋模型是一个风险驱动的模型,每个迭代周期都不应该太长(一般是 2-8 周左右)螺旋模型优点:支持用户需求的动态变化 原型可看作形式的可执行的需求规格说明,易于为双方共同理解;开发者和用户共同参与软件开发,可尽早发现软件中的错误。螺旋模型特
16、别强调原型的可扩充性和可修改性。既保持瀑布模型的系统性、阶段性,又可利用原型评估降低开发风险。螺旋模型为项目管理人员及时调整管理决策提供了方便,进而可降低开发风险 螺旋模型缺点:如果每次迭代的效率不高,致使迭代次数过多,将会增加成本并推迟提交时间 使用该模型需要有相当丰富的风险评估经验和专门知识,要求开发队伍水平较高 适用场合:支持需求不明确、特别是大型软件系统的开发,并支持面向规格说明、面向过程、面向对象等多种软件开发方法 15.增量过程模型:螺旋模型基础上的改进。采用并行方式 解决阻塞带来的浪费问题 16.敏捷开发提出的背景:传统过程开发模型都是从管理者的角度来看待软件开发,存在重大缺陷:
17、忽视变化的存在;忽视了软件开发是一个智力密集型的工作;忽视了人与人之间的直接交流;过分注重过程。17.敏捷开发宣言:敏捷开发的价值观 个人与交流 胜于 开发过程和工具 可运行的软件 胜于 面面俱到的文档 客户协作 胜于 合同谈判 响应变化 胜于 按部就班遵循计划 18.敏捷的基本推动力:普遍存在的变化 19.敏捷鼓励:使沟通更便利的团队结构和协作态度 快速交付可运行产品而非中间文档 客户以开发团队中的一员的身份参与项目 根据实际情况灵活调整项目计划 20.敏捷开发非常强调人的因素在软件项目开发中的重要性 敏捷开发强调团队及其成员应该具备下列要素:基本能力、共同目标、合作、决策能力、相互尊重和信
18、任、不断学习、自我组织。21.敏捷过程模型:极限编程(eXtreme Programming,XP)Scrum 特征驱动开发(FDD)精益软件开发(LSD)统一过程(AUP)22.极限编程:XP 定义了五个有重要意义的要素:沟通:强调口头的、面对面的交流 简明:为了简化设计,只对当前的需要做设计。当设计需要改进时,使用重构来实现。反馈:通过测试、增量交付和持续集成等手段,快速获得反馈 鼓励:鼓励符合极限精神的实践。例如,尽可能减少过度设计。尊重:敏捷团队应在部成员之间,以及部成员与其他利益相关者之间,灌输相互尊重的思想。减少推诿和扯皮,增加协作。23.Scrum 是一种迭代式增量软件开发过程
19、冲刺:一个 15-30 天周期 在冲刺的过程中,没有人能够变更冲刺订单 24.软件过程领域最新的流行趋势是 DevOps,强调开发和运营的密切协作,运营部门在软件的产品设计、开发和测试过程中都要深度介入。DevOps 也强调最新工具,如持续集成等自动化工具的使用,以提高工作效率并实现快速反应。25.小结:需要将软件开发划分为一系列规化的步骤,使之便于实施和管理。软件开发需要客户的深入参与和合作 软件开发的主体是人,必须重视人的需求和交流沟通 软件开发过程必须具备高度的灵活性,以适应变化。总之,软件开发过程在不断引入新的技术和工具的同时,对管理者也提出了越来越高的要求 CH2 需求分析概述 本章
20、重点:软件需求的概念 需求分析的目标 功能需求与非功能需求 企业管理各个层级对信息系统的需求主要是什么?企业管理信息系统可分为哪两大模块,各自对应哪个管理层级的需求 需求分析的五个阶段(都做什么);需求跟踪与需求状态跟踪各自都做什么?1.导致项目不能按计划完成的最重要的三个原因是:缺少用户反馈(12.8%)需求不完整(12.3%)需求变化(11.8%)软件需决定软件开发成败的关键因素 2.(软件)需求(Requirement):为了解决客户的特定问题,软件所必须提供的能力和必须遵从的约束条件。3.需求分析:项目人员确定用户需求所需要做的工作 需求分析的目标:弄清楚客户/用户究竟想用软件来干什么
21、。弄清楚用户究竟想怎么用。让客户明确他最终能得到什么样的产品 需求分析的成果:软件需求说明书 4.需求通常分为功能需求和非功能需求两大类 功能需求:描述系统应该提供的功能或服务,通常涉及用户或外部系统与该系统之间的交互。即软件必须提供的能力。业务需求、用户需求、功能需求、系统需求 非功能需求:从各个角度对系统的约束和限制,反映了应用对软件系统质量和特性的额外要求,例如响应时间、数据精度、可靠性、开发过程的标准等。即软件的约束。非功能需求难以被测试和雁阵;容易被忽视。业务规则、质量属性、外部接口、约束条件 5.除非必要,否则需求中不应该包含技术细节 6.软件需求的固有困难:用户不一定清楚的知道他
22、到底想要什么;软件开发人员不了解项目的业务背景知识;日常交流所用的语言文字本身具有很大的模糊性;用户企业不同部门之间需求彼此矛盾;用户的需求经常会发生变化 7.需求工程就是:形式化、工程化的需求分析 8.软件需求工程的五个阶段 需求获取:软件开发人员通过与用户之间的有效沟通,了解用户对软件真实需要的过程。本质:开发人员与用户间的沟通 目的:了解用户对软件的真实需要 需求获取的容:客户的战略 相关的业务过程 相关规章制度、业务规则等 相关票据、记录、报表等 业务规则:描述业务处理可能遇到的情况及相应的处理措施或约束。需求获取方法:个别访谈、会议、调查、观察 需求分析与协商:对需求获取采集的信息进
23、行汇总、分析,形成详细、规的需求描述。需要获取的成果最终必须以可见成果的形式描述出来 需求描述工具:用例:一段用文字表述的故事,阐述用户如何使用软件来实现某个具体的业务目标。相关工具:系统围图/表 业务流程图(活动图)用户目标表:用表格形式汇总展现系统所涉及的全部用例及其优先级(用例的目录)用户情况表 数据流模型:用图形方式表示数据的输入、输出和加工过程。需求规约:形成正式需求分析文档的过程 软件需求说明书(软件需求规约,SRS)是分析任务的最终产物,是用户和开发者双方对于软件产品要求的正式约定。需求说明书模板:第一章 目标与围 1a 项目的整体围与目标是什么?1b 利益相关者(Who car
24、es?)1c 项目围包括什么?什么不在项目围?第二章 词汇表 第三章 用例 3a 项目的主要参与者与他们的目标 3b 概要级别用例(以主要参与者的视角来分别描述各个主要的业务流程)3c 用户目标级别用例(具体描述主要参与者如何使用系统来实现他们的目标)3d 用户目标表 第四章技术要求 第五章其他要求 第六章人工备份、法律、政治与组织问题 需求验证 需求管理:是一组用于帮助项目组在项目进展中的任何时候去标识、控制和跟踪需求的活动 目的:保障需求说明书与产品的一致性 控制需求变更对项目开发的影响 使需求活动与计划保持一致 容:变更控制 版本控制 需求跟踪 需求状态跟踪 需求变更:在软件需求基线已经
25、确定之后又要添加新的需求或进行较大的需求变动。需求变更管理:由专人统一负责接收、评估、审批和实施需求变更请求 需求变更管理的目的:确保需求变更的利大于弊 需求跟踪:在软件开发的全过程中,记录和维护每项需求与软件其他系统元素(如设计模块、程序代码、测试用例等等)之间的关系 作用:建立与维护“需求其他需求-设计编程测试”之间的一致性 方式:正向跟踪、逆向跟踪、双向跟踪 目的:确保所有的工作成果最终符合用户需求。当需求发生变更时能够快速定位所有被影响的系统元素 需求跟踪矩阵(RTM)是表示需求和其他系统元素之间的联系链的一种常用工具 需求状态跟踪:在项目整个生命周期中对项目所处状态(即其在当前时刻的
26、情况)进行追踪 目的:确保用户提出的每一项需求都得到了妥善的处理 工具:单独的需求状态跟踪表;也可合并到需求跟踪矩阵中 9.管理层级与信息系统 还要关注:岗位与权限、数据量 10.不能说的秘密:需求分析必须重视利益干系人 CH3 需求分析场景分析与用例 本章重点:用例的组成部份及其写法 各用例相关工具的作用 用例图的画法 活动图的画法 基于用例的场景分析 1.需求分析的两个最主要的视角:业务(流程)视角 绩效(信息)视角 2.目前的主流是使用以用例为核心的一套方法和工具来描述企业业务 用例(Use Case):一种通过描述用户的使用场景来获取需求的技术。客观(第三者视角)描述使用场景 对业务场
27、景中有明确目标的参与者之间的行为描述;用例是利益相关方关于(待开发)系统行为的契约。3.用例的组成 用例名称 动词、动词+宾语结构词组或简短的主谓宾结构短语 能够清晰的反映用例的功能或要实现的目标 关注:绩效指标体系和数据流 关注:用户使用场景和业务流程 参与者及其目标 参与者(Actor)是在用例中具有行为或职责的人事物。参与者可能是人,也可能是某个组织(部门、企业),还可能是某个软硬件系统。待分析的系统(SuD)一般不会作为参与者。主要参与者:SuD 的主要服务目标或使用对象。使用 SuD 实现其目标。协助参与者:为 SuD 提供服务的参与者 利益相关者及其关注点 间接受用例影响的组织或个
28、人,我们称之为利益相关者。SuD 必须确保利益相关者的利益得到了切实的保护 围与目标级别 围界定了用例中要分析的系统 目标级别:描述用例中主要参与者的目标层级 概要:描述企业业务流程或用户流程的总体步骤,如采购流程、研发流程等(可能跨度很长;可能涉及多个非系统参与者)用户目标:业务流程中的某一步,在这一步骤中,主要参与者使用待开发系统来实现一个具体的目标。如(超市)用户结账等。子功能:对用户目标级别用例中的单个步骤的进一步描述,如(超市)用户刷卡付款等。判断:(图书馆管理系统)读者登录 (图书馆管理系统)读者借书 (超市管理系统)用信用卡支付 (超市管理系统)处理退货 (超市管理系统)寻找供货
29、商 (ATM 系统)使用 ATM 取现金 (ATM 系统)使用 ATM 修改密码 (ATM 系统)使用 ATM 办理业务 前置条件:在用例中的场景开始之前,必须保证为真的条件 用例中不要出现对前置条件进行检查的步骤 可以不写 触发条件:导致用例中的场景开始的事件。基本保证:在用例执行后,系统对各利益相关者的利益的最小保证 无论用例最终执行是否成功,系统都必须确保基本保证中的承诺。成功保证:承诺如果用例成功执行完毕,利益相关者的哪些利益将会得到满足(不重复基本保证中的容)主成功场景和步骤 扩展描述了用例中的其他所有场景或者场景分支片段 为什么扩展是需求中最容易出问题的部分?扩展中主要是各种异常或
30、错误情况的处理。这往往是业务人员并不熟悉的。不熟悉就会导致遗漏。一个只能处理正常情况的系统显然不是一个完善的系统。即使扩展中的异常情况系统最终不处理或无法处理,预先把它写出来,甲乙双方充分讨论,能够避免以后的扯皮 触发条件:对应于主成功场景中的某个步骤的特殊情况。在该步骤中,如果满足该触发条件,则改为执行扩展场景。(注意序号的对应,数字代表步骤,字母代表触发条件)目标:消除异常或特殊情况,以继续执行主成功场景 场景结束:通常是重新并入主成功场景(缺省情况),或者是中止处理(即处理失败)其他、特殊需求(与用例直接相关的非功能性需求、质量属性或约束)、技术和数据变元表(用户对于系统实现的特殊技术要
31、求)因为用例中避免设计和实现细节、发生频率、优先级、未决问题 4 用例相关工具 项目愿景:用一两句话对项目目标做出的概括性描述。帮助项目团队成员建立起共同的项目目标 设计围图:以直观图形的方式描述系统围。通常使用 UML 用例图。In/Out 表:一个简单的工作主题列表,用于帮助讨论和确定系统围。用户目标列表:汇总列出系统的主要使用者、目标及其优先级 用户情况表:汇总列出系统所有使用者的背景、技能水平等情况。用例应该让用户来写。5.用例图:用于描绘用例、系统、参与者及其之间的关系(语境图)主要参与者系统(多个用例)协助参与者 作用:展示系统边界 展现关系 参与者泛化:参与者 A 泛化参与者 B
32、,表明参与者 B 参与的所有用例也被参与者A 参与 6.活动图(本质是流程图)基本组成元素:活动:流程中的一个步骤。动作:基础的、逻辑上部不能再细分的活动,是 UML活动图中的最小 分支与合并 分叉与汇合:显示并行线程 都会发生、但发生次序任意(一个时间段,同时进行的活动)甬道 每个活动只能明确属于一个甬道 用垂直实线分隔 甬道本身没有顺序 7.活动图与用例 活动图不能替代用例,因为用例中还有利益相关者及其关注点等大量信息。活动图能代替用例中的场景描述吗?对于用户目标级别的用例而言:不能。因为目标级别用例存在大量扩展分支;过多分支会导致活动图难以理解 适合辅助表达概要级别的用例 8.基于用例的
33、场景分析:自顶向下的过程 找出企业中需要信息化的业务过程。(有哪些业务&核心业务是啥)将业务过程(Business Process)划分为规的步骤,并加以描述(概要级别用例)(用用例和活动图)针对过程中的每个步骤编写对应的使用场景(用户目标级别用例)CH4 需求分析数据流分析 本章重点:如何绘制 DFD 什么是 KPI 1.数据流图(DFD):描绘软件系统逻辑模型的图形工具 2.DFD 分层:按照系统的层次结构进行逐步分解 子图是对父图中某一加工步骤的详细展开;每一层所包含的加工通常不超过 7 个;各层数据流保持平衡:父图中某加工的输入输出数据流应该同其子图的输入输出相同(相对应)。3.系统环
34、境图(顶层数据流图)0 层 DFD 仅包括一个数据处理过程,也就是要开发的目标系统 作用是确定系统边界 4.数据字典 若 X,a,b 都是数据项 X=a+b x 由 a 和 b 构成 X=a,b x 由 a 或 b 构成 X=a|b x 由 a 或 b 构成 X=(a)a 可在 x 中出现,也可能不出现 X=a x 由 0 次或多次重复的 a 构成 X=man x 由 m 至 n 个 a 组成,即至少有 m 个 a,至多有 n 个 a X=a.b x 可以取 a 至 b 的任一值 X=“a”x 为取值 a 的基本数据元素,即 a 无需进一步定义 5.DFD 绘制步骤 识别数据源、数据流和存储
35、建立系统环境图,确定系统边界 自顶向下,逐步求精,建立逐层建立系统的 DFD 定义数据流、数据存储的容和结构(数据字典)给出加工的具体信息,如,如业务规则等 6.DFD 的缺陷 完全聚焦于信息处理本身,对实际业务的描述不全面 7.关键绩效指标 KPI 通过对组织业务流程的关键参数进行设置、取样、计算、分析,从而得到的用于衡量流程绩效的一套目标式量化管理指标 理论依据:20/80 原则(帕累托原则)KPI 业绩考评体系是一整套覆盖各项职能和各个层级的关键业绩指标管理系统,是从分析和计划、汇报和指导、考核等三个方面实现管理规化,提高业务水平 KPI 是企业管理信息系统的数字仪表盘中仪表的来源。KP
36、I 体系制定:第一步:开发业务“价值树”;第二步:确定影响大的“关键业绩指标”;第三步:将“关键业绩指标”分配给有关经理;第四步:确定“关键业绩指标”的目标。需求分析阶段,必须落实 KPI 与报表中每一项指标的:计算方法 数据来源 OOP 建模 本章重点 对象与类的关系 什么是封装;封装的意义 什么是继承;什么是多态 什么是覆盖,什么是动态绑定 什么是接口 1.为什么要面向对象 从本质上说:软件开发过程是一个开发人员对开发项目不断深入学习、理解和认识,并将其用代码的形式固化的过程 认识复杂事物的两种主要方法:抽象(舍弃次要特征)和分治 2.面向对象 以对象而非数据作为问题表示和描述的基本单位
37、用日常认识世界的思维来指导软件开发 变解决问题为认识问题、用程序来反映的问题的认识 是抽象和分治方法的综合应用 本质上是以人为本,是软件工程的返朴归真!3.对象:一组数据和操作的集合;现实概念、问题在程序中的反应;是对人类抽象思维基本单位“概念实体”的直接模拟 概念实体具有:静态属性和动态特征 即把非生物对象当成能听懂我们命令的生物,将它能够实现的被动行为当作它的动态特征。数据:属性;操作:方法 面向对象(Object Oriented):使用对象作为基本单位来认识问题、设计开发程序 4.类:创建对象的模板。对象:类的实例 类与对象之间的关系是抽象与具体的关系:对象是对所研究的某一个具体事物的
38、逻辑简化。而类是对同一类事物的抽象和归纳,相当于概念。狗是一个类,我养的那只小狗就是一个对象。类创建对象的模板,类定义决定了该类型对象所具备的属性和行为。只有先定义类,才能去定义该类对象。变量中保存的是对象,变量的类型是类。实例对象产品 概念类模具 5.面向对象的三个主要特性:封装、多态、继承 6.封装:把数据和及其对应的操作(方法)用对象和类的形式组织起来,使之形成一个有机的整体 将数据处理的细节隐藏在对象部,外部无法干扰 封装的目的:隐藏对象的使用者不必关心的细节 避免使用者无意中破坏对象的属性或方法的正常工作 Java 中实现封装:构造函数 作用:保证新产生的对象实例的属性一定是合理的(
39、可用的)访问限定符 作用:保证外界无法随意修改对象的特定属性或执行对象的特定方法 7.继承 类和类之间的从属关系 is-a Dog 继承 Animal,意味着 Dog 自动具有了 Animal 所有的属性和方法 继承是 OOP 中实现代码复用的重要途径 8.多态:可以把子类的对象实例当成父类的对象实例(由于继承)一个对象变量可以引用多种实际类型;由此,同一段代码,可以用于多种不同的对象。这种现象就是所谓的多态 9.覆盖:override 子类可以重新实现父类定义的方法(覆盖的作用是让子类可以选择性的去继承父类已经实现的功能)重载:overload(同一个类中的)多个方法可以使用同一个名字(解决
40、做同一件事,可能需要不同参数的情况)重载和多态、OOP 没有关系!10.动态绑定:一段方法代码的具体行为是在程序运行时,才由传递给它的实参到底是什么类型决定的 public class Test public static void main(String args)Animal ani=new Dog(旺财);ani.run();ani.cry();11.抽象类:在父类中的某些方法(抽象方法)只是起到一个定义契约的作用,没有具体实现。Abstract 关键字 Shape s=new Circle();public abstract class Shape public abstract do
41、uble getArea();public abstract void draw();抽象类中也可以包含具体的方法。接口与抽象类的区别:接口的所有方法都是抽象的 public 方法,而抽象类既可以有抽象方法,也可以有非抽象方法、即可以有 public 方法,也可以有 private、protected 方法 抽象类依然是类,因此受到 Java 语言中一个类只能有一个父类的限制;而一个类可以同时实现零到多个接口 接口就相当于一个纯粹的契约 实现一个接口,就是实现接口中声明的所有方法 通常我们用继承关系表示类在概念上的包含与从属关系(is-a 关系)用接口实现关系,表示类具有的某种特性(has-a
42、 关系)CH5 需求分析领域建模 本章重点:领域建模方法 系统顺序图的绘制方法 1.领域模型(domain model):用图形可视化的方式表示的领域的实体概念及其相互关系 领域模型展现了:领域中的对象类或概念、概念之间的关系、概念的重要属性 2.概念类一定对应于现实中的某个具体的概念或者事物 出现在领域模型中的类都是概念类 3.领域模型本质上是关于特定领域的一个可视化的词汇列表,但不能完全取代词汇表 4.领域模型中的类没有职责(方法);领域模型不包括软件制品,如数据库、网页 领域模型不是数据模型:不需要考虑概念类的相关信息是否需要持久保存 不需要考虑概念类到底都有哪些属性 5.领域建模基本步
43、骤:寻找概念类:重用已有模型;使用分类列表;语言分析(与分类列表一起使用)概念类中有一类是对事物的描述,即描述类,避免:数据冗余;信息丢失 概念类分析准则:准则 1:不要把概念类误认为属性 如果我们认为某事物 X 不是现实世界中的数字或文字,那么X 可能是概念类而不是属性 准则 2:报表对象模型中是否要包括“票据”准则 3:像地图绘制者一样思考使用领域术语 将其绘制到模型中 使用简化的 UML 类图 添加关联和属性 6.关联分析:关联(assosiation):类的实例,即对象之间的关系,表示有意义和值得关注的连接。关联不一定是永久性的 关注那些现实业务需要关注和记录的关联 注意点:避免加入大
44、量关联;模型中的关联不一定会在软件中实现 关联的表示:关联表示为类之间的连线,并冠以首字母大写的关联名称。末端包含多重性表达式;本质是双向的 关联命名准则:格式为“类名动词短语类名”;动词短语应是可读的、有意义的 多重性:定义了类 A 有多少个实例可以和类 B 的一个实例关联 多重性的数值表示在特定时间点上有效关联的实例数量 多重性的数值还与建模者的关注角度有关 多重关联 7.属性分析:属性:表示对象某一方面性质的逻辑数据值 属性分析的目的:在领域模型中进一步确定概念类的属性,可以更好的展现当前所开发场景的信息需求。导出属性:有些属性可以从其他属性,或关联类的信息中推导出来(冗余,一般不应该在
45、领域模型中出现。)一般来说属性的类型不应该是复杂的领域概念(即其他概念类)8.系统顺序图:使用简化的 UML 顺序图来描述外部参与者与 SuD 之间的输入和输出事件。使用系统顺序图(System Sequence Diagram,SSD)来阐述系统的动态特性 时间顺序、自上而下描述外部参与者和系统之间的交互 CH6 架构设计 本章重点:什么是系统架构 什么是性能,如何衡量?什么是可用性?在架构中,什么是封装?什么是耦合?什么是解耦?什么是分层 典型的软件架构:C/S 架构,B/S 架构,三层 C/S 架构各自的优缺点。选择合适的软件架构 逻辑三层结构 什么是。如何对用户口令加密。RBAC。什么
46、是(安全)审计。架构的设计与验证 1.系统架构(System Architecture):广义上讲,是指开发一个软硬件系统所作出的最高层次的、以后难以更改的,商业的和技术的决定。狭义上说,就是指软硬件系统的组成结构 用软件架构特指软件系统的架构 包括:各软件元素、软件元素的外在特性、软件元素之间的关系 2.软件架构的根本作用:保证软件系统能够满足用户的需求 软件架构的关注点更多的放在软件的非功能性需求上 过程需求(软件交付方法、实现方法、交付时间)外部需求(互操作性、法律、道德约束、操作者水平等)产品需求(质量需求)可用性、可靠性、安全性、可维护性等等 3.重要的非功能性需求 性能(Perfo
47、rmance):即系统完成特定功能的效率 性能的主要衡量指标:吞吐率(throughput):系统单位时间完成的工作量。又可分为平均吞吐率和峰值吞吐率。响应时间(Responsetime):从用户发出处理请求到收到处理结果所花的时间。又可分为平均响应时间和最大响应时间 截止期限(Deadline):系统的任务必须在某个特定时间段完成 架构对性能的影响是双方面的:对系统进行分块和分装,会引入额外的通讯和运行开销;合理的布局和设计又可提高性能 可复用性:软件或其模块可以重复使用的程度。可复用性越高,企业软件开发效率越高 典型:数据库 安全性:系统的信息被盗取或破坏,或者系统由于恶意攻击导致不能工作
48、的可能性 可用性:系统的一部分出现故障,导致整个系统不能正常工作的可能性,以及使系统完全恢复正常所需要的时间长短。可维护性:所有的软件都需要修改和升级,好的架构,能够保证修改只影响系统中很小的一部分程序,从而使系统具备较好的可维护性 各非功能性需求之间相互影响,架构设计必须是一个权衡的过程 价值观 重要性排序 4.目前软件架构设计所采用的基本指导思想是分治。其表现形式主要有两种:封装:把功能抽取成独立的模块 外界只能通过它的对外接口来访问它的功能 外界不需要关心它部的具体结构和实现方法。解耦:解除耦合 耦合:软件设计中的耦合就是指软件元素之间的依赖关系。软件中的耦合关系越多,就越难以修改和维护
49、。解耦包含两层含义:减少模块之间的过度耦合 对于必须存在的耦合(联系),尽量使之标准化 5.封装和解耦思想在架构中主要体现为“分层”分层:通过在软件整体结构中,将基本功能集中到一个模块中的做法,即称为分层 较高层次的层可以调用较低层次的层,而反之则不然。即层与层之间的依赖是单向的 解耦的另一种常用方法:参数化配置 通过分层和配置,对软件外部耦合关系实现解耦 继承和多态 减少部耦合 基于接口的开发 封装和解耦往往是在一起进行的:封装的模块是按照解耦原则划分出来的 不封装的解耦是无意义的 6.直接式架构:没有架构 优点:结构简单、容易实现 缺点:没有明确的结构、其软件质量特性没有保证 适合:功能简
50、单的软件 7.分层架构:n 层架构:把系统分为若干层,上层调用下层 典型:TCP/IP 网络 8.基于物理分布的分层架构 2 层结构或 C/S 结构 Visual Basic、Visual Foxpro 特点 系统分成两层 一层是客户端(Client),它是运行在用户计算机上的一个可执行程序。一层是服务器层(Server),通常是运行在后台服务器上的数据库及其存储过程。系统主要的功能,比如与用户进行交互等,都在客户端程序中完成。后台数据库集中存储重要的系统数据。C/S 解决了单机软件之间数据共享和协作的问题 二层架构的缺点 客户端必须保存数据库的访问密码,非常不利于安全。当客户端数量很多时,部