第一章概述1.软件(software)是计算机系统中与硬件(hardware)相互依存的另一部分,它是包括程序(program),相关数据(data)及其说明文档(document)(1)程序是按事先设计的功能和性能要求执行的指令序列(2)数据是使程序能正常操纵信息的数据结构(3)文档是与程序开发,维护和使用有关的图文材料2.软件的特点:(1)软件是一种逻辑实体,而不是具体的物理实体,具有抽象性(2)软件的生产与硬件不同,在它的开发过程中没有明显的制造过程(3)在软件的运行和使用期间,没有硬件那样的机械磨损、老化问题(4)依赖于计算机硬件系统(5)软件的开发至今尚未完全摆脱手工艺的开发方式(6)软件本身是复杂的(实际问题的复杂性,程序逻辑结构的复杂性)(7)软件成本相当昂贵(8)相当多的软件工作涉及到社会因素3.软件危机(software crisis)是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
4.软件危机包含两方面的问题:其一是如何开发软件,以满足不断增长、日趋复杂的需求;其二是如何维护数量不断膨胀的软件产品。
5.软件危机的主要表现:质量:1. 软件产品的质量往往靠不住;2.软件常常是不可维护的;3.软件通常没有适当的文档资料;4.用户对“已完成的”软件系统不满意的现象时间:5.软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势;6.经常发生对软件开发成本和进度的估计常常很不准确预算:7.软件成本在计算机系统总成本中所占的比例逐年上升6.出现软件危机的主要原因一方面是与软件本身的特点有关,另一方面是与软件开发和维护的方法不正确有关。
解决的办法:软件工程7.(1)软件工程(software engineering)是将工程化的思想用于软件的开发和维护(2)软件工程(software engineering)就是为了经济地获得可靠的且能在实际机器上有效运行的软件,而建立和使用完善的工程原理。
(3)软件工程(software engineering)是:(1)将系统化的、严格约束的、可度量的方法应用于软件的开发、运行和维护,即将工程化应用于软件。
(2)在(1)中所述方法的研究软件工程是一门研究如何用系统化、规范化、数量化等工程原则和方法去进行软件的开发和维护的学科。
8.软件工程包括两方面内容:软件开发技术和软件项目管理。
其中,软件开发技术包括软件开发方法学、软件工具和软件工程环境。
软件项目管理包括软件度量、项目估算、进度控制、人员组织、配置管理、项目计划等。
9.软件工程包含四个关键元素:方法(methodologies)、语言(languages)、工具(tools)和过程(procedures)(1)软件的方法提供如何构造软件的技术。
内容:明确的工作步骤与技术、具体的文档格式、明确的评价标准(2)软件语言用于支持软件的分析、设计和实现(3)软件工具为方法和语言提供自动和半自动的支持(4)软件过程规定了完成各项任务的步骤从内容上说软件工程包括:软件开发理论和结构、软件开发技术、以及软件工程管理和规范10.软件工程的原理:(1)用分阶段的生命周期计划严格管理(2)坚持进行阶段评审(3)实行严格的产品控制(4)采纳现代程序设计技术(5)结果应能清楚地审查(6)开发小组的人员应少而精(7)承认不断改进软件工程实践的必要性11.软件的生存期:一个软件从计划开发到废弃不用的这段时期被称为软件的生命周期12.软件生存周期阶段:定义阶段:主要确定待开发软件系统要做什么(1)系统分析(问题定义):要解决的问题是什么。
同用户协商,达成共识。
(2)制定软件项目计划(含可行性研究):问题是否值得去解决。
若可行,则须指定软件项目计划包括确定工作域、风险分析、资源规定、成本核算、以及工作任务和进度安排等。
(3)需求分析:系统必须完成哪些功能。
开发人员与用户共同讨论决定哪些需求是可以满足的,并对其加以确切的描述。
开发阶段:确定待开发的软件怎么做(1)软件设计:总体上如何实现系统,将系统功能分割给几个子系统,子系统间的接口如何。
如何具体地实现系统,如何描述数据结构和算法。
(2)编码:选择编程语言并编写代码。
(投入最多,持续时间不长)(3)测试:包括不同的测试阶段,如测试功能的单元测试、测试性能的综合测试。
维护阶段(持续时间最长):进行各种修改,使系统能持久的满足用户的需要。
改正性维护、适应性维护、完善性维护和预防性维护13.常见的软件工程模型有:瀑布模型、原型法模型、演化模型、螺旋模型、喷泉模型、第四代技术过程模型(1)瀑布模型:具有顺序性和依赖性,便于分工合作,文档便于修改,并有复审质量保证,但与用户见面晚,纠错慢,工期延期的可能性大。
适合于软件需求比较明确、开发技术比较成熟、工程管理比较严格,无重大变化的系统。
优点:便于分工协作;文档驱动,有质量保证。
缺点:易阻塞;推迟实现;成功率较低。
适用范围:功能、性能需求明确,无重大变化的系统(2)原型法模型:针对瀑布模型提出来的一种改进方法。
它的基本思想是从用户需求出发,快速建立一个原型,使用户通过这个原型初步表达出自己的要求,并通过反复修改、完善,逐步靠近用户的全部需求,最终形成一个完全满足用户要求的新体系。
适用范围:(用户可见的功能和表示)对软件需求缺乏准确的认识的项目,采用新技术的项目(3)演化模型:适用范围:对软件需求缺乏准确的认识的项目,系统开发的时限十分严格的项目(4)螺旋模型:风险驱动:以降低风险为目的,极大地依赖风险评估技术适用范围:开发的大型项目面向对象软件的项目需求不准确的项目(5)喷泉模型:(面向对象)迭代与递增,重复,演进,无间隙,各阶段间无明显界限第二章可行性研究1.可行性研究的相关工作包括问题定义、可行性研究和需求定义(1)问题定义:是可行性研究和软件开发计划的制定的依据基本任务——了解问题的背景和用户的目标——提出关于问题的性质、工程的目标和规模的书面报告(2)可行性研究:可行性研究的前提:系统分析员与用户就项目的目标等取得了一致的认识可行性研究的结论:启动,或延期,或终止可行性研究的目的:用最小的代价在尽可能短的时间内确定问题是否能够解决。
2.可行性研究的目的:技术可行性、经济可行性、操作可行性、法律可行性技术可行性:(1)风险分析:在给定的约束条件下,判断能否设计并实现系统所需的功能和性能(2)资源分析:论证是否具备系统开发所需的各类管理人员和专业技术人员、软件、硬件资源和工作环境等(3)技术分析:当前的科学技术是否支持系统开发的全过程经济可行性:系统的经济效益是否能超过它的开发成本(系统效益包括经济效益和社会效益)操作可行性:确定在当前政治意识形态、法律法规、社会道德、民族意识以及系统运行的组织机构和人员等环境下,系统是否可行。
法律可行性:是否符合法律的规定3.可行性研究最根本的任务是对以后的行动方针提出建议。
4.可行性研究的步骤:(1)复查系统规模和目标(2)研究目前正在使用的系统(3)导出新系统的高层逻辑模型(4)导出和评价若干供选择的解法(5)草拟开发计划等文档并提交审查5.可行性研究最终得到可行性研究报告第三章需求分析1.需求分析是在可行性分析和需求定义的基础上,要求更加详细、准确的分析清楚系统必须做什么。
有时又称为软件系统分析,它处于软件工程的开始部分,提供了构建软件项目其余部分的根基,关系到软件开发的成败。
2.需求分析其任务是:对目标系统提出完整、准确、清晰、具体的要求3.需求分析与可行性研究的区别:(1)可行性研究是大大压缩简化了的系统分析和设计的过程(抽象层次较高)(2)可行性研究是在忽略许多细节的前提下,确定是否存在可行的解法4.需求分析的过程:(1)问题获取:解决要开发的软件做什么、做到什么程度(2)需求分析:包括提炼、分析和审查已收集的需求,以确保所有的风险承担者都明白它们的含义,并且找出其中的错误、遗漏或不足的地方(3)需求规格说明:描述需求的文档(4)需求评审:需求分析完成后对功能的正确性。
完整性和清晰性以及其他需求给于评审。
需求分析的原则:(1)必须能够表达和理解问题的数据域和功能域;(2)必须自顶向下、逐层分解和细化问题;(3)必须给出系统的逻辑视图和物理视图。
5.需求分析的方法:(1)结构化分析方法(SA):数据流建模,行为模型。
基本思想:自顶向下、逐步求精。
常用的工具有:数据流图(Data Flow Diagram,DFD)、数据字典(Data Dictionary,DD)等。
(2)面向对象分析方法(OOA):结构模型,对系统的建模结构化分析模型(数据字典三个子模型):数据模型、功能模型、行为模型。
数据模型包含3种信息:数据对象、属性、关系。
功能模型可以用数据流图描述;数据流图包含4种图形元素:数据流、加工处理、数据文件、源点和终点。
6.经过软件的需求分析建立起来的模型可以称之为分析模型或者需求模型。
核心是数据字典,围绕的是数据模型、功能模型和行为模型。
(1)数据模型包含数据对象、属性和关系。
数据对象只封装数据,没有引用对作用于数据对象的操作;关系:一对一,一对多,多对多。
常用实体关系图(ER图):实体、属性和关系(2)功能模型:数据流图(DFD)是以图形的方式表达数据处理系统中信息的变换和传递过程,包含数据流(含有固定成分的动态数据,包括输入数据和输出数据)、数据源(源点和终点表示数据的产生和最终抵达处,通常是系统边界)、数据的加工(又称变换或者功能模块,表示对数据进行的操作逻辑)和数据的存储(数据文件,文件表示处于静态的、需要存储的数据)。
(3)行为模型:状态转换图7.数据流图包含4种图形元素:数据流、数据流分量、数据存储、处理8.结构化方法适用于需求明确的应用领域。
面向对象软件开发包括面向对象分析(问题定义阶段)、面向对象设计和面向对象程序设计9.面向对象分析模型:对象模型、功能模型、行为模型10.产出软件规格说明书第四章系统设计1.1.系统设计的目标是确定系统的物理模型。
系统设计基本目的是用比较抽象概括的方式确定目标系统如何完成预定的任务。
系统设计包括:软件系统结构的总体设计、处理设计、数据结构设计。
2.结构图的形态特征:1)层次数——深度2)同一层最大模块数——宽度3)一个给定模块调用的模块个数——扇出4)调用一个给定模块的模块个数——扇入好的软件顶层扇出大,底层扇入大。
3.一般用两个准则度量模块的独立性,即模块间的耦合和模块的内聚性。
2.4. 耦合性是程序结构各个模块之间相互关联的度量,他取决与各个模块之间借口的复杂程度、调用模块的方式以及哪些信息通过接口。
按照耦合性从低到高的顺序排列如下:非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合设计原则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。