几十年来,伴随着计算机科学技术的进步,软件工程得到了飞速发展,可以说,现在人们已经离不开软件,软件无处不在,这样,如何用工程化的方法设计和开发软件就显得十分重要。在20世纪90年代初,中国计算机学会教育委员会及全国高等学校计算机教育研究会就把软件工程列为计算机学科中的专业必修课和主干课。之后,中国计算机科学与技术学科教程研究组将其列为核心课程,可见软件工程课程的重要程度和作用是很大的,现在各高校信息类专业基本都设软件工程课程,有的学校甚至设为全校公共选修课,说明对其重视程度是很高的。
为了适应软件工程教育日益重要的形势,在清华大学出版社汪汉有老师的策划下,根据出版社规划,作者依据软件工程课程体系及学科要求按照软件的开发过程进行了全书组织。本书体系完整,讲述上尽量使其符合学生学习知识的规律,避免引入高深的理论,每章后都附有习题,学生在认真学完每章内容后,再完成后面的习题,即可达到教学目的并得到较好的学习效果。
本书的知识结构大体上可分为3个层次,可用图1表示。第一层次是课程的核心,建议重点讲授和学习。第二层次+第一层次构成学科的基础,包括基础理论、实用方法和基本技术。第三层次为学科扩展内容,在学时数能满足的情况下,可安排学习这部分内容。介于第二和第三层次之间的中间层内容既可放在第二层次也可放在第三层次,根据具体情况安排,甚至也可只选择指定章节中的部分内容。
教学建议: 对于学时数较少或设为公共选修课的学校,可采用第一层次实施教学的内容,这是该课程的核心,建议教学时数为32~40。若教学学时数在40以上,建议采用第一层次+第二层次实施教学的内容,这两部分是软件工程的基础。若教学学时数能达到60以上,可采用全部内容。
图1 软件工程知识结构及参考教学时数
全书共16章,第1章是概述,从计算机系统的总体开发过程出发,介绍软件、软件工程的概念以及软件生存期模型;第2章讲解在软件计划阶段的主要工作内容,包括确定软件范围、确定软件开发中的资源、估算软件成本(介绍了具体模型和技术)和安排软件开发进度;第3章是软件需求分析,讲解结构化需求分析方法、原型化需求分析方法以及面向对象方法;第4章是软件设计,介绍软件设计的有关概念,讲解了结构化设计方法、面向数据结构的设计方法以及面向对象的设计方法,简要介绍其他新的设计方法,本章还讲解了软件设计工具及程序复杂性的度量等相关内容;第5章介绍程序设计语言的分类、编码风格以及面向对象的编程语言;第6章讲解软件测试的步骤、策略、方法,面向对象的测试以及软件可靠性;第7章介绍软件维护的概念,讲解了软件的可维护性含义、提高可维护性的方法以及软件再工程方法;第8章是软件复用,介绍软件复用概念、领域工程、可复用构件的建造和复用以及面向对象的软件复用技术;第9章是面向对象的软件工程,系统地讲解了面向对象的基本概念,介绍面向对象建模及统一建模语言UML,讲述了面向对象的软件需求分析及设计过程和方法,给出了2个实例;第10章讲述软件质量保证的有关内容,介绍了ISO9000质量标准,给出软件质量预测模型及应用;第11章是软件的技术度量,包括软件分析模型的度量、软件设计模型的度量、源代码度量、软件测试的度量、软件维护活动的度量以及面向对象的度量;第12章介绍软件开发工具与环境;第13章是软件工程管理,讨论软件工程文化、现代人件、软件风险分析与管理、软件配置管理、软件工程标准化以及软件的知识产权保护等课题,本章还介绍金尊和先生所提出的软件工程36计;第14章是软件过程管理,讲解由SEI提出的软件能力成熟度模型(CMM)以及个体软件过程(PSP) ;第15章讲述基于构件的软件工程(CBSE) ,包括CBSE基本概念、可复用构件的分类与查询、基于构件的软件重用成熟度以及构件技术的应用;第16章是应用Web工程,介绍WebApp项目的计划、分析、设计及测试。每章最后都有该章内容的小结和习题,便于读者总结和练习。
本书系统介绍了软件工程学科的重要内容,既能满足软件工程课程的教学需求,同时又能为工程技术人员及管理人员提供参考。在本书编写过程中,郑州轻工业学院的张超钦、尚展垒参加了部分章节的编写工作。本书作者长期从事软件工程教学和科研,因而,本书也是作者教学和科研成果的总结。由于软件工程是一门快速发展的学科,先进技术不断出现,因而,虽然是基础教程但在书中也尽量对发展中的新技术有所反映,以便学生在学习该课程的过程中能感受到该学科的“脉搏”跳动,使学生能适应学科的发展。书中除参考了教学计划和教学大纲外,也参考了国内外大量同类文献,在此对所有参考文献的作者表示感谢,对华北电力大学的支持表示感谢,感谢清华大学出版社的支持和帮助。
宋 雨
2012年
