内 容 简 介本书由台湾软件工程领域领军人物李允中教授执笔,结合软件产业与当前教育,较为全面地介绍了软件工程的重要概念和专业知识,培养学生在理论及应用上的系统整合能力,从系统的角度来看待整个项目。全书共10章,内容涵盖软件危机及软件开发流程、需求工程、面向对象软件开发、软件设计、软件项目的计划与管理、软件的配置与管理、软件工程的数学理论基础、软件过程改进等。本书内容丰富,讲解清晰、易懂,并提供真实的项目案例,帮助读者领悟真实的项目开发的困难和过程,从而意识到软件工程的好处。本书适合作为高等院校计算机专业的教材,也可供项目管理及开发人员参考。
前 言 编写本书的目的在于提供完整的软件工程思想及范例,引导读者跳出以组件方式看待软件的框架,而改以系统的方式来看待整个软件项目。 本书内容共包含10章。第1章介绍软件过程,合适的过程可以有效地开发系统,不合适的过程则会延迟项目的进行。组织或开发团队必须依照自己的特性去设计自己的过程,本章所提仅是大架构上的过程模式,组织可以通过定义合适的过程来改善软件开发的效率与产品的质量,让软件开发过程与企业文化相融合。 第2章认识需求工程。需求工程是软件开发的第一步,是后续设计、开发、实现的基础。如果需求定义上出了问题,即使有好的设计与实现能力,也终究会产出不合使用者要求的产品或系统。然而,要建立正确的需求并不容易,它需要来自各种不同观点的分析方法、沟通技巧与专业的领域知识。除此之外,需求的管理更是一门学问,许多项目因为没有妥善地管理需求的变化,导致系统不断地发散扩张而无法结束。本章的主题在于阐述需求撷取、建立与管理的方法和技巧。 第3章深入了解面向对象软件开发,面向对象软件开发方法的主要概念,是将真实世界以对象封装思想进行建模。其包含四个阶段:企业建模、面向对象分析、面向对象设计与面向对象实现。企业建模是针对用户需求加以分析,建立系统的用例模型与领域模型。在面向对象分析阶段,即针对每个用例进行分析,利用互动图描述对象之间的信息交换,以完成用例所需求的功能。在面向对象设计阶段,则依据分析阶段的结果,再加以细部设计转换成具体的软件系统模型。当细部设计完成后,程序设计人员便可以建立的设计图为蓝本来实现面向对象的软件系统。 第4章阐述软件设计的基本概念,从软件设计概念、软件设计策略与方法、软件设计规格书撰写,以及进阶设计概念等方面来描述软件设计的相关知识,希望读者在学习软件设计的技术知识时,能够同时受到工程化思维方式的训练。主要内容包含架构设计、接口设计、数据结构设计以及算法设计。本章强调软件系统分析与系统设计的分工与对应,尤其着重于软件架构设计对于大型软件系统开发的重要性。 第5章主要探讨软件项目的计划与管理。如同软件系统开发,为了能更有效地执行软件项目,软件项目的计划与管理引进了过程(Process)的概念,软件项目管理过程配合软件项目管理计划,对于项目的执行将有莫大的帮助。软件项目的生命周期大致可分成初始(Initial)、计划(Planning)、执行(Execution)与结束(Closure)四个阶段。软件项目过程的工作,必须考虑项目是否应该进行、如何开始进行,以及有哪些项目应列入考虑,进而形成一份计划书,然后根据这份计划书进行项目的执行、管理与监控,直至该软件项目完成。项目管理工作执行的切实与否,对软件项目开发过程能否顺利进行具有相当重要的影响。 第6章谈软件测试。在软件开发过程中,可能因为人为疏失、沟通不良而造成规格不符、设计错误或程序编写疏漏等问题,这些问题不仅延误软件开发的时间,更有可能导致软件开发成本的增加,甚至严重影响软件的质量。为了找出因上述各种因素造成的软件错误、瑕疵与损害,需要软件测试的相关技术来保证软件系统的质量。在对软件过程、开发与管理有了基本认识之后,第7章将软件质量的概念引了进来。在我们的生活中,有许多因软件质量管理缺失而导致的非预期事件发生。例如,与铁路、公路相关的售票系统,曾发生售票出现重复的情况,这样不仅对旅客购票造成很大的困扰,也使得企业的形象受损。由此可见质量的控管对软件项目的重要性。本章讲解软件质量的概念、质量管理工作的内容,并介绍提升软件品质的方法。 第8章介绍软件配置管理及其工作内容。在软件开发中,管理软件版本、建立软件基准与控制软件变更是不可或缺的。有太多的软件项目因为软件变更的管控不当而导致重大损失,甚至是整个项目的失败。若能真正落实配置识别、配置控制、配置状态报告与配置审核等配置管理工作,则变更所造成的影响与损失将可得到妥善控制。 第9章将数学理论与软件工程方法相结合,称为软件形式方法论。在许多传统的工程领域中,如电子、电机、土木、机械等,其所发展出来的诸多方法论都有数学理论作为基础,数学分析在这些产品设计方法中也成为开发过程中基本的一环。但在软件工程领域中并非如此普遍,即使软件工程的数学理论研究发展至今已有近三十年的历史,却也仍然没有被广泛地应用到实际的软件开发方法论中。本章将讨论以数学为基础的软件形式方法论在软件开发中的应用,同时还将探讨所面临的挑战。整体而言,软件形式方法是值得软件开发人员学习的主题,对于提供高质量的软件有相当大的帮助。本章的主题着重探讨软件工程与形式方法论的关系,以及如何通过形式方法的应用,提高所开发软件的质量与可靠性。 本书的第10章将带领读者认识对软件开发具有重要影响的软件过程改进方法,尤其针对美国卡内基梅隆大学软件工程研究所研发出来的能力成熟度整合模型集成(CMMI)进行了概要式的探讨,让读者可以了解以CMMI模型为基础的过程改进方法。基于本书前述章节的探讨分析,相信读者它十分了解软件本身有着本质上的问题及困难,而软件工程的各种工程层面及管理层面的各项方法,便是为了能够逐步克服与减缓这些软件与生俱来的复杂性、易变性、隐藏性及一致性等问题,进而通过系统性的软件过程改进,让开发团队能循序渐进、阶段性地学习如何与软件共舞。 本书最后以一个软件开发的真实案例,引导读者体会真实的软件开发的困难与过程,了解需求管理是如何进行的,并希望通过此案例的安排,让读者能在理论与实际的对照中感受到软件工程及其相关的工程方法所带来的实质好处。至于各章节中的相关关键词汇,本书统一整理汇编成附录B“词汇对照表”并附于书后,以方便初步接触软件工程的读者对照参考,帮助理解书中的基本概念与内容。 最后,我希望对郭忠义、薛念林、潘健一、赖联福、徐国勋、范姜永益、吴佳磷、李文廷、王跃强、邓焕友、马尚彬、李信杰、Carol Lai、Maggie Wu、Ariel Chou、Stella Chang、Mandy Lin、Ariel Hsu等人士为完成本书所做的贡献表达由衷的感谢。 李允中