第一章、 概述 软件是人类思维的杰作,并成为人类现代生活的催化剂。今天软件遍布整个世界,在生物工程、现代通信、宇宙探索、商务处理、工业控制等方面发挥出巨大的威力,并推动了商业、科学和工程领域的跨越式发展,对整个社会的经济和文化产生了深远的影响。软件工程师为了解决开发成本效益和软件质量的问题而产生的。软件是计算机程序、规程以及运行计算机系统可能需要的相关文档和数据。软件分为通用软件和定制软件。软件的特性分别是软件是复杂的、软件是不可见的、软件是不断变化的、大多数软件是定制的而不是通过已有构件组装而成的。软件工程是将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,即将工程化应用到软件上。软件工程的三要素分别是方法、工具和过程。软件开发的主要挑战是遗留系统的问题、高可信软件开发的要求和软件开发方式的变化。软件工程人员的职业道德建设:1、遵纪守法是软件工程人员应具备的基本素质;2、服务客户、造福社会是软件工程人员必须牢固树立的观念;3、诚实信用是软件工程人员职业道德的核心所在。
第二章、 软件工程 软件工程的目标是在规定的时间和预算内开发出高质量的软件。软件工程的基本活动是问题提出、软件需求规格说明、软件设计、软件实现、软件确认和软件演化。软件过程模型有瀑布模型、快速原型模型、增量模型、螺旋模型、形式化方法模型、基于组件的开发模型。
第三章、 软件项目管理 随着计算机应用的飞速发展,软件开发规模和开发队伍日益庞大,软件开发不再像过去那样是由个别开发人员即可以解决的事情,因此,有必要将软件项目管理引入软件开发活动中,从而有效的保证软件项目能够按照预定的成本、进度、质量要求顺利完成。软件项目的特征有软件产品的不可见性、项目的高度不确定性、软件人员的高流动性。软件项目管理集中于四个方面:人员、产品、过程、项目。软件项目的组织有民主式组织结构、主程序员式组织结构、技术管理式组织结构。项目沟通活动:规划项目沟通、建立基础设施、实施阶段性评审、每周组织小组会议。软件规模估算:代码行技术、功能点技术。软件成本估算:专家判断、类比估算、COCOMO模型。软件工程风险识别:软件规划风险、商业影响风险、客户相关风险、软件过程风险、开发技术风险、开发环境风险、开发人员风险。
第四章、 需求工程 软件需求是决定软件开发是否成功的一个关键元素,一旦发生错误,将会给整个软件开发工作带来极大的损害,并给以后的软件维护带来极大的困难。软件需求分为:业务需求、用户需求、功能需求和非功能需求、系统需求。需求工程的过程:需求获取、需求分析、需求规格说明、需求验证、需求管理。需求获取技术:面谈、需求专题讨论会、观察用户工作流程、原型化方法、基于用例的方法。
第五章、 软件工程中的形式化方法 从广义上讲,形式化方法是指将离散数学的方法用于解决软件工程领域的问题,主要包括建立精确的数学模型以及对模型的分析活动。狭义的讲,形式化方法是运用形式化语言,进行形式化的规格描述、模型推理和验证的方法。将形式化方法运用于软件工程实践的过程中主要是为了保证软件的正确性。
第六章、 面向对象基础 面向对象技术是软件工程领域中的重要技术,这种技术比较自然的模拟了人类认识客观世界的方式,成为当前计算机软件工程学中的主流方法。面向对象的基本概念有对象、类、封装、继承、消息、关联聚合、多态性。软件建模的概念有系统、模型和视图、软件建模的重要性。UML的概念模型有视图、图、模型元素、语义法则、公共机制、扩展机制。常用的UML图有用例图、类图、顺序图、状态图。
第七章、 面向对象分析 面向对象的分析模型由功能模型、分析对象模型、动态模型组成。识别分析类包括识别边界类、识别控制类、识别实体类。建立分析类图:兴义关系和属性、应用分析模式。
第八章、 面向对象设计 面向对象设计阶段将集中研究系统的软件实现问题,包括体系结构设计、详细设计、用户界面设计和数据库设计等。设计的原则有模块化、耦合度和内聚性、复用性。软件体系结构:仓库体系结构、分层体系结构、MVC体系结构、客户机/服务器体系结构、管道和过滤器体系结构、案例:MiniLibrary系统体系结构。系统设计:识别设计元素、数据存储策略、部署子系统系统设计评审。详细设计:方法建模、属性建模、状态建模、关系建模、详细设计评审。应用设计模式:Abstract Factory模式、Adaptor模式、Bridge模式、Façade模式。用户界面设计:用户界面设计原则、Web界面的设计、用户支持。
第九章、 软件实现 软件实现是软件产品由概念到实体的一个关键过程,它将详细设计的结果翻译成用某种程序语言编写的并且最终可以运行的程序代码。软件编码规范:文件命名与组织、带码的板式、命名规则、声明、注释。
第十章、 软件测试 验证与确认:软件的错误、验证与确认、V&V的活动。软件的测试策略:单元测试(模块接口测试、局部数据结构测试、重要执行路径测试、错误处理测试、边界条件测试、单元测试方法)、集成测试(自顶向下集成、自底向上集成)、确认测试、系统测试、软件调试(简单的调试方法、归纳法调试演绎法调试、回溯发调试)。软件测试方法:静态测试与动态测试、黑盒测试与白盒测试
第十一章、 软件演化 软件维护的概念:软件维护是指在软件运行或维护阶段对软件产品所进行的修改,分别有改正性维护、适应性维护、完善性维护。软件维护的特点:软件维护手开发过程影响大、软件维护困难多、软件维护成本高。软件再生工程:对象选择、反向工程、文档重构、代码重构、数据重构。