图书前言

软件工程是一门实用性很强的工程方法学,是软件开发者——软件项目负责人、软件分析师、软件设计师、程序员、测试员开发维护软件时的作业指南。

20世纪60年代,软件开发遭遇到了危机困境——开发成本进度难以控制,产品不能满足用户需求,程序容易出错、难于维护。诸多危机现象引发了软件开发者的心理恐慌。软件工程即诞生于这样的背景之下,其谋求对软件开发维护能有方法上的指导,规则上的约束,以使得面对有待开发的复杂软件系统,开发者能更具预见力与信心。

软件工程影响着软件产业的发展。软件工程研究如何有效地提高软件产业的生产率,以及如何更高效率地生产出更高质量的软件产品。实际上,软件工程人才已越来越受到软件业界重视。可以看到的是,软件工程师代替了早期程序员,成为软件开发中的技术骨干。然而,需要注意的是,不只是软件工程师需要具备软件工程知识与技能,而是所有参与软件开发的人——技术人员、管理人员、产品客户,都应该具备一定的软件工程知识与技能,由此才能保证软件工程规范方法顺利实施于工程项目并产生真正的工程实效。

软件工程在随着软件的产业化发展而进步,并随着其有成效的工程应用而不断完善。应该说,目前的软件工程已是计算机科学领域中的一个重要分支,已有了结构化、面向对象等比较成熟的工程方法学体系,并已有了对技术、管理、经济的比较全面的工程方法支持。然而直至今天,它还仍处于成长发展之中,仍然非常年轻。因此,摆在学习者面前的就不仅是学习继承,还必然面临更加深入的工程探索。

本书是为高校计算机专业本科、研究生学习软件工程而写的,然而本书也可作为软件开发人员的技术参考书,或用做软件工程自学读本。本书的创作宗旨是,知识性、工程实用性、一定的前沿探索性。全书共17章,其中第1~3章为软件工程方法基础知识,用于预备性学习,如: 积累必要的工程知识,提出项目问题,组织适宜于工程实践的项目学习团队; 第4~15章为主流的结构化、面向对象方法,其基于软件生存周期进行内容编排,以方便开展工程实践,主要内容有系统工程、需求分析、概要设计、结构化建模、面向对象建模、数据库设计、界面设计、算法设计、软件测试、软件维护; 第16章介绍了一些有代表性的非主流工程方法,内容有敏捷工程方法、净室工程方法、Z语言形式化说明,它们是对主流方法的补充,并有一定的理论探索价值; 第17章则是一个有较完整UML建模描述并已基于Java、C++完全编码实现的工程案例,可供学习者做课程设计参考。

本书的重点是软件分析与设计,并主要体现为分析设计建模。对于分析设计建模,本书有以下方面的教学考虑,其应该有利于学习者更好地把握建模方法。

其一,学习建模不能仅限于识别图形元素或看懂图表,还应该学会如何基于一定的流程,并通过一定的建模方法,对软件问题进行模型演变,由此使软件问题求解。因此,本书中无论结构化建模或是面向对象建模,都有较好的基于案例的由分析到设计的全过程推演,以反映软件系统构建的严密性。

其二,结构化分析中的数据流细化建模一直是一个学习难点,其实它也是一个实际建模中的应用难点,即不知该如何进行功能细化。对此,本书基于业务树实现功能逐级分解,可使这个难点得以较好处理。显然,其具有教学意义,同时也有一定的工程参考价值。

其三,结构化方法中基于数据流的程序结构映射,许多人认为实用性不大,主要是认为其与实际程序结构并不一致。对此,本书基于结构优化,而将映射结构转变为实际程序结构,由此使结构化程序建模更具有说服力。

