简介
程序是人们为了完成特定的功能编制的一组指令集,它由计算机的语言描述,并且能在计算机系统上执行。而软件不仅包括程序,还包括程序的处理对象——数据,以及与程序开发、维护和使用相关的图文资料。
软件有以下几个特点:
(1)软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性。
(2)软件的生成与硬件不同,他没有明显的制造过程。要提高软件的智联个,必须在软件开发方面下功夫。
(3)在软件的运行和试用期间,不会出现硬件中出现的机械磨损、老化问题,然而它存在退化问题,必须对其进行多次的修改和维护,直至退役。
(4)计算机软件的开发与运行常常收到计算机系统的制约,它对计算机系统有着不同程度的依赖性。为了解决这种依赖性,在软件开发中提出了软件移植问题。
(5)软件开发至今尚未完全摆脱人工的开发方式。
(6)软件本身是复杂的。软件的复杂性可能来自它反映实际问题的复杂性,也可能来自程序逻辑结构的复杂性。
(7)软件的成本相当昂贵。
(8)相当多的软件工程设计社会因素。许多软件的开大和运行涉及机构、体制及管理方式等问题,它们直接决定项目的成败。
分类
按照功能的不同,软件可以分为系统软件、支撑软件和应用软件。基于规模的不同,软件可以划分为微型、小型、中型、大型和超大型软件。根据工作方式的不同,划分为实时软件、分时软件、交互式软件和批处理软件。
软件危机
软件危机是指人们在开发软件和维护软件过程中遇到的一系列问题。在20世纪60年代中期,随着软件规模的扩大,复杂性的增加,功能的增强,高质量的软件开发变得越来越困难。在软件开发的过程中,会经常出现不能按时完成任务、产品质量得不到保证、工作效率地下和开发经费严重超支等问题。
普遍出现的严重问题有:
(1)开发的软件产品不能满足用户的 需求,即产品的功能或特性与需求不符合。
(2)相比越来越廉价的硬件,软件代价过高。
(3)软件质量难以得到保证,且难易发挥硬件潜能。
(4)难易准确估计软件开发、维护的费用以及开发周期。
(5)软件产品修改维护困难,集成遗留系统更困难。
软件危机出现的原因
(1)忽视软件开发前期的需求分析。
(2)开发过程缺乏统一的、规范化的方法论指导。软件开发是一项复杂的工程,人们需要用科学的、工程化的思想来组织和指导软件开发的各个阶段。
(3)文档资料不齐全或不准确。
(4)忽视与用户之间、开发组成员之间的交流。
(5)忽视测试的重要性。
(6)不重视维护或由于上述原因造成维护工作困难。
(7)从事软件开发的专业人员对这个产业认识不充分,缺乏经验。
(8)没有完善的质量保证体系。
软件工程的知识体系
- 软件需求(Software Requirement)
- 软件设计(Software Design)
- 软件构建(Software Construction)
- 软件测试(Software Testing)
- 软件维护(Software Maintenance)
- 软件配置管理(Software Configuration Management)
- 软件工程管理(Software Engineering Management)
- 软件工程过程(Software Engineering Process)
- 软件工程模型和方法(Software Engineering Models and Methods)
- 软件质量(Software Quality)
- 软件工程职业实践(Software Engineering Professional Practice)
- 软件工程经济学(Software Engineering Economics)
- 计算基础(Computing Foundations)涉及解决问题的技巧、抽象、编程基础、编程语言的基础知识、调试工具和技术、数据结构和表示、算法和复杂度、系统的基本概念、计算机的组织结构、变异基础知识,操作系统基础知识、数据库基础知识和数据管理、网络通信基础知识、并行和分布式计算、基本的用户认为因素、基本的开发人员认为因素和安全的软件开发和维护等方面内容
- 数学基础(Mathematical Foundations)涉及集合、关系和函数,基本的逻辑、证明技巧、计算的基础知识、图和树、离散概率、有限状态机、语法,数值精度、准确性和错误,数论和代数结构等方面的内容。
- 工程基础(Engineering Foundations)涉及实现方法和实验技术、统计分析、度量、工程设计,建模、模拟和建立原型,标准和影响因素分析等方面内容。
软件开发方法
- 结构化方法
- 面向数据结构方法
- 面向对象方法
- 形式化方法
软件工程工具
(1)按照功能划分:功能是对软件进行分类最常用的标准,软件工程工具可以分为可视化建模工具、程序开发工具、自动化测试工具、文档编辑工具、配置管理工具、项目管理工具等。
(2)按照支持的过程划分:可分为设计工具、编程工具、维护工具等。
(3)按照支持的范围划分:窄支持、较宽支持和一般支持工具。窄支持工具支持软件过程中的特定任务,一般将其称之为工具;较宽支持工具支持特定的过程阶段,一般由多个工具集合而成,称之为工作台;一般支持工具支持覆盖软件过程的全部或大部分阶段,包含多个不同的工作台,称之为环境。
软件开发模型
瀑布模型
凯苏原型模型
增量模型
螺旋模型
喷泉模型
基于组件的开发模型
统一软件开发过程模型
敏捷过程与极限编程
软件结构化设计
-
数据库结构设计
-
用户界面设计
(1)设计驱动开发
(2)目标用户群体
(3)间接与清晰
(4)实现模型与心智模型
(5)设计的规范性
(6)设计的可用性和易用性
(7)设计的一致性
(8)设计的容错性 -
结构化设计和结构化分析
-
体系结构设计
(1)表示软件结构的图形工具
(2)面向数据流的设计方法
(3)面向数据结构的设计方法 -
接口设计
-
数据设计
-
过程设计
(1)程序流程图
(2)N-S图
(3)PAD图
(4)过程设计语言