第1章 软件工程的内容和方法
程序是计算机为完成特定任务而执行的指令的有序集合。
软件=程序+数据+文档
软件工程是研究软件开发方法和软件管理方法的一门工程学科
软件工程的三要素:软件工程的方法(开发方法)、工具(支持方法的工具)和过程(管理过程)。
软件工程的7条原理:(1)用分阶段的生存周期计划严格管理软件开发,分为计划、分析、设计、编程、测试和运行维护6个阶段。(2)坚持进行阶段评审。上一阶段评审不通过,就不能进入下一阶段开发。(3)实行严格的产品版本控制。(4)采用现代程序设计技术。(5)结果应能清楚地审查。(6)开发小组的成员要少而精。(7)要不断地改进软件工程实践的经验和技术,要与时俱进。
软件工程中常用的软件开发方法:面向过程的开发方法、面向对象的开发方法、面向数据的开发方法和形式化开发方法。
面向过程的开发方法的优点:简单好学;缺点:不适应窗口界面,维护困难;适用场合:大型工程计算,实时数据跟踪处理,各种自动化控制系统,以及系统软件实现等领域。
面向对象的开发方法的优点:功能强大,易于维护;缺点:不用掌握;适用场合:互联网时代,完全有用户交互控制程序执行过程的应用程序和系统软件的开发。
面向数据的开发方法的优点:通俗易懂;缺点:不适应窗口界面;适用场合:以关系数据库管理形态为支撑环境的信息系统建设。
形式化开发方法的优点:准确、严谨;缺点:难于上手和应用;适用场合:对安全性要求极高,不容许出错的软件系统,如军事、医药、交通等领域。
软件工程的五个面向理论:面向流程分析、面向数据设计、面向对象实现、面向功能测试和面向过程管理。
软件工程的过程管理有:ISO 9000 质量管理和质量保证体系、CMMI 软件能力成熟度模型和软件企业文化。
名称 | 来源 | 特点 |
ISO 9000 质量管理和质量保证体系 | 国际标准化组织 | 按20多个质量要素管理 |
CMMI 软件能力成熟度模型 | 美国卡内基-梅隆大学软件工程研究所(CMU/SEI) | 按24个过程域PA,分阶段模型和连续模型两种方式管理,属于重载过程管理 |
软件企业文化 | Microsoft公司、IBM公司、敏捷方法 | 属于轻载过程管理 |
第2章 软件生产周期及开发模型
软件的生存周期:1 立项(或签合同)、下达任务书; 2 需求分析;3 概要设计;4 详细设计;5 编码实现;6 软件测试;7 软件发布与实施;8 软件维护;9 版本更新或退役。
瀑布模型的特点:1、里程碑或基线驱动,或者说文档驱动。2、过程逆转性很差或者说不可逆转。优点:开发阶段清晰。便于评审、设计、跟踪、管理和控制。缺点:过程逆转性差,错误以发散式扩大。
模型名称 | 优点 | 缺点 | 适用范围 |
瀑布 | 简单好学 | 逆转性差 | 面向过程开发 |
增量 | 可以分阶段提交 | 有时用户不同意 | 系统可拆卸和组装 |
迭代 | 克服了瀑布模型的缺点 | 风险大 | 有高素质软件团队 |
原型 | 开发速度快 | 不利于创新 | 已有产品的原型 |
第3章 软件立项与合同
“非订单软件”:通过市场调研之后,认为某产品将会产生巨大的市场空间,而软件公司在人力资源、设备资源、抵抗风险、资金和时间上都具备开发该产品的能力,于是决定立项,这类软件产品被称为“非订单软件”。
“订单软件”:与固定用户签订软件开发合同,由软件公司启动该项目的开发,这类软件被称为“订单软件”。
第4章 软件需求
需求分析为什么重要?
答:(1)许多大型应用系统的失败,最后均归结到需求分析的失败。
(2)需求分析的输出文档《用户需求分析》即使软件生产周期中的第一个里程碑,又是客户、软件开发人员和项目管理人员三者必须遵守的一根基线,是三者共同工作的基础,是项目Alpha测试和Beta测试的准则,是供方交付产品和需方验收产品的依据。
(3)需求分析要占整个软件开发时间或工作量的30%左右。
(4)需求获取中的错误属于软件开发早期错误,它会在后续的设计和实现中进行发散式传播。
需求获取为什么难?
答:(1)用户需求具有动态性
(2)用户需求具有模糊性
(3)开发者和用户要对需求达成完全一致的认识,用户要在需求报告上签字,要承担责任。
(4)中国的国有企业正处于变动期,中国的民营企业正处于成长期,造成需求不成熟、不稳定和不规范,增加了难度系数。
基线:基线是软件工作产品,它是经内部和外部评审过的,并且是下一阶段工作的基础。一根基线是一个里程碑或一个检查点。
检查点:检查点只是由时间、计划、事件驱动的检查工作进度和质量的一个记号。一个检查点不一定是一根基线或一个里程碑。
里程碑:里程碑是一个标记,只需要经过内部评审。一个里程碑是一个检查点,但不一定是基线。
评审:评审是对软件工作产品质量的一次开会或汇签活动。
审计:审计是复查评审活动程序的合法性,是否按程序与规范进行
需求来源:系统目的、行业知识、软件涉众、运行环境和组织环境。
需求分析的目的:用于说明软件产品或软件项目需要满足的条件和限制。
需求分析是对提取的需求进行分析整理,主要完成以下工作:1、需求分类,将相关需求组织成一个子集;2、检查需求是否准确,是否存在二义性;3、检查和解决不同需求间的冲突;4、分析软件的边界,以及软件与环境是如何相互作用的;5、从系统需求中推导软件需求。
第5章 软件策划
软件策划的4个步骤
步骤 | 步骤名称 | 步骤内容 |
1 | 估计软件工作产品的规模、工作量、费用及所需的资源 | 软件工作产品,包括需求规格说明书,概要设计说明书,详细设计说明书,源代码,测试计划和测试报告,质量保证计划,软件配置管理计划,里程碑及评审点计划 |
2 | 制定时间表 | 包括开发进度时间表和管理进度时间表:软件开发计划、质量保证计划、软件配置管理计划、测试计划、评审计划 |
3 | 鉴别和评估风险 | 政策风险,资源风险、市场突变风险、技术风险和技能风险 |
4 | 与相关的组或人协商策划中的有关约定 | 策划的结果要实事求是,要得到各方面的同意和认可 |
软件评估:是指对软件项目进行量化估计,并记录估计结果的过程。软件估计是软件策划的核心,是软件策划的重点和难点。
软件项目规模评估的估计方法:希腊古都法、类比法、功能点估计法、无礼估计法。(要求可分清适用范围P107)
第6章 软件设计
《概要设计说明书》和《详细设计说明书》的差异?
答:《概要设计说明书》一是要覆盖《需求规格说明书》的全部内容,二是要作为指导详细设计的依据。因此,塔注重于框架上的设计。《详细设计说明书》一是要覆盖《概要设计说明书》的全部内容,二是要作为指导程序设计的依据,因此,它注重于微观上和框架上的设计。在一般情况下,《概要设计说明书》由系统设计师负责,《详细设计说明书》则有高级程序员负责。
软件价格应描述以下问题:(1)软件系统镇南关包含了那些子系统和部件。(2)每个子系统和部件都完成那些功能。(3)子系统和部件对外提供或使用外部的哪些接口。(4)子系统和部件间的依赖关系,以及对实现和测试的影响。(5)系统是如何部署的。
OOA模型采用分层次结构划分为5层,它们分别是对象-类层、属性层、服务层、结构层和主题层。
OOD体系结构的4个部分内容:问题论域部分、人机交互部分、任务管理部分和数据管理部分。
第7章 软件建模
功能模型:描述系统能做什么,即对系统的功能、性能、接口和界面进行定义。
业务模型:描述系统在何时、何地、由和角色、按什么业务规则去做,以及做的步骤和流程,即对系统的操作流程进行定义。
数据模型:描述系统工作前的数据来自何处,工作中的数据暂存什么地方,工作后数据放到何处,以及这些数据之间的关联,即对系统的数据结构进行定义。
业务模型的描述方法有:组织结构图,岗位(或角色)职能表,业务流程图加上业务规则说明。
功能模型在需求分析时的表示方法有:系统功能需求列表、性能需求列表、接口需求列表、界面需求列表。
数据模型的描述方法有:系统的CDM(概念数据模型,即E-R图)和PDM(物理数据模型,即物理表),以及相应的表结构。
第8章 软件实现
从宏观上讲,软件实现包括详细设计、编码实现、单元测试和集成测试。从微观上讲,软件实现是通过编码、调试、单元测试、集成测试等活动创建软件产品的过程。软件的实现与软件的设计、软件的测试密不可分。
构件:就是标示的且可以被复制的软件制品。
构件的三个特点:可明确被标识、可复用和是软件制品。
程序设计风格的内容包括:规范化的程序内部文档、数据结构的详细说明、清晰的语句层次结构、遵守统一的编程规范。
编程规范的内容包括:命名规范、界面规范、提示及帮助信息规范、热键定义规范等。
软件实现的原则: 1、尽可能的简单 2、易于验证 3、适应变化 4、遵守一个编程规范 5、选择项目组成员最熟悉的工具或语言。
代码重构:代码重构是软件进化的重要手段,定义为“对软件内部结构的修改,使之更容易理解和修改,但不改变软件的对外可见的行为”。需要重构的地方 例如: 重复代码、函数过长、循环过长或嵌套过深、类的内聚性差、方法传递过多的参数、平行类修改、平行修改CASE语句、方法过多使用其他类的成员、公共的数据成员。
界面设计遵从的原则:界面简洁朴素、控件摆放整齐、颜色风格统一、照顾客户的习惯。
项目如果无法按时完成,可以采取以下方式处理:增加开发人员、减少项目的内容和重新认识2 8定律。
提示信息的分类(注意区分):1、引导性提示信息 2、错误性提示信息 3、状态行提示信息 4、位置性提示信息。
第9章 软件测试
软件测试定义:软件测试是为了发现错误而执行程序的过程。
软件缺陷:符合下面五个规则之一的就是软件缺陷1.软件未达到产品说明书标明的功能。2.软件出现了产品说明书指明不会出现的错误。3.软件未达到产品说明书未指明但应达到的目标。4.软件功能超出产品说明书指明的范围。5.软件测试人员认为软件难于理解,不易使用,速度缓慢,或者最终客户认为不好。
详细设计
|
概要设计
|
需求分析
|
集成测试
|
系统测试
|
验收测试
|
编码
|
单元测试
|
测试需求分析
|
系统测试设计
|
集成测试设计
|
编码测试用例
|
单元测试
|
集成测试
|
系统测试
|
验收测试
|
软件测试V模型 改进的软件测试V模型
黑盒测试:又叫功能测试。盒子指的是被测试的软件,“黑盒”就是只知道被测软件的外部情况,主要是界面和接口,被测软件的内部逻辑结构和数据结构,对测试人员是不可见的。黑盒测试的方法有:等价分类法、边界值分析法和错误推测法。
白盒测试:对程序执行路径的测试。白盒测试的方法有:逻辑覆盖测试、循环测试和基本路径测试。
回归测试:在软件发生修改之后,重新执行原有已执行过的测试用例,以保证修改的正确性,为此目的展开的测试工作成为回归测试。
Alpha测试:Alpha测试时开发人员或者测试人员在场,客户在开发环境下使用软件,也称为受控测试。
Beta测试:就是将软件的Beta版本交给大量典型客户,由他们从客户的角度出发在实际环境中使用软件。
以下注意区分:
通过测试:简单说就是验证软件至少能做什么,而不会考验其能力有多强。
失败测试:纯粹是为了验证软件在某一条件下,是否会出现异常、停止工作等现象而进行的测试。
负载/压力测试:一方面,可以通过减少软件需要的资源(内存、磁盘空间、网络资源等),来测试出软件运行的最低配置或最低资源需求;另一方面,可以正常提供软件需要的资源,但是通过不断加重软件要处理的任务,来测试软件在正常配置下能够具有的能力指标。
易用性测试:易用性测试的目的很明确,但是标准不容易确定。易用性涉及的范围也比较广,例如安装易用性、功能易用性、界面易用性,甚至是针对听力、视觉、运动和认知有缺陷的客户,软件体现出的易用性等等。
边界值测试:专门针对软件需要从外界(客户、接口程序)获取数据的地方,提供数据的边界值,验证程序是否对边界值进行正确或合理的处理。
兼容性测试:可以测试软件与软件的兼容性。例如软件与操作系统、数据库、中间件、浏览器和其他支撑软件的兼容性,同一软件不同版本之间的兼容性,同一类软件对不同数据格式的兼容性等等。还可以测试软件与硬件的兼容性。例如软件与CPU、主版、显卡、声卡等硬件的兼容性。
测试计划的步骤:1.确定测试需求2.排序测试需求3.定义测试策略4.估计测试工作量5.配置测试资源。
第10章 软件发布与实施
软件项目与软件产品的区别:软件产品是指不局限于特定业务领域,能被广大用户直接使用的软件系统,如操作系统,编译系统。软件项目是指针对特定业务领域需要提供业务流程重组与优化的软件系统,如MIS,ERP,电子商务。
客户化与初始化的区别:客户化是指按照客户的实际需求,对软件产品的功能,性能,接口做适当的改动。
初始化是指按照客户的实际情况,对软件产品的代码表进行初始化,即将客户的各种信息编码录入到相应的代码表中。初始化工作简单,客户化工作复杂。客户化工作中包含了初始化工作,初始化工作只是客户化工作的一小部分。
产品发布方式:1.聘请各有关领导,新闻媒体,召开新闻发布会,宣布新产品的优点,描述其市场前景,现场演示介绍,厂商给嘉宾和客人送产品资料和纪念品。2.在报纸,刊物,电视台,电台上做广告,宣传软件产品。3.在各种交易会,展览会,博览会上租用摊位,展示软件产品。
第11章 软件维护
软件维护定义:是指软件项目或产品在安装,运行并交付给用户使用后,在新版本升级之前的这段时间里,软件厂商向客户提供的服务工作。
软件维护的4类:1.纠错性维护2.适应性维护3.完善性维护4.预防性维护
结构化维护的前提:软件产品会软件项目必须有完善的文档,并且文档与程序代码互相匹配,两者完全一致。
结构化维护与非结构化维护的区别:结构化维护会比较省力而且维护后可以用原来的测试用例进行回溯测试。非结构化测试 是软件产品或项目只有程序没有文档,或者文档很不规范,很不齐全。
防止副作用的措施:1.用SW—CMM框架体系的思想来改善企业软件的过程管理2.在开发和维护中,尽量使用CASE工具3.维护完成后一定要进行回归测试4.自始至终保持文档,数据,程序三者的一致性。
第12章 软件过程管理
软件生存周期:从某软件产品研发到软件不再使用为止的时间间隔,软件生存周期一般包括:需求阶段、设计阶段、实现阶段、测试阶段、安装与调整阶段、运行和维护阶段、有时还包括退役阶段。
CMM的5个等级描述:1、初始级(组织内部是人治,是英雄创造历史);2、可重复级(项目管理级,在组织内部重复使用项目管理的成功经验);3、已定义级;4、已管理级;5优化级。
阶段式模型与连续性模型的区别:阶段式模型表示集中于用成熟度等级来度量组织的过程改进程度,连续式模式表示集中于用能力等级来度量某个过程域的改进程度。
第13章 软件配置管理
软件配置管理活动的目标:为了标识更改,控制更改,确保更改,并向其他有关人员报告更改。从某种角度讲,软件配置管理是一种标识、组织和控制更改技术,目的是使有变更而引起的错误降到最低,有效地保证产品的完整性和生产过程的可视性。
软件配置定义:在软件开发过程中,将软件的文档、程序、数据进行分割和综合,以利于软件的定义、跟踪、管理、使其最终形成受控的软件版本产品,这一管理过程成为软件配置管理。
存取控制:存取控制通过配置管理中的3个库来实现:1、软件开发库:2、软件基线库;3、软件产品库。
在软件开发库中,程序员每次上机后“Check out”,下机前“Check in”的那个库就是软件开发库。
第14章 软件质量保证
软件质量:供方提供的软件产品满足用户明确和隐含需要的能力特性的总和
质量管理的三个层次:(1)质量管理的预防措施:制定软件过程开发规范和软件产品质量标准,对软件生产和管理人员进行这方面知识和技能的定向培训,这是软件质量保证的预防措施。(2)事中的质量跟踪监控措施:按照CMM或ISO9000的过程管理思想,对软件过程和软件产品的质量控制提供可视性管理,这是软件质量保证过程的跟踪监控措施。(3)事后的纠错措施:对软件工作产品和软件产品加强评审和检测。评审是在宏观上把握方向,在微观上挑剔细节,找出不符合项。检测是为了发现bug,改正错误。这是软件质量保证过程在纠错措施。
软件质量保证措施应以提前预防和实时跟踪为主,以事后测试和纠错为辅。
软件质量保证文档是《软件质量保证计划》,又称为《SQA计划》
第15章 软件培训
一般而言,培训的对象有企业内部员工和企业外部客户,员工培训由软件企业的人力资源部门负责,客户培训由事业部门或客户服务中心,项目组内部的临时培训由项目经理负责。
第16章 软件项目管理
项目的定义:项目是一次性的多任务工作,它具有确定的开始日期、结束日期、工作范围,经费预算、质量标准,以及特定的功能、性能和接口要求。
项目管理的定义:项目管理是为了实现项目目标,运用相关的知识、技能、方法与工具,对项目的计划、进度、质量、成本、资源进行管理和控制的活动。