其四,统一开发过程中的面向对象建模是基于用例驱动的,由此可使对系统的业务分析,能延伸到系统的结构设计、过程设计、界面设计、安装部署。然而,以往的大多数教科书,仅局限于纲领性说明,而并无实际建模演示,因此也就看不到用例驱动的实际价值。对此,本书有较好的基于案例的用例驱动建模过程说明,如分析中基于用例的活动建模,设计中基于用例的类结构建模、对象协作建模,诸多案例无不体现出用例驱动的价值。

一个不应成为问题的问题是,软件工程是教条式理论吗?显然,它不是!虽然它被置于一个很高层次的理论地位,但它却不是教条。然而,却有可能出现教条式学习。解决这个问题的办法是,不要去想如何记住其方法规则,而要去想如何用好用活其方法规则。

实际上,软件工程有很强的工程实践性,其一系列的方法规则就建立于工程实践基础上。无疑,这个实践性必然会对软件工程教学有所要求。对此,作者的理解就是有用、能用、实用。显然,经过软件开发者长期实践与努力探索而获得的工程方法,肯定是有用的,值得认真学习。然而,有用还只能体现出软件工程的知识特性,若要使这些知识转化为学习者的能力,则必须能用。通常的看法是,案例教学有利于培养学习者能力。本书提供了较丰富的案例,其目的就在于培养学习者能力,以使书中知识能够被学习者用起来。软件工程教学还要求实用,可用来解决实际问题。对此,可采取项目方式进行工程实践,其有利于知识、能力与实际应用的结合,由此可使软件工程学习具备实用性。

本书篇幅不长,但却已涉及软件工程的方方面面,内容并不少。也因此,如要完成本书全部内容教学,则必须要有足够的教学课时。一般需要安排50~60理论教学课时。

下面是对本书各章的教学要求与理论课时分配,可供实际教学参考。

 第1章软件工程概述(4课时)教学要求: 了解软件工程的工作对象、发展背景、内容、目标。该章还介绍了三个常用的软件工具(Microsoft Visio、PowerDesigner、Rational Rose),后续章节中的模型即由这些工具创建。

 第2章软件开发过程模式(2课时)教学要求: 了解软件生存周期,搞清楚软件开发过程,熟悉几种常用的软件过程模式的特点与用途。

 第3章软件项目管理(4课时)教学要求: 了解项目管理内容(对项目的管理、对项目成果的管理),搞清楚如何制定项目计划,并学习使用甘特图、任务网络图(由Microsoft Project创建)制定项目计划。可在该章启动项目实践,涉及建立项目组,建立项目评价机制,以使学习者对项目管理有更直观的认识。

 第4章计算机系统工程(2课时)教学要求: 熟悉如何从全局的计算机系统角度考察软件问题,熟悉如何对软件项目做可行性分析。该章还涉及系统初步建模,其中的系统框架图、系统流程图,可由Microsoft Visio中的基本流程图创建。

 第5章需求分析(2课时)教学要求: 了解需求分析任务及过程,并熟悉如何获取业务需求、建立业务模型、进行需求验证。可通过Microsoft Visio中的组织图创建业务树,通过Rational Rose创建业务用例、业务活动。

 第6章结构化分析建模(4课时)教学要求: 搞清楚为什么要建立分析建模,应该从哪些方面建立结构化分析模型,并学习使用相关图形语言建立结构化分析模型。可通过PowerDesigner创建实体联系图,通过Microsoft Visio创建数据流图,通过Rational Rose创建事件状态图。

 第7章基于UML的面向对象分析建模(4课时)教学要求: 搞清楚应该从哪些方面建立面向对象分析模型,学习使用UML建立面向对象分析模型。可通过Rational Rose进行面向对象分析建模。

 第8章概要设计(2课时)教学要求: 了解概要设计任务及过程,熟悉系统构架、数据结构、程序结构等概要设计内容。

 第9章结构化设计建模(4课时)教学要求: 熟悉结构化设计建模工具,学习如何基于数据流进行程序结构映射,如何对程序结构进行优化。该章中的程序结构图由Microsoft Visio创建。

 第10章基于UML的面向对象设计建模(6课时)教学要求: 搞清楚面向对象设计建模内容,学习使用UML建立面向对象设计模型(逻辑结构、动态过程、物理装配与部署)。可通过Rational Rose进行设计建模。

 第11章数据库设计(2课时)教学要求: 熟悉数据库体系结构,搞清楚数据库设计内容及要求,包括结构设计、访问设计。可通过PowerDesigner设计数据库。

 第12章用户界面设计(2课时)教学要求: 了解界面设计特点、界面类型、界面功能,熟悉界面设计方法。可通过Rational Rose中的状态图建立界面行为模型。

 第13章算法设计与编码(4课时)教学要求: 熟悉几种常用的算法设计工具,学习使用Jackson方法设计程序算法,对算法复杂度评估、程序编码等有所了解。

 第14章软件测试(4课时)教学要求: 了解软件测试方法、任务,学习设计测试用例,熟悉面向对象测试、程序调试、测试工具。

 第15章软件维护(2课时)教学要求: 了解软件维护分类、软件可维护性,熟悉如何维护软件,如何对老系统做再工程改造。

 第16章非主流工程方法(4课时)教学要求: 了解敏捷工程方法、净室工程方法、Z语言形式化规格说明。可通过与主流方法的比较而进行问题讨论。

 第17章软件工程案例(2课时)教学要求: 熟悉该工程案例,并参考其进行课程设计,以达到对软件工程较全面的并具实用的把握。

