软件工程
第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版本交给大量典型客户,由他们从客户的角度出发在实际环境中使用软件。
以下注意区分:
通过测试:简单说就是验证软件至少能做什么,而不会考验其能力有多强。
失败测试:纯粹是为了验证软件在某一条件下,是否会出现异常、停止工作等现象而进行的测试。
负载/压力测试:一方面,可以通过减少软件需要的资源(内存、磁盘空间、网络资源等),来测试出软件运行的最低配置或最低资源需求;另一方面,可以正常提供软件需要的资源,但是通过不断加重软件要处理的任务,来测试软件在正常配置下能够具有的能力指标
...