软件与软件工程

软件

软件的概念以及特点:

软件是计算机系统中不可或缺的一部分,与硬件共同构成特定的系统功能。

人们通常把各种不同功能的程序,包括系统程序、应用程序、用户自己编写的程序等称为软件
软件的概念:

软件不仅包括程序,还包括程序的处理对象------数据,以及与程序开发、维护和使用有关的图文资料,即文档 .
软件=程序+数据+文档

程序是为实现软件的功能和性能要求而编写的指令序列。

数据是指使程序能够正常操纵信息的数据结构。

文档是与程序开发、维护和使用有关的图文资料。

软件的特点

软件是一种逻辑实体,具有抽象性

软件的生产与硬件的制造不同,是人类智力劳动的产物

软件在运行使用过程中,不会磨损

软件的开发至今尚未完全摆脱手工艺的开发方式

软件的开发和运行必须依附于特定的计算机系统环境

软件的分类

软件危机

软件危机的表现与原因

软件危机是指人们在开发软件和维护软件过程中所遇到的一系列的问题

主要表现为:

开发出来的软件产品不能满足用户的需求

相比越来越廉价的硬件,软件代价过高

软件质量难以得到保证,且难以发挥硬件潜能

难以准确估计软件开发、维护的费用以及开发周期

难于控制开发风险,开发速度赶不上市场变化

软件产品修改维护困难,集成遗留系统更困难

软件文档不完备,并且存在着文档内容与软件产品不符的情况

软件危机出现的原因

忽视软件开发前期的需求分析

开发过程缺乏统一的、规范化的方法论的指导

文档资料不齐全或不准确

忽视与用户之间、开发组成员之间的交流

忽视测试的重要性

不重视维护或由于上述原因造成维护工作的困难

从事软件开发的专业人员对这个产业认识不充分,缺乏经验

没有完善的质量保证体系

软件危机的启示

软件产品是复杂的人造系统,具有复杂性、不可见性和易变性,难以处理

个人或小组在开发小型软件时使用到的非常有效的编程技术和过程,在开发大型、复杂系统时难以发挥同样的作用

软件开发的创造性成分很大、发挥的余地也很大,很接近于艺术

计算机和软件技术的快速发展,提高了用户对软件的期望,促进了软件产品的演化,为软件产品提出了新的、更多的需求,难以在可接受的开发进度内保证软件的质量

几乎所有的软件项目都是新的,而且是不断变化的

"人月神化"现象------生产力与人数并不成正比

软件工程

软件工程的概念

IEEE对软件工程的定义为:

(1)将系统化、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件

(2)对(1)中所述方法的研究

具体说来,软件工程是以借鉴传统工程的原则、方法,以提高质量,降低成本为目的指导计算机软件开发和维护的工程学科。它是一种层次化的技术

软件工程的根基在于对质量的关注;

软件工程的基础是过程层,它定义了一组关键过程区域的框架,使得软件能够被合理和及时地开发;

软件工程的方法提供了建造软件在技术上需要"做什么",它覆盖了一系列的任务,包括需求分析、设计、编程、测试和支持等;

软件工程的工具对过程和方法提供了自动的或半自动的支持。

1.3.2 软件工程的发展

1968和1969年:真正意义上的"软件工程"诞生

70年代:瀑布模型,结构化编程

80年代:COCOMO模型,CMM模型,关系数据库,测试工具和配置管理工具,计算机辅助软件工程(CASE),其他一些潜在的提高软件生产率的方法

90年代:面向对象方法,敏捷方法

21世纪:快速应用开发,"大规模计算","自治和生化计算机","模型驱动体系结构","构件化软件开发"

1.3.3 软件工程研究的内容

方法与技术:主要讨论软件开发各种方法及其工作模型

工具与环境:软件工具为软件工程方法提供支持,研究计算机辅助软件工程,建立软件工程环境

管理技术:对软件工程全过程的控制和管理

标准与规范:使得各项工作有章可循,以保证软件生产效率和软件质量的提高

1.3.4 软件工程目标和原则

软件工程要达到的基本目标包括:

达到要求的软件功能

取得较好的软件性能

开发出高质量的软件

付出较低的开发成本

需要较低的维护费用

能按时完成开发工作,及时交付使用

软件工程的七条基本原则

用分阶段的生命周期计划进行严格的管理

坚持进行阶段评审

实行严格的产品控制

采用现代程序设计技术

软件工程结果应能清楚地审查

开发小组的人员应该少而精

承认不断改进软件工程实践的必要性

1.3.5 软件工程知识体系

软件需求

软件设计

软件构建

软件测试

软件维护

软件配置管理

软件工程管理

软件工程过程

软件工程工具和方法

软件质量

软件开发方法

使用定义好的技术集及符号表示组织软件生产的过程

目标是在规定的时间和成本内,开发出符合用户需求的高质量的软件

常见的软件开发方法

结构化方法

面向数据结构方法
面向对象方法

形式化方法

问题分析法

可视化开发方法

软件工程工具

软件工程工具通常有三种分类标准

按照功能划分:可视化建模工具、程序开发工具、自动化测试工具、文档编辑工具、配置管理工具、项目管理工具

按照支持的过程划分:设计工具、编程工具、维护工具

按照支持的范围划分:窄支持(工具)、较宽支持(工作台)和一般支持工具(环境)
经常会使用到的软件工程工具
分析设计工具

面向通用软件设计:Microsoft Visio

面向对象软件设计:Rational Rose,

数据库设计:PowerDesigner

**程序开发工具:**集成开发环境(IDE)通过提供代码高亮、补全,内置调试工具等功能,大大提高了效率。

IDE 主流的实例如表所示。
测试工具:

在测试阶段,通常会使用自动化测试工具进行测试。除单元测试工具外,较为流行的自动化测试工具包括 C/S 功能测试工具 WinRunner,性能测试工具 LoadRunner、Jmeter,测试管理工具 TestDirector、Jira,Web服务测试工具 QTester(简称QT)、SoapUI 等。单元测试工具通常与语言及开发框架关联密切,部分实例如表所示。

配置管理工具 :Microsoft Visual Sourcesafe,ClearCase
项目管理工具:Microsoft Project,CA-SuperProject,Time Line

参考:

《实用软件工程》(第二版)郑人杰 殷人昆 陶永累 清华大学出版社

相关推荐
shinelord明1 天前
【再谈设计模式】抽象工厂模式~对象创建的统筹者
数据结构·算法·设计模式·软件工程·抽象工厂模式
写代码的橘子n2 天前
软件工程笔记二—— 软件生存期模型
笔记·语言模型·软件工程
努力编程的阿伟2 天前
软件工程视角:Git 基础与实践
git·软件工程
漫天转悠2 天前
软件工程的基础和核心理论概念
软件工程
问道飞鱼2 天前
【软件工程】深入理解一下SOA(面向服务的架构)
软件工程
努力编程的阿伟4 天前
软件工程中的创建型设计模式:工厂方法模式与抽象工厂模式
设计模式·软件工程·抽象工厂模式
思茂信息4 天前
CST如何计算CMA中的模式加权系数MWC
运维·服务器·开发语言·人工智能·算法·软件工程
雾江流5 天前
华夏风物 3.2.0 | 中国风物志,记录各地特产、美食、风景,旅游吃货必备
软件工程·旅游·美食·风景
始终奔跑在路上5 天前
软件测试—HTML
前端·功能测试·html·集成测试·软件工程
zk计科小牛马5 天前
数据流图(软设下午提15分)
软件工程