通常情况下,还需要考虑安排10~20教学课时,进行软件工程项目实践。当然,工程项目实践特别耗时,因此一般是作为实践作业由学生在教学课时以外自主开展,然而教师的组织、指导与评价则仍必不可少。工程项目实践最好是分段进行,可考虑分为以下4段: 项目任务启动、软件系统分析、软件系统设计、项目评价。

还需要注意的是,基于项目的工程实践的成效,特别依赖于教师的精心组织。对此的建议是,三人一组进行项目实践,并以组为单位进行整体评价,但各成员应有特定任务,以方便对各成员做个体评价。这种模式的好处是,既可考察团队协作,又可体现个人成就。由于是团队合作,学习者大多有较高的工程实践热情,因此也就有较低的无效实践风险,能产生较好的实践效果。实际上,本书作者一直基于这种模式开展教学实践。

在本书创作过程中作者阅读了大量的图书文献。可以说,正是依靠这些极具价值的图书文献,作者的认识才更加深刻,创作思路才更加敏捷。这些图书文献已在书后参考文献中列出,读者在阅读本书之时,也可参读这些书籍而开阔视野。

本书由曾强聪教授执笔创作,赵歆承担了部分案例设计,并提出了很好的与教材相适应的教学模式建议,曾令江则承担了第17章工程案例的编程实现。

无疑,本书的创作是一件非常耗费心力的事情。首先是结构,它应该是严谨的。接着是语言,其应该既规范又流畅,以便于阅读,并能尽量吸引学习者去阅读。再接下来就是取舍内容、定义概念、描述方法、设计案例,等等。实际上,本书中的每一个细节都经过反复推敲,因为毕竟是教科书,很担心因工作疏忽而给学习者带来误导。

然而不得不说明的是,毕竟作者学识水平与时间都是有限的,因此本书难免仍有很多缺点与不足,对此特请广大读者批评指正,以使本书再版时能够不断完善。值得庆幸的是,软件工程仍在不断发展,因此本书的再版与完善也就是一件很自然的事情。

书稿完成后还邀请了王四春、熊署初教授,以及周新民、徐雪松、曹伟、刘震、周纳、罗毅辉、丁启华、王雷、杨文东等,就本书的结构、内容及教学模式等进行了专门研讨。无疑,这对提高本书质量是有益的。因此,特在此向他们表示感谢!

编者(zqc001@163.com)

2011年3月