1、软件工程导论 Software Engineering,程金 控制科学与工程学院 cse_ 2019年7月28日,国内软件行业的发展,据CCID统计,软件市场销售额达到120亿元,同比增长31.9%,比去年提高1.5个百分点;Linux平台软件、以网络安全解决方案为主的网络安全软件和教育、税务等行业应用软件都有较大幅度的增长。 软件和信息服务业在计算机总体市场中的份额继续增加,由2000年上半年的24.5%提高到目前的25.9%。,1998年1999年财富全球企业1000强中,有208家到印度进行软件海外采购。 印度软件行业出口已从8年前的1.5亿美元增加到1998年1999年度39亿美元,遍
2、及全球91个国家和地区。 美国客户所购买软件的61%是印度产品。印度软件业以其低成本、高质量、高可靠性和交货及时等特点赢得了全球市场。,国内最大的软件军团东软集团 。 东软是中国最大的IT解决方案与服务供应商。1991年,东软创立于中国东北大学。公司主营业务包括:行业解决方案、产品工程解决方案及相关软件产品、平台及服务等。 东大阿尔派公司于2000年10月通过第三方认证机构的CMM2认证。 2001年6月26日,沈阳东软软件股份有限公司(原沈阳东大阿尔派软件股份有限公司)正式通过了CMM3级认证,成为中国首家通过CMM3级的软件企业。 2001年1月,联想软件经过英国路透集团的严格评估,顺利通
3、过CMM2认证。,CMM是指“能力成熟度模型”,其英文全称为Capability Maturity Model for Software,英文缩写为SW-CMM,简称CMM。它是对于软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述。 CMM的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化、使企业能够更好地实现商业目标。将各种能力成熟度模型(即:Software CMM、Systems Eng-CMM、People CMM和Acquisition CMM)整合到同一架构中去,由此建立起包括软件工程、系统工程和软件
4、采购等在内的诸模型的集成,以解决除软件开发以外的软件系统工程和软件采购工作中的迫切需求。,目前,学术界和工业界公认美国 Carnegie Mellon 大学软件工程研究所(CMU/SEI) 以W.S.Humphrey为首主持研究与开发的软件能力成熟度模型CMM是当前最好的软件过程,已成为业界事实上的软件过程的工业标准。,上次课内容回顾,软件危机的表现 软件工程的基本原理 软件工程方法学 传统方法学 面向对象方法学 软件过程模型,上次课内容回顾,第2章 可行性分析,2.1 可行性研究的任务,2.2 可行性研究过程,2.3 系统流程图,2.4 数据流图,2.5 数据字典,2.6 成本/效益分析,问
5、题的定义与可性行研究,开始,问题定义,可性行研究,可行否?,项目实施计划,终止项目的建议,结束,Y,N,目的: 用最小的代价在尽可能短的时间内确定问题是否能够解决。不是解决问题,而是确定问题是否值得去解决。,2.1 可行性研究的任务,首先需要进一步分析和澄清问题定义。 导出系统的逻辑模型。从系统逻辑模型出发,探索若干种可供选择的主要解法(即系统实现方案),从下述三方面研究每种解法的可行性: 技术可行性 经济可行性 操作可行性必要时还应该从法律、社会效益等更广泛的方面研究每种解法的可行性。 分析员应该为每个可行的解法制定一个粗略的实现进度。,2.1 可行性研究的任务,可行性研究最根本的任务是对以
6、后的行动方针提出建议。应该推荐一个较好的解决方案,并且为工程制定一个初步的计划。 可行性研究需要的时间长短取决于工程的规模。一般说来,可行性研究的成本只是预期的工程总成本的5%10%。,2.2 可行性研究过程,1. 复查系统规模和目标 2. 研究目前正在使用的系统 3. 导出新系统的高层逻辑模型 4. 进一步定义问题 5. 导出和评价供选择的解法 6. 推荐行动方针 7. 草拟开发计划 8. 书写文档提交审查,2.2 可行性研究过程,1. 复查系统规模和目标 分析员访问关键人员,仔细阅读和分析有关的材料,以便对问题定义阶段书写的关于规模和目标的报告书进一步复查确认,改正含糊或不确切的叙述,清晰
7、地描述对目标系统的一切限制和约束。 这个步骤的工作,实质上是为了确保分析员正在解决的问题确实是要求他解决的问题。 2. 研究目前正在使用的系统 现有的系统是信息的重要来源。新的目标系统必须也能完成它的基本功能; 现有的系统必然有某些缺点,新系统必须能解决旧系统中存在的问题。 常见的错误做法是花费过多时间去分析现有的系统。这个步骤的目的是了解现有系统能做什么,而不是了解它怎样做这些工作。,2.2 可行性研究过程,3. 导出新系统的高层逻辑模型(Logical Model,概略模型) 通常总是从现有的物理系统出发,导出现有系统的逻辑模型,再参考现有系统的逻辑模型,设想目标系统的逻辑模型,最后根据目
8、标系统的逻辑模型建造新的物理系统。 能够使用数据流图,描绘数据在系统中流动和处理的情况,从而概括地表达出他对新系统的设想。 通常为了把新系统描绘得更清晰准确,还应该有一个初步的数据字典,定义系统中使用的数据。 数据流图和数据字典共同定义了新系统的逻辑模型,以后可以从这个逻辑模型出发设计新系统。新系统的逻辑模型实质上表达了分析员对新系统必须做什么的看法。,2.2 可行性研究过程,4. 进一步定义问题 分析员应该和用户一起再次复查问题定义、工程规模和目标,这次复查应该把数据流图和数据字典作为讨论的基础。如果分析员对问题有误解或者用户曾经遗漏了某些要求,那么现在是发现和改正这些错误的时候了。 可行性
9、研究的前4个步骤实质上构成一个循环。分析员定义问题,分析这个问题,导出一个试探性的解;在此基础上再次定义问题,再一次分析这个问题,修改这个解;继续这个循环过程,直到提出的逻辑模型完全符合系统目标。,2.2 可行性研究过程,5. 导出和评价供选择的解法 分析员应该从他建议的系统逻辑模型出发,导出若干个较高层次的(较抽象的)物理解法供比较和选择。 当从技术角度提出了一些可能的物理系统之后,应该根据技术可行性的考虑初步排除一些不现实的系统。 其次可以考虑操作方面的可行性。去掉其中从操作方式或操作过程的角度看用户不能接受的方案。 接下来应该考虑经济方面的可行性。对每个可能的系统进行成本/效益分析。一般
10、说来,只有投资预计能带来利润的系统才值得进一步考虑。 最后为每个在技术、操作和经济等方面都可行的系统制定实现进度表,通常只需要估计生命周期每个阶段的工作量。,2.2 可行性研究过程,6. 推荐行动方针 根据可行性研究结果做出的一个关键性决定是否继续进行这项开发工程。分析员必须清楚地表明他对这个关键性决定的建议。 如果分析员认为值得继续进行这项开发工程,那么他应该选择一种最好的解法,并且说明选择这个解决方案的理由。 分析员对于所推荐的系统必须进行比较仔细的成本/效益分析。,2.2 可行性研究过程,7. 草拟开发计划(Development Plan ) 分析员应该为所推荐的方案草拟一份开发计划,
11、除了制定工程进度表之外还应该估计对各类开发人员和各种资源的需要情况,应该指明什么时候使用以及使用多长时间。此外还应该估计系统生命周期每个阶段的成本。最后应该给出下一个阶段(需求分析)的详细进度表和成本估计。 8. 书写文档提交审查(Feasibility report ) 应该把上述可行性研究各个步骤的工作结果写成清晰的文档,请用户、客户组织的负责人及评审组审查,以决定是否继续这项工程及是否接受分析员推荐的方案。,附:可行性研究报告(Feasibility report),1 引言 2 前提要求目标条件 3 现有系统分析 4 所建议的系统 5 可选择的其他系统方案 6 投资及效益分析 7 社会
12、因素可行性 结论GB 8567-88 计算机软件产品开发文件编制指南 ,2.3 系统流程图Systematic Flow diagram,系统流程图是概括地描绘物理系统的传统工具。它的基本思想是用图形符号以黑盒子形式描绘组成系统的每个部件(程序,文档,数据库,人工过程等)。系统流程图表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程,因此尽管系统流程图的某些符号和程序流程图的符号形式相同,但是它却是物理数据流图而不是程序流程图。,2.3 系统流程图,图2.1 基本符号,利用这些符号可以把一个广义的输入输出操作具体化为读写存储在特殊设备上的文件(或数据库),把抽象处理具体
13、化为特定的程序或手工操作等。 分层,2.3 系统流程图,2.3 系统流程图,一个简单的例子: 某装配厂有一座存放零件的仓库,仓库中现有的各种零件的数量以及每种零件的库存量临界值等数据记录在库存清单主文件中。当仓库中零件数量有变化时,应该及时修改库存清单主文件,如果哪种零件的库存量少于它的库存量临界值,则应该报告给采购部门以便定货,规定每天向采购部门送一次定货报告。,图2.3 库存清单系统的系统流程图,举例 - 计算机售书系统流程图,结束,学生,购书发票,到书库 领书,购书单,终端,审查并 开发票,1,1-学生各学期用书数据库,购书单,2,2-教材存量数据库,2.4 数据流图Data Flow
14、Diagram,数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。 在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。 数据流图是系统逻辑功能的图形表示,即使不是专业的计算机技术人员也容易理解它,因此是分析员与用户之间极好的通信工具。 此外,设计数据流图时只需考虑系统必须完成的基本逻辑功能,完全不需要考虑怎样具体地实现这些功能,所以它也是今后进行软件设计的很好的出发点。数据流图的基本要点是描绘“做什么”而不考虑“怎样做”。,2.4 数据流图D F D,数据流图有四种基本符号: 正方形(或立方体)表示数据的源点或终点; 圆
15、角矩形(或圆形)代表变换数据的处理; 开口矩形(或两条平行横线)代表数据存储; 箭头表示数据流,即特定数据的流动方向。 除了上述4种基本符号之外,有时也使用几种附加符号图2.4(b)。,2.4 数据流图Data Flow Diagram,例子:假设一家工厂的采购部每天需要一张定货报表,报表按零件编号排序,表中列出所有需要再次定货的零件。对于每个需要再次定货的零件应该列出下述数据:零件编号,零件名称,定货数量,目前价格,主要供应者,次要供应者。零件入库或出库称为事务,通过放在仓库中的CRT终端把事务报告给定货系统。当某种零件的库存数量少于库存量临界值时就应该再次定货。 第一步可以从问题描述中提取
16、数据流图的4种成分:源点或终点,处理,数据存储和数据流。,图2.5 定货系统的基本系统模型,2.4 数据流图Data Flow Diagram,下一步应该把基本系统模型细化,描绘系统的主要功能。从基本系统模型这样非常高的层次开始画数据流图是一个好办法。,图2.6 定货系统的功能级数据流图,2.4 数据流图Data Flow Diagram,接下来应该对功能级数据流图中描绘的系统主要功能进一步细化。,图2.7 把处理事务的功能进一步分解后的数据流图,2.4 数据流图Data Flow Diagram,数据流图中的命名:数据流图中每个成分的命名是否恰当,直接影响数据流图的可理解性。 为数据流(或数
17、据存储)命名 名字应代表整个数据流(或数据存储)的内容,而不是仅仅反映它的某些成分。 不要使用空洞的、缺乏具体含义的名字(如“数据”、“信息”、“输入”之类)。 如果在为某个数据流(或数据存储)起名字时遇到了困难,则很可能是因为对数据流图分解不恰当造成的,应该试试重新分解,看是否能克服这个困难。,2.4 数据流图Data Flow Diagram,数据流图中的命名:数据流图中每个成分的命名是否恰当,直接影响数据流图的可理解性。 为处理命名: 通常先为数据流命名,然后再为与之相关联的处理命名。 名字应该反映整个处理的功能,而不是它的一部分功能。 名字最好由一个具体的及物动词加上一个具体的宾语组成
18、。 常名字中仅包括一个动词。 如果在为某个处理命名时遇到困难,应考虑重新分解。,2.4 数据流图Data Flow Diagram,数据流图中的用途: 利用它作为交流信息的工具。 另一个主要用途是作为分析和设计的工具。 当用数据流图辅助物理系统的设计时,以图中不同处理的定时要求为指南,能够在数据流图上画出许多组自动化边界,每组自动化边界可能意味着一个不同的物理系统,因此可以根据系统的逻辑模型考虑系统的物理实现。 数据流图对更详细的设计步骤也有帮助,本书第5章将讲述从数据流图出发映射出软件结构的方法面向数据流的设计方法。,2.5 数据字典data dictionary,数据字典是关于数据的信息的
19、集合,也就是对数据流图中包含的所有元素的定义的集合。 在软件分析和设计的过程中给人提供关于数据的描述信息。 数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,然而没有数据流图数据字典也难于发挥作用。只有数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明。,2.5 数据字典data dictionary,数据字典的内容: (1) 数据流 (2) 数据流分量(即数据元素) (3) 数据存储 (4) 数据处理 数据字典中还应该包含关于数据的一些其他信息。 一般信息(名字,别名,描述等等), 定义(数据类型,长度,结构等等), 使用特点(值的范围,使用频
20、率,使用方式输入、输出、本地,条件值等等), 控制信息(来源,用户,使用它的程序,改变权,使用权等等)和分组信息(父结构,从属结构,物理位置记录、文件和数据库等等)。,2.5 数据字典data dictionary,定义数据的方法定义:由数据元素组成数据的方式只有下述几种基本类型: (1) 顺序 即以确定次序连接两个或多个分量; (2) 选择 即从两个或多个可能的元素中选取一个; (3) 重复 即把指定的分量重复零次或多次。(4) 可选 即一个分量是可有可无的(重复零次或一次)。“可选”是由数据元素组成数据时一种常见的方式,把它单独列为一种算符可以使数据字典更清晰一些。,2.5 数据字典dat
21、a dictionary,建议采用下列符号: = 等价于(或定义为); + 和(即,连接两个分量); 或(即,从方括弧内列出的若干个分量中选择一个),通常用“|”号隔开供选择的分量; 重复(即,重复花括弧内的分量); ( ) 可选(即,圆括弧里的分量可有可无)。常常使用上限和下限进一步注释表示重复的花括弧。一种注释方法是在开括弧的左边用上角标和下角标分别表明重复的上限和下限;另一种注释方法是在开括弧左侧标明重复的下限,在闭括弧的右侧标明重复的上限。,2.5 数据字典data dictionary,举例说明:某程序设计语言规定,用户说明的标识符是长度不超过8个字符的字符串,其中第一个字符必须是字
22、母字符,随后的字符既可以是字母字符也可以是数字字符。使用上面讲过的符号,我们可以像下面那样定义标识符: 标识符=字母字符+字母数字串 字母数字串=0字母或数字7 字母或数字=字母字符数字字符,2.5 数据字典data dictionary,数据字典的用途 数据字典最重要的用途是作为分析阶段的工具。在数据字典中建立的一组严密一致的定义很有助于改进分析员和用户之间的通信,因此将消除许多可能的误解。对数据的这一系列严密一致的定义也有助于改进在不同的开发人员或不同的开发小组之间的通信。如果要求所有开发人员都根据公共的数据字典描述数据和设计模块,则能避免许多麻烦的接口问题。 数据字典中包含的每个数据元素
23、的控制信息是很有价值的。因为列出了使用一个给定的数据元素的所有程序(或模块),所以很容易估计改变一个数据将产生的影响,并且能对所有受影响的程序或模块作出相应的改变。 最后,数据字典是开发数据库的第一步,而且是很有价值的一步。,2.5 数据字典data dictionary,数据字典的实现 目前,数据字典几乎总是作为CASE“结构化分析与设计工具”的一部分实现的。在开发大型软件系统的过程中,数据字典的规模和复杂程度迅速增加,人工维护数据字典几乎是不可能的。如果在开发小型软件系统时暂时没有数据字典处理程序,建议采用卡片形式书写数据字典,每张卡片上保存描述一个数据的信息。这样做更新和修改起来比较方便
24、,而且能单独处理描述每个数据的信息。每张卡片上主要应该包含下述这样一些信息:名字、别名、描述、定义、位置。,案例:机票预定系统,名字:旅客信息 别名: 描述:旅客的个人信息,用于对旅客的确认 定义:旅客信息=姓名+性别+工作单位+ 身份证号码+旅行时间+旅行目的 地 位置:输入到旅行社端(client端),名字:订票信息 别名: 描述:旅客的旅行时间和目的地,用于确定旅客的航班 定义:订票信息=旅客旅行时间+旅客旅行目的地 位置:传输到航空公司端(Server端),名字:订票旅客清单 别名: 描述:已订票的旅客的记录 定义:订票旅客清单=旅客信息的合集 位置:输入到旅行社端(Client端),
25、2.6 成本/效益分析,成本估计 代码行技术:代码行技术是比较简单的定量估算方法,它把开发每个软件功能的成本和实现这个功能需要用的源代码行数联系起来。 任务分解技术:这种方法首先把软件开发工程分解为若干个相对独立的任务。再分别估计每个单独的开发任务的成本,最后累加起来得出软件开发工程的总成本。 自动估计成本技术:采用软件工具来自动估计成本,并且使得估计的结果更客观,需要有良好的数据库系统支持。,2.6 成本/效益分析,成本/效益分析的方法 货币的时间价值:通常用利率的形式表示货币的时间价值。 投资回收期:所谓投资回收期就是使累计的经济效益等于最初投资所需要的时间。 纯收入:衡量工程价值的另一项经济指标是工程的纯收入,也就是在整个生命周期之内系统的累计经济效益(折合成现在值)与投资之差。 投资回收率,简要回顾,可行性分析的任务 可行性分析的过程 系统流程图 数据流图 数据字典作业:: P53:2-请用数据流图描绘本系统的功能。 P54:5;预习:第3章 需求分析,