软件工程学概述
软件的定义:程序+数据+文档
- 程序:能够完成预定功能和性能的可执行的指令序列;
- 数据:使程序能够适当地处理信息的数据结构或数据库;
- 文档:开发、使用和维护程序所需要的图文资料
软件危机:软件在开发和维护过程中遇到的一系列问题
主要体现在两个方面:
- 如何开发软件,以满足对软件日益增长的需求;
- 如何维护数量不断膨胀的已有软件
典型表型:
- 对软件开发成本和进度的估计常常很不准确;
用户对“已完成的”软件系统不满意的现象经常发生;
软件产品的质量往往靠不住;
软件常常是不可维护的
-
软件通常没有适当的文档资料;
软件成本在计算机系统总成本中所占的比例逐年上升;
软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势
软件危机产生的原因:
- 软件不同于硬件,它是计算机系统的逻辑部件而不是物理部件;
- 软件开发的过程是多人分工合作,分阶段完成的过程,参与人员之间的沟通和配合十分重要;
- 开发和管理人员只重视开发而轻视问题的定义,使软件产品无法满足用户的要求;
- 软件管理技术不能满足现代软件开发的需要,没有统一的软件质量管理规范;
- 在软件的开发和维护关系问题上存在错误的观念
软件工程:是指导计算机软件开发和维护的一门工程学科(概念、原理、技术、方法;结合管理技术;高质量高产量)
软件工程方法学:(要素——方法:技术;工具:支撑环境;过程:工作步骤)
- 传统方法学:也称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用(文档先行)
- 面向对象方法学:与传统方法相反,面向对象方法把数据和行为看成是同等重要的,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。
软件生命周期:由软件定义、软件开发、运行维护(软件维护:最长10年)三个时期组成,每个时期又分为若干阶段
软件定义:问题定义、可行性研究和需求分析
软件开发:总体设计、详细设计、编码和单元测试、综合测试
运行维护:主要任务是使软件持久地满足用户的需要
软件过程:是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。也就是什么人(who)、在什么时候(when)->步骤、做什么事(what)->任务、以及怎样(how)->技术、做这些事以实现某一个特定的具体目标
软件开发模型种类:
过程模型—— 瀑布型(重点掌握)、快速原型模型(掌握)、增量模型(了解)、 螺旋模型(了解)、喷泉模型(了解)、敏捷过程(重点了解)等。
模型研究的是:该模型划分为哪些阶段,以及每个阶段的执行顺序
- 瀑布模型:传统的瀑布模型过于理想化,一般开发过程中带“反馈环”;具有严格的顺序性和依赖性,即必须等前一个阶段完成后,才可以进行下一个阶段;
- 快速原型模型(理论上):快速原型模型不仅仅做需求分析,还可以探讨新技术,验证技术是否可行;
- 增量模型:分批向用户提交产品,如学校的信息管理系统,可细分为学生管理系统,教师管理系统,财务管理系统等分别实现各自的功能,但是又共同构成了整个软件的整体;
- 螺旋模型:改进的快速原型模型,增加风险分析;
- 喷泉模型:面向对象、过程迭代、无缝
敏捷模型:程序>文档;客户合作(即甲方参与开发);极限编程;
微软过程: