软件工程概述 软件工程中的一些观念讨论

软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。\r\n程序是按事先设计的功能和性能要求执行的指令序列\r\n数据是使程序能正常操纵信息的数据结构\r\n文档是与程序开发,维护和使用有关的图文材料

一、软件的概念、特点、类型

软件的特点

1.软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性。\r\n2.软件的生产与硬件不同,在它的开发过程中没有明显的制造过程。是脑力活动的研制。\r\n3.在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。但存在退化、淘汰问题,维护困难。

4.软件的开发和运行常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。\r\n5.软件的开发至今尚未完全摆脱手工艺的开发方式。\r\n6.软件本身是复杂的\r\n反映的实际问题的复杂性\r\n程序逻辑结构的复杂性 \r\n7.软件成本相当昂贵(见下图)\r\n8.相当多的软件工作涉及到社会因素

软件的分类

按软件的功能进行划分:\r\n 系统软件\r\n 操作系统\r\n 数据库管理系统\r\n 设备驱动程序\r\n 通信处理程序等

支撑软件\r\n文本编辑程序\r\n文件格式化程序\r\n磁盘向磁带向数据传输的程序\r\n程序库系统\r\n支持需求分析、设计、实现、测试和支持管理的软件

应用软件\r\n 商业数据处理软件\r\n 工程与科学计算软件\r\n 计算机辅助设计/制造软件\r\n 系统仿真软件\r\n 智能产品嵌入软件\r\n 医疗、制药软件\r\n 事务管理、办公自动化软件\r\n 计算机辅助教学软件

按软件规模进行划分:\r\n\r\n类别   参加人员数   研制期限  源程序行数     \r\n微型         1          1~4周         0.5k    \r\n小型          1          1~6月       1k~2k\r\n中型        2~5          1~2年       5k~50k\r\n大型        5~20          2~3年     50k~100k\r\n甚大型 100~1000      4~5年    1M(=1000k)\r\n极大型 2000~5000   5~10年    1M~10M \r\n如:windows 2000,有5000万行,项目经理250人,开发人员1700人,测试人员3200人。

按软件工作方式划分:\r\n 实时处理软件:自动控制\r\n 分时软件:多个连机用户\r\n 交互式软件:人机通信\r\n 批处理软件:操作系统\r\n按软件服务对象的范围划分:\r\n 项目软件:定制\r\n 产品软件:销售

按使用的频度进行划分:\r\n 一次使用\r\n 频繁使用\r\n按软件失效的影响进行划分:\r\n 高可靠性软件:航天\r\n 一般可靠性软件

二、软件发展阶段、软件危机

程序设计阶段  — 46至56年\r\n程序系统阶段  — 56至68年 \r\n软件工程阶段  — 68年以后

1.软件发展阶段

程序设计阶段  — 46至56年\r\n生产方式:个体手工方式\r\n开发方法:追求编程技巧,没有系统的方法可循\r\n程序规模:小,编写者与使用者往往是同一人\r\n没有设计、文档资料\r\n程序系统阶段  — 56至68年\r\n生产方式:作坊式的小集团合作生产\r\n开发方法:结构化方法 \r\n程序规模:大,多道程序设计、多用户系统、数据库\r\n软件特征:产品大量销售,软件数量急增,软件维护耗资巨增,软件产品不可维护,导致软件危机

软件工程阶段  — 68年以后\r\n生产方式:工程化的生产和设计原则\r\n生产方法:S、OO、\r\n软件产业兴起软件产品化、系列化、工程化和标准化\r\n软件标准的规范不完善,软件危机仍然存在\r\n目前向社会信息化、软件产业化的阶段过渡\r\n现在的技术性的软件工程阶段过渡到企业计算机,社会信息化的计算机系统工程阶段

2.软件危机:\r\n    软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题,而又找不到解决的方法,问题积累起来形成尖锐的矛盾。\r\n  即包含两方面的问题:如何开发软件;如何维护软件。

软件危机的主要表现(现象)\r\n软件生产不能满足日益增长的客观需要,供不应求\r\n软件开发成本和进度估计不准确。节约成本所采取的“权宜之计”损害软件的质量,引起用户的不满\r\n软件开发人员对用户的需求缺乏了解。“闭门造车”导致软件产品不符合实际需要\r\n软件产品质量差。软件质量保证技术(审查、复查、测试)没有贯穿于开发的全过程\r\n软件可维护性差。错误难以改正,新功能难以增加,“再用性”的软件没能实现,重复开发类似的软件\r\n没有文档资料。资料不完整,给软件交流、管理、维护造成困难\r\n软件成本逐年上升,软件的价格昂贵。格昂贵

产生软件危机的原因\r\n软件本身的特点(如:软件规模庞大)导致开发和维护困难\r\n软件开发的方法不正确\r\n开发人员与管理人员重视开发而轻视问题的定义和软件维护\r\n软件开发技术落后\r\n软件管理技术差\r\n解决软件危机的途径:软件工程学\r\n采用工程化方法和工程途径来研制与维护软件\r\n采用先进的技术、方法与工具来开发与设计软件\r\n采用必要的组织管理措施

三、软件工程和软件工程过程

1. 软件工程的定义\r\n软件工程是用工程、科学和数学的原则与方法研制、维护计算机软件的有关技术和管理方法\r\nBoehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料\r\nIEEE: 软件工程是开发、运行、维护和修复软件的系统方法

2. 软件工程三要素:方法、工具和过程\r\n软件工程方法:为软件开发提供了“如何做”的技术,\r\n   常用的两种方法学是:结构化方法和面向对象法。\r\n软件工程工具:为软件工程方法提供了自动的或半自动的软件支撑环境:语言、图形、图表\r\n软件工程过程:为了获得高质量软件所需完成的一系列任务框架,使用生命周期模型简洁描述。\r\n3. 软件工程性质:是一门综合性交叉学科,涉及计算机、工程科学、管理科学和数学。

4.软件工程的内容:软件开发技术和软件开发管理两个方面。\r\n   技术:技术是人类为实现社会需要而创造和发展起来的手段、方法和技能的总和 。ttp://baike.baidu.com/view/45517.htm\r\n   管理:是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源以达到既定目标的工程。(CH13)\r\n5.软件工程面临的问题:费用、可靠性、维护、生产率和重用。

6.软件工程的基本原则:\r\n     (1)用分阶段的生命周期计划严格管理;\r\n       (2)坚持进行阶段评审;\r\n       (3)实行严格的产品控制;\r\n       (4)采用现代程序设计技术;\r\n       (5)结果应能清楚地审查;\r\n       (6)开发小组的人员应该少而精;\r\n       (7)承认不断改进软件工程实践的必要性。

软件规格说明:规定软件的功能及运行的限制\r\n软件开发:产生满足规格说明的软件\r\n软件确认:确认软件能够完成客户提出的要求\r\n软件演进:为满足客户的变更要求,软件必须在使\r\n                      用的过程中演进.

7.软件工程过程的定义:为了获得软件产品,在软件工具支持下由软件工程师完成的一系列软件工程活动。

软件工程过程的基本活动包括:

四、软件生存期 (life cycle)

软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存期。软件产品从形成概念开始,经过开发、使用和维护,直到最后退役的全过程称为软件生存周期。\r\n软件生存期的六个步骤,即制定计划、需求分析、设计、程序编码、测试及运行维护。

具有维护循环的软件生存期

1. 制定计划

确定要开发软件系统的总目标\r\n给出功能、性能、可靠性以及接口等方面的要求\r\n完成该软件任务的可行性研究\r\n估计可利用的资源 (硬件,软件,人力等)、成本、效益、开发进度\r\n制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查

2.需求分析和定义

对用户提出的要求进行分析并给出详细的定义\r\n编写软件需求说明书或系统功能说明书及初步的系统用户手册\r\n提交管理机构评审

3. 软件设计

概要设计 — 把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应\r\n详细设计 — 对每个模块要完成的工作进行具体的描述,为源程序编写打下基础\r\n编写设计说明书,提交评审。

4. 程序编写

把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单”\r\n写出的程序应当是结构良好、清晰易读的,且与设计相一致的

5.软件测试

单元测试,查找各模块在功能和结构上存在的问题并加以纠正\r\n组装测试,将已测试过的模块按一定顺序组装起来\r\n按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用

6.运行/维护

改正性维护  运行中发现了软件中的错误需要修正\r\n适应性维护  为了适应变化了的软件工作环境,需做适当变更\r\n完善性维护  为了增强软件的功能需做变更

五、软件生存期模型(过程模型)

软件生存期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。\r\n 瀑布模型\r\n 演化模型\r\n 螺旋模型\r\n 喷泉模型\r\n 智能模型

传统开发模型\r\n瀑布模型(waterfall model)\r\n快速原型模型(rapid prototype model)\r\n演化开发模型\r\n增量模型(incremental model)\r\n螺旋模型(spiral model)\r\n面向对象开发模型\r\n构件集成模型(component integration model)  \r\n形式化开发模型\r\n转换模型(transformational model)\r\n净室模型(cleanroommodel)

软件生存期模型划分

瀑布模型(生存周期模型)就是传统的生命周期方法学(既自顶向下结构化开发模型方法)。\r\n优点:奠定了软件工程方法的基础;流水依赖;便于分工协作;推迟现实;文档易修改;有复审质量保证。\r\n缺点:用户需求明确困难;用户见面晚;纠错慢;难于克服系统分析员不懂专业领域的知识,用户不懂计算机的困难,成功率低。适合于系统要求明确的小系统。

1.瀑布模型

瀑布模型特点:\r\n阶段间的顺序性和依赖性(文档)\r\n推迟实现的观点(尽可能推迟物理实现)\r\n质量保证的观点(文档和评审)\r\n存在问题(不适合需求模糊的系统)

2.快速原型模型

基本思想\r\n先建立一个能够反映用户主要需求的原型,让用户评判,然后再将原型反复改进,最终建立符合用户要求的新系统。\r\n建立原型的方法\r\n原型仅包含主要功能和重要接口\r\n原型应尽量使用能缩短开发周期的语言和工具\r\n最终的系统,仅把建立原型的过程当作帮助定义软件需求的一种手段

3.增量模型

增量模型:属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早地产生工作软件。

特点:\r\n是瀑布模型的顺序特征与快速原型法的迭代特征相结合的产物\r\n在前面增量的基础上开发后面的增量\r\n迭代的思路

每次提交一个满足用户需求子集的增量构件\r\n第一个增量往往是核心的产品。\r\n强调每一个增量均发布一个可操作的产品。\r\n能在短时间内向用户提交可使用的软件.

4.螺旋模型

螺旋模型沿着螺线旋转,在四个象限上分别表达四个方面的活动,即:\r\n制定计划──确定软件目标,选定实施方案,弄清项目开发的限制\r\n风险分析──分析所选方案,考虑如何识别和消除风险\r\n实施工程──实施软件开发\r\n客户评估──评价开发工作,提出修正建议\r\n特点:\r\n瀑布模型 快速原型 风险分析\r\n迭代过程



5.喷泉模型

迭代\r\n 重复\r\n 演进\r\n无间隙\r\n各阶段间\r\n  无明显界限\r\n面向对象软件开发

过程\r\n软件过程中各个阶段的迭代\r\n无间隙指在各项活动之间无明显边界

6. Rational 统一过程

现在软件产业界普遍认为,开发复杂软件项目必须采用基于UML的、以构架为中心、用例驱动与风险驱动相结合的迭代式增量开发过程,它是世界公认的开发复杂软件项目的最好过程,已经成为软件界的“圣经”。这一开发过程目前已经稳定、成熟。\r\n 这就是:\r\n           RUP—Rational Unified Process

Rational 统一过程是由Rational 软件公司开发和营销的一种软件工程过程,是开发组织用以分配与管理任务和职责的一种规范化方法。这个过程的目的是在预定的进度和预算范围内,开发出满足最终用户需要的高质量软件。

(1) 最佳软件开发实践 Best Practices

迭代地开发软件  Develop Iteratively\r\n管理需求  Manage Requirements\r\n应用基于构件的构架  Use Component Architectures\r\n为软件建立可视化的模型  Model Visually (UML) \r\n不断地验证软件质量  Continuously Verify Quality\r\n控制软件的变更  Manage Change

