软件工程—理论、方法与实践
第一章 概述
软件是计算机程序、规程以及计算机系统可能需要的相关文档和数据。
软件一般分为通用和定制软件。
软件的特性:
1、软件是复杂的;
2、软件是不可见的;
3、软件是不断变化的;
4、大多数软件是定制的,而不是通过已有的构件组装的。
软件工程师为了经济的获得能够在实际机器上高效运行的可靠软件而建立和使用的一系列好的工程化原则。
软件危机
1、软件开发的成本和进度难以进行准确估计,延迟交付甚至取消项目的现象屡见不鲜;
2、软件存在着错误多、性能低、不可靠、不安全等质量问题;
3、软件成本在计算机系统的整个成本中所占的成本越来越大;
4、软件维护及其困难,而且很难适应不断变化的用户需求和使用环境。
第二章 软件过程
任务思维和过程思维
软件过程的定义:
软件过程是软件工程人员为了获得软件产品而在软件工具的支持下实施的一系列软件工程活动。
软件过程的基本活动
1、问题的提出;
2、软件需求规格说明;
3、软件设计;
4、软件实现;
5、软件确认;
6、软件确认。
软件过程模型
1、瀑布模型;
2、快速原型模型;
3、增量模型;
4、螺旋模型;
5、形式化方法模型;
6、基于组件的开发模型。
第三章 软件项目管理
软件项目管理概述:
1、软件项目的特征;
2、软件管理的“4P”;
3、软件项目管理活动:
a、项目启动;
b、项目规划;
c、项目实施;
d、项目收尾。
人员组织与管理
1、软件项目组织;
2、软件团队建设。
项目沟通管理
1、项目沟通复杂性;
2、项目沟通方式;
3、项目沟通活动。
软件项目规划
1、软件规模估算;
2、软件成本估算;
3、软件项目计划。
软件风险管理
1、风险意识;
2、风险分析;
3、风险规划;
4、风险监控。
软件配置管理
1、基本概念;
2、配置管理活动;
第四章 需求工程
软件需求
1、业务需求;
2、用户需求;
3、功能需求和非功能需求;
4、系统需求
需求工程过程
1、需求获取;
2、需求分析;
3、需求规格说明;
4、需求验证;
5、需求管理;
需求获取技术
1、面谈;
2、需求专题讨论会;
3、观察用户工作流程;
4、原型化方法;
5、基于用例的方法。
案例
1、确定参与者;
2、确定场景;
3、确定用例;
4、编写用例描述;
第五章 软件工程中的形式化方法
形式化方法基本概念:
1、形式规约;
2、形式证明与验证;
3、程序求精;
时态逻辑
1、一阶线性时态逻辑;
2、计算树逻辑;
模型检测
Z语言
1、概述
2、Z语言表示
3、Z语言实例
Petri 网
第六章 面向对象基础
面向对象技术手机软件工程领域的重要技术,这种技术比较自然地模拟了人类认识世界的方法,成为当前计算机软件工程学中的主流方法,面向对象技术不仅仅是一种程序设计方法,更是一种对客观世界的抽象思维。
面向对象技术的基本思想是从现实世界中客观存在的事物出发,尽可能地运用人类的自然思维方式来构造软件系统。它更加强调运用人类在日常的思维中经常采用的思想方法与原则,例如抽象、分类、继承、聚合、封装等,是开发者以现实世界中的事物为中心来思考和认识问题,并以人们易于理解的方式表达出来。
第七章 面向对象分析
在需求获取阶段,开发人员关注于理解用户以及他们的使用要求。而在需求分析阶段,开发人员关注于理解系统需要构建的内容,其核心是产生一个准确的、完整的、一致的和客验证的系统模型,称为分析模型。
面向对象的分析模型由三个独立的模型组成:
1、功能模型:有用例和对象图组成;
2、分析对象模型:有类图和对象图表示;
3、动态模型:由状态图和顺序图表示。
第八章, 面对对象设计
通常,设计活动划分成系统设计和详细设计等两个主要阶段,其中系统设计是选择合适的解决方案策略。而设计的原则有:模块化;耦合度和内聚性;复用性。
对于大型复杂系统来说,软件体系结构设计显得尤为重要,它的好坏往往会成为一个系统设计成败的关键。集中典型的软件体系结构有:仓库体系结构;分层体系结构;MVC体系结构;客户机/服务器体系结构;管道和过滤器体系结构。
在系统设计中,要识别设计元素,数据存储策略,部署子系统,系统设计评审。儿详细设计包括方法建模,属性建模,状态建模和关系建模等。集中常用的设计模式有Abstract Facatoty模式;Adaptor模式;Bridge模式;Facade模式。
用户页面设计对于一个系统的成功是至关重要的。一个设计的很差的用户界面可能导致用户很容易产生错误,甚至用户拒绝使用该系统。
第九章,软件实现
程序设计语言一直在不断地演化和演变,其发展经历了从机器语言到高级语言的过程
如今,人们不再过度的强调编码的技巧性,而是将代码可读性作为影响软件质量的一个重要因素。一些通用的编码规范有:文件命名和组织,代码的版式,(适当的空行;代码行及行内空格;分行、对齐、和缩进;命名规则;声明;注释)
编程风格在很大程度上影响着程序的可读性、可测试性和可维护性,甚至会影响到程序的执行效率。有程序注释问题,变量命名问题,异常处理问题,性能问题,
为了获得高质量的代码,有必要参照代码检查清单进行代码走查。
第十章 软件测试
软件危机曾经是软件界甚至整个计算机界最热门的话题。为了解决这个问题,软件从业人员,专家和学者做出了大量的努力。现在的人们已经逐渐认识到所谓的软件危机实际是一种状态,那就是软件中的错误,正是这些错误导致了软件在开发成本,进度和质量上的失控。
如今信息技术的飞速发展,是软件产品应用到社会的各个领域,软件产品的质量自然成为人们共同关注的问题。软件测试是软件质量保证的移向关键活动,它是通过对需求规格说明,软件设计说明和程序代码等进行复审,以保证在软件产品交付前,尽可能发现软件中潜伏的问题,大量的统计表明,软件测试工作量往往占软件开发量的40%以上,在极端的情况下,甚至可能高达软件工程其他步骤成本的综合的3~5倍。目前,随着软件规模的不断扩大,复杂程度的不断提高,特别是面对对象技术和工具的应用,软件测试的难度也在进一步提高。
第十一章,软件演化
软件在更改过程的验货特性。具体如下:软件维护是一个必然的过程;软件的不断修改会导致软件的退化;软件系统的验货特性实在早期的开发阶段建立起来的;软件开发的效率与投入的资源无关;在软件系统中添加新的功能不可避免的会产城新的缺陷。
根据软件维护的不同圆心,可以分为三种类型:改正性维护,适应性维护,完善性维护。
软件维护的特点:软件维护收开发过程影响大;软件维护困难多;软件维护成本高。
软件维护工作包括建立维护组织、报告、与评估维护申请、实施维护流程等步骤。
软件再工程主要包括:对象选择、反向工程、文档重构、代码重构、数据重构和正向工程等活动。