第1章软件工程概述1 1.1软件1 1.1.1软件的概念和特点1 1.1.2软件的分类2 1.1.3软件的发展历程3 1.2软件危机5 1.2.1软件危机及其表现5 1.2.2软件危机的启示6 1.3软件工程7 1.3.1软件工程的概念7 1.3.2软件工程的要素7 1.3.3软件工程的基本原则8 1.3.4软件工程知识体系9 1.4软件生命周期11 1.4.1软件生命周期的概念11 1.4.2软件生命周期的阶段划分11 1.5软件开发过程13 1.5.1软件过程13 1.5.2软件过程模型13 1.5.3软件开发方法21 1.5.4软件过程模型的选定23 1.6软件工程的相关规范24 1.6.1软件工程的标准化24 1.6.2软件工程文档编制26 1.7练习题28第2章软件项目管理30 2.1工作量估算30 2.1.1估算软件规模31 2.1.2专家判断33 2.1.3算法方法34 2.1.4机器学习方法36 2.2进度计划37 2.2.1基本原则37 2.2.2Gantt图38 2.2.3PERT图38 2.3项目人员40 2.3.1人员角色和特性40 2.3.2工作风格41 2.3.3项目组织42 2.4风险管理44 2.4.1风险评价44 2.4.2风险控制45 2.5质量保证46 2.5.1软件质量及特征46 2.5.2软件质量保证措施47 2.6配置管理48 2.6.1软件配置要素48 2.6.2配置管理过程49 2.7练习题50第3章可行性与计划研究52 3.1可行性研究52 3.1.1可行性研究的目的52 3.1.2可行性研究的内容53 3.1.3可行性研究的步骤56 3.1.4软件项目的立项57 3.2软件开发计划58 3.2.1软件开发计划的内容58 3.2.2软件开发计划文档59 3.3练习题60第4章结构化分析61 4.1需求分析概述61 4.1.1需求的概念61 4.1.2需求分析的重要性61 4.1.3需求分析的过程62 4.2结构化分析建模67 4.2.1结构化分析模型67 4.2.2数据建模68 4.2.3功能建模70 4.2.4行为建模74 4.2.5数据字典76 4.3汽车租赁系统结构化分析77 4.3.1系统需求描述77 4.3.2建立数据模型78 4.3.3建立功能模型79 4.3.4建立行为模型82 4.3.5系统数据字典82 4.4练习题83第5章面向对象分析85 5.1面向对象方法学概述85 5.1.1面向对象的概念85 5.1.2面向对象方法的要点87 5.1.3面向对象方法学的优点87 5.1.4面向对象开发方法88 5.2统一建模语言UML89 5.2.1UML简介89 5.2.2UML的概念模型90 5.2.3UML的应用范围94 5.2.4UML建模工具95 5.2.5使用UML的准则96 5.3面向对象分析建模96 5.3.1面向对象分析方法96 5.3.2功能模型98 5.3.3对象模型105 5.3.4动态模型112 5.4校园招聘系统面向对象分析119 5.4.1需求描述119 5.4.2用例分析121 5.4.3识别分析类124 5.4.4分析交互126 5.4.5统一分析类128 5.5练习题128第6章软件体系结构131 6.1软件体系结构概述131 6.1.1软件体系结构的组成131 6.1.2软件体系结构建模132 6.1.3软件体系结构的作用133 6.2软件体系结构风格134 6.2.1管道和过滤器134 6.2.2客户服务器135 6.2.3对等网络136 6.2.4发布订阅136 6.2.5信息库137 6.2.6分层138 6.2.7组合风格138 6.3质量属性和策略139 6.3.1可修改性140 6.3.2性能140 6.3.3**性141 6.3.4可靠性142 6.3.5健壮性143 6.3.6易使用性143 6.3.7商业目标144 6.4体系结构框架144 6.4.1MVC框架144 6.4.2MVP框架145 6.4.3J2EE框架146 6.4.4PCMEF框架147 6.4.5PCBMER框架147 6.5练习题148第7章结构化设计150 7.1软件设计概述150 7.1.1软件设计的目标150 7.1.2结构化设计的任务150 7.2软件设计的原则151 7.2.1模块化151 7.2.2接口156 7.2.3信息隐藏156 7.2.4抽象和逐步求精157 7.2.5通用性158 7.2.6结构化设计启发式规则158 7.3体系结构设计161 7.3.1描述软件结构的工具161 7.3.2面向数据流的设计方法163 7.3.3设计优化170 7.4接口设计171 7.4.1接口设计概述171 7.4.2人机界面接口172 7.5数据设计174 7.5.1数据库设计步骤174 7.5.2逻辑结构设计174 7.5.3物理结构设计175 7.6过程设计176 7.6.1程序流程图176 7.6.2盒图177 7.6.3PAD图178 7.6.4判定表179 7.6.5判定树180 7.6.6过程设计语言180 7.7软件设计文档181 7.7.1设计文档的内容181 7.7.2设计文档的评审181 7.8汽车租赁系统结构化设计182 7.8.1设计系统体系结构182 7.8.2设计数据库183 7.9练习题185第8章面向对象设计187 8.1面向对象设计概述187 8.1.1面向对象设计的基本原则187 8.1.2更复杂的面向对象设计原则189 8.1.3面向对象设计的启发规则192 8.1.4面向对象设计的基本任务193 8.1.5面向对象的设计模式194 8.2系统设计201 8.2.1系统分解201 8.2.2问题域部分的设计202 8.2.3人机交互部分的设计205 8.2.4任务管理部分的设计207 8.2.5数据管理部分的设计209 8.3对象设计212 8.3.1设计类212 8.3.2创建设计类213 8.3.3设计类间的关系215 8.4校园招聘服务系统面向对象设计219 8.4.1架构设计219 8.4.2用例设计219 8.4.3类设计221 8.4.4数据库设计223 8.5练习题225第9章软件实现227 9.1编程语言227 9.1.1编程语言的发展227 9.1.2编程语言的选择228 9.2编程的指导原则229 9.2.1控制结构229 9.2.2算法效率229 9.2.3数据结构230 9.2.4通用性指导原则230 9.3程序文档232 9.3.1内部文档232 9.3.2外部文档235 9.4编程过程236 9.4.1编程方法236 9.4.2编程风格237 9.5练习题239第10章软件测试241 10.1软件测试概述241 10.1.1软件测试的目标241 10.1.2软件测试的准则242 10.1.3软件测试的步骤242 10.2白盒测试技术243 10.2.1逻辑覆盖法243 10.2.2基本路径法246 10.2.3循环测试249 10.3黑盒测试技术250 10.3.1等价类划分法250 10.3.2边界值分析法253 10.3.3错误推测法253 10.3.4因果图法254 10.4软件测试过程257 10.4.1单元测试257 10.4.2集成测试259 10.4.3系统测试263 10.4.4测试文档269 10.5面向对象测试269 10.5.1面向对象测试和传统测试的区别269 10.5.2面向对象测试过程270 10.6自动化测试工具271 10.6.1代码分析工具271 10.6.2测试执行工具273 10.6.3测**例生成器273 10.7调试274 10.7.1调试过程274 10.7.2调试途径274 10.8练习题275第11章软件维护277 11.1软件维护概述277 11.1.1软件维护的定义277 11.1.2软件维护的实施278 11.2软件的可维护性280 11.2.1可维护性的度量280 11.2.2软件维护的副作用282 11.3自动化维护工具283 11.4软件再生284 11.4.1重组285 11.4.2文档重构285 11.4.3逆向工程286 11.4.4再工程286 11.4.5软件再生的前景287 11.5练习题287第12章从大学生到软件工程师289 12.1个人发展289 12.1.1软件工程师的任务289 12.1.2软件工程师的成长290 12.1.3软件工程师的思维误区291 12.1.4软件工程师的职业发展292 12.2团队合作293 12.2.1结对编程293 12.2.2如何影响他人294 12.2.3如何给予反馈294 12.3软件工程师伦理守则295 12.3.1PEO伦理守则295 12.3.2ACM/IEEE软件工程伦理守则和职业实践296附录A计算机软件文档编制规范301 A.1可行性分析(研究)报告(FAR)301 A.2软件开发计划(SDP)302 A.3软件需求规格说明(SRS)304 A.4软件(结构)设计说明(SDD)307 A.5软件测试计划(STP)308 A.6软件测试说明(STD)309 A.7软件测试报告(STR)309附录B部分练习题答案311参考文献313