(2) RUP 二维过程结构

沿时间轴的组织结构

沿内容轴的组织结构

9个过程:核心过程工作流 6个\r\n(1)业务建模\r\n(2)需求\r\n(3)分析和设计\r\n(4)实现\r\n(5)测试\r\n(6)部署:将软件分发给最终用户。

4个阶段:\r\n初始阶段(Inception)、\r\n精化阶段(Elaboration)、\r\n构建阶段(Construction)、\r\n移交阶段(Transition)

核心支持工作流 3个\r\n(1)配置和变更管理\r\n(2)软件项目管理\r\n(3)环境工作流:提供软件开发环境,包括过程和工具

7. 敏捷过程

17位著名软件专家于2001年2月联合起草了敏捷软件开发宣言:\r\n个体和交互 胜过 过程和工具\r\n可以工作的软件 胜过 面面俱到的文档\r\n客户合作 胜过 合同谈判\r\n响应变化 胜过 遵循计划\r\n虽然右项也具有价值,但我们认为左项具有更大的价值。

六、软件工程项目的基本目标

付出较低的开发成本\r\n达到要求的软件功能\r\n取得较好的软件性能\r\n开发的软件易于移植\r\n需要较低的维护费用\r\n能按时完成开发工作,及时交付使用

目标:\r\n可修改性\r\n有效性\r\n可靠性\r\n可理解性\r\n可维护性\r\n可重用性\r\n可适应性\r\n可移植性\r\n可追踪性\r\n可互操作性

软件工程的目标是提高软件的质量与生产率,最终实现软件的工业化生产。

1、我们拥有一套讲述如何开发软件的书籍,书中充满了标准与示例,可以帮助我们解决软件开发中遇到的任何问题。\r\n2、我们拥有最好的开发工具、最好的计算机,一定能做出优秀的软件。 \r\n3、如果我们落后于计划,可以增加更多的程序员来解决。 \r\n4、既然需求分析很困难,不管三七二十一先把软件做了再说,反正软件是灵活的,随时可以修改。\r\n5、如果软件运行较慢,是换一台更快的计算机,还是设计一种更快的算法? \r\n6、有最好的软件工程方法,最好的编程语言吗?

软件工程中的一些观念讨论

7、软件中的错误是否可按严重程度分等级?\r\n8、确定是否进行一个开发项目时(假如该项目已\r\n   通过可行性分析),最先考虑的是是否有:\r\n   时间、掌握了项目需要的开发技术、对项目的\r\n   应用领域了解程度、合作者情况\r\n9、我可以同时从事多个项目开发吗?\r\n10、技术重要还是管理重要?我是项目经理,为了\r\n    保密,必须掌握项目的核心模块源代码。\r\n11、开发时,应选择我最熟悉的工具和软件。

软件工程中的一些观念讨论

技术与管理的最大的差异就是管理的艺术性。技术给人的印象是生硬的语法定义和刻板的设计流程,而管理的主题更多的是人,是生命。其实项目管理还包含了人文的关怀和尊重,人与人之间的沟通。管理作为一门艺术性的学科已经得到了人们的广泛认同。 \r\n 在IT业迅猛发展的今天,科班出生的项目管理人员是否就能站稳脚跟呢?很多掌握了项目管理知识的毕业生,往往因为缺乏技术背景,而感到心里发虚。其实这也是正常的,社会的发展已经不再需要单一学科的狭窄型人才,而需要多种学科交叉的复合型人才。 \r\n 在现在的IT业,想什么技术都样样精通几乎是不可能的。IT项目通常又很复杂,需要用到很多最新的技术,所以一个开发组需要很多技术人才,而这时候管理就显的非常重要。项目经理需要将所有的人才团结起来,使他们来完成共同的目标,这时候,项目经理是不是技术高手也就不重要了。项目经理的大部分工作应该是与客户,上级,团队成员沟通,协调各种关系和项目控制。但有些时候,在技术方案上需要项目经理来拍板定夺,这时技术背景就很重要了。当然技术把关也可以通过其他方式解决,在国外的很多大公司,专门有一个技术委员会来做决定把关,所以这些企业的项目主管可以不必拘泥于技术细节,而认真关注于管理工作。