软件工程学科的诞生

1.        软件工程学科的产生背景

关于软件工程产出的背景,首先我们要确定软件这一定义及其作用,软件:计算机程序及其说明程序的各种文档。“程序”是计算任务的处理对象和处理规则的描述。

软件的特点:

1 是一种逻辑产品,与物质产品有很大的区别。

2 软件产品的生产主要是研制,生产成本主要在开发和研制,开发研制完成后,通过复制就产生了大量软件产品。

3 软件产品不会用坏,不存在磨损,消耗。

4 生产主要是脑力劳动,还末完全摆脱手工开发方式,大部分产品是“定做”的。

5 开发软件的费用不断增加,致使生产成本相当昂贵

软件生产的发展:

1 程序设计时代 这个阶段生产方式是个体劳动,生产工具是机器语言,汇编语言。(1946-1956年)

2 程序系统时代 这个阶段生产方式是小集团合作生产,生产工具是高级语言,开发方法仍依靠个人技巧,但开始提出结构化方法。(1956-1968年)

3 软件工程时代 这个阶段生产方式是工程化的生产,使用数据库,开发工具,开发环境,网络,分布式面向对象技术来开发软件。(1968年至今)

软件危机: 软件开发技术的进步未能满足发展的要求。在软件开发中遇到的问题找不到解决的办法,问题积累起来,形态尖锐的矛盾,导致了软件危机。

软件危机的表现:

1 经费预算经常突破,完成时间一再拖延。

2 开发的软件不能满足用户要求。

3 开发的软件可维护性差。

4 开发的软件可靠性差。

软件危机产生原因:

1 软件规模越来越大,结构越来越复杂。

2 软件开发管理困难而复杂。

3 软件开发费用不断增加。

4 软件开发技术落后。

5 生产方式落后,仍采用手工方式。

6 开发工具落后,生产率提高缓慢。

在这种状况下,软件工程在1968年首次被提出,其目标便是付出较低开发成本;达到要求的功能;取得较好的性能;开发的软件易于移植;只需较低的维护费用;能按时完成开发任务,及时交付使用;开发的软件可靠性高。

2.        软件工程学科的解决软件危机问题的策略与途径

软件工程的管理,直接影响可用资源的有效利用,生产满足目标的软件产品,提高软件组织的生产能力等问题。因此,仅当软件过程得以有效管理时,才能实现有效的软件工程。 这一软件工程框架告诉我们,软件工程的目标是可用性、正确性和合算性;实施一个软件工程要选取适宜的开发范型,要采用合适的设计方法,要提供高质量的工程支撑,要实行开发过程的有效管理;软件工程活动主要包括需求、设计、实现、确认和支持等活动,每一活动可根据特定的软件工程,采用合适的开发范型、设计方法、支持过程以及过程管理。

1.问题定义:“要解决的问题什麽?”在问题定义阶段应提出。

① 问题性质报告② 工 程目标和规模报告③ 对系统的实际用户和使用部门进行访问调查,澄清含 糊不清的地方后得到双方满意的文档。

2.可行性研究:关键问题“对于上一个阶段所确定的问题有行得通的解决办法”

① 确定工程规模和目标 ② 估计系统成本和效益。

该阶段实际上是一个工程的核心阶段,对双方都是讨价还价的心理战,直接 关系到整个系统研发的成本与利益。

3. 需求分析:解决的问题“为解决问题,目标系统必须做什麽?”

系统分析员在需求分析阶段必须和用户密切配合,充分交流信息,以得出 经过用户确认的系统逻辑模型。通常用数据流程图,数据字典和简要的算法表示系统的逻辑模型。

需求分析阶段必须交出完整准确的系统逻辑模型经用户确认后,再进入下 一个阶段,应防止和克服急于着手进行具体设计。

4. 总体设计:“应该如何解决这个问题?”,应考虑几种可能的解决方案:

(1)低成本的解决方案:系统只能完成最少必要的工作,不做额外工作。

(2)中等成本的解决方案:除很好地完成预定的任务,使用方便,而且还有附加的额外功能。

(3)高成本的“十全十美”的系统 :该系统具有用户可能希望有的所有功能和 特点。

5. 详细设计:总体设计以比较抽象概括的方式提出了解决问题的办法,详细设计的任务是把解法具体化。具体的任务是设计出程序的详细规格说明,通常用HIPO图(层次图加输入/处理/输出图)或PDL语言(过程设计语言)描述详细设计结果。

6. 编码和单元测试:程序员根据系统要求,选定开发平台把详细设计的结果翻译成选定的语言书写程序,并仔细测试编写的每个模块。

7.综合测试 :通过各种类型的测试使软件达到预定的要求。

集成测试:根据软件结构,把模块按某种选定的策略装配起来, 装配过程中对程序进行必要测试。

基本测试 :

验收测试:按照规格说明书的规定,对目标系统进行验收。

8.软件维护:改正性维护、适应性维护、完善性维护、预防性维护

3.        软件工程学科的研究内容

根据软件工程这一框架,软件工程学科的研究内容主要包括:

软件架构

软件设计方法

软件领域建模

软件工程决策支持

软件工程教育

软件测试技术

自动化的软件设计和合成

基于组件的软件工程

计算机支持的协同工作

编程语言和软件工程

计算机网络

信息与通信安全

计算机图形学与人机交互

多媒体技术应用

人工智能与识别

嵌入式软件与应用

自动控制

分布式计算与网格计算

云计算技术

存储技术

数据库技术研究

计算机辅助设计与应用技术

大数据分析与处理

原文地址:https://www.cnblogs.com/qthth/p/8721255.html

时间: 2024-11-03 05:33:32

软件工程学科的诞生的相关文章

对于软件工程学科概况

软件工程作为一个新兴学科,它具备有一套系统完整的软件指标以及原理,并且是为了经济地获得可靠的和能在实际机器上高效运行的软件而确立和使用的一系列完善的工程原理(方法),通过"工具.方法.过程"这三个要素来构成一种层次化的技术. 现如今,新媒体方式的传播越来越广泛,更多的企业,产家会采用数据化,信息化的管理以及销售方式,这就需要高精度的数据定义以及数据的使用,而软件工程这一学科向我们介绍了软件开发的方法,例如如何进行面向过程的结构化开发,如何进行面向对象的开发.还介绍了关于软件的整体构架,

2015年北京大学软件工程学科优秀大学生夏令营上机考试---B:整数奇偶排序

描述 给定10个整数的序列,要求对其重新排序.排序要求: 1.奇数在前,偶数在后: 2.奇数按从大到小排序: 3.偶数按从小到大排序. 输入 输入一行,包含10个整数,彼此以一个空格分开,每个整数的范围是大于等于0,小于等于100. 输出 按照要求排序后输出一行,包含排序后的10个整数,数与数之间以一个空格分开. 样例输入 4 7 3 13 11 12 0 47 34 98 样例输出 47 13 11 7 3 0 4 12 34 98 题目简单,可以用数据结构的数组求解,也可以用链表求解,数组简

个人博客作业 #1

问题 1.第四章谈到了两人合作,在这个过程中倘若结对的两个人能力是相近的,如何达到高效的开发,如果两个人的能力是互补的,又如何达到高效的开发? 2.在第六章敏捷开发中,我认为软件设计的可扩展性对于敏捷开发相当重要,而软件的可扩展性应当从那些方面来考虑?即如何做到在需求不断情况下,仍不至于不停地推倒重来? 3.在第十二章谈到了用户体验,有时候确实存在用户体验和产品质量不可兼具的问题,如何抉择? 4.在软件的开发过程中是否时时需要具备有防御性编程的意识,这样可能使问题复杂化,或者仅需要按照设计规格来

我对软件工程这学科的疑问

在现代社会中,软件应用于多个方面.我所知道的软件有电子邮件.嵌入式系统.人机界面.办公套件.操作系统.编译器.数据库.游戏等.同时,各个行业几乎都有计算机软件的应用,如工业.农业.银行.航空.政府部门等.这些应用促进了经济和社会的发展,也提高了工作效率和生活效率 .我个人理解的软件工程是一门研究用工程化方法构建和维护有效的.实用的和高质量的软件的学科.它涉及程序设计语言.数据库.软件开发工具.系统平台.标准.设计模式等方面. 到目前为止我上了两节软件工程这课,对它并不是深知,自己在之前也没有做过

计算机学科漫谈

在这篇博文里,我想和大家聊一聊自己对计算机学科的理解.当下本科阶段的计算机专业教学涉及计算机学科的方方面面,分类繁杂,有时可能令新人茫然不知所措.那么,对计算机专业的学者来说,什么是最重要的呢?我相信,一千个读者,一千个哈姆雷特,同样的,每个计算机的学习者都有自己对专业的一番认识.如果说本科四年的计算机专业课程是对专业知识的横向积累,那么把握计算机专业的本质的内容则需要纵向的思考.因此我个人的观点是:对计算机系统整体概念的理解在计算机专业学习中尤其关键.于是我把自己对专业的理解和认识总结出来,希

单元测试软件工程概述

软件工程简介 软件工程(Software Engineering,简称为SE)是一门研究用工程化方法构建和维护有效的.实用的和高质量的软件的学科.它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面. 在现代社会中,软件应用于多个方面.典型的软件比如有电子邮件,嵌入式系统,人机界面,办公套件,操作系统,编译器,数据库,游戏等.同时,各个行业几乎都有计算机软件的应用,比如工业,农业,银行,航空,政府部门等.这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活

目标?我定好了!(我的软件工程课目标)

2016-03-02 22:28     by jackchua "目标"的困惑 端坐一个小时,竟不知道如何下手写这篇博文.一是自己对文字写作总是抱着抵触,练习甚少,不知道如何用好的文字描述下来:第二却是被难在了“目标”二字.对于"目标",如果我说:我要拿这门课程的高分:我要学到知识:我要认识软件工程...不,那不够,或者说对我而言那只是对这门课程的基本的需求,我相信每个同学都会有这样的需求,老师也有这样的需求,但要与"目标"相提并论,那还不够.

《构建之法》阅读笔记第一篇——软件工程概论

1.软件=程序+软件工程 程序(源代码)是一行行的代码,是建立在数据结构上的一些算法.程序还要对数据进行操作,这些数据有的是静态的(如软件图标.提示信息),有的是动态的(如程序生成的随机数字.程序通过网络下载的数据.用户的文字或语音输入等). 光有代码和静态数据是不行的,工程师要把她们构件为机器能懂的可执行代码.一个复杂的软件不但要有合理的软件架构.软件设计与实现,还要有各种文件和数据来描述各个程序文件之间的依赖关系.编译参数.链接参数等等.这些都是软件构建的过程. 软件团队的成员每天都修改源代

个人最终总结——软件工程

1.软件工程师应当致力于做出分析,规范,软件的设计.开发.测试和维护一个有益的和受人尊敬的职业.按照他们承诺的健康,安全和福利,软件工程师应当遵守下列八个原则: 1.公众——软件工程师应当始终如一地坚持公众利益. 2.客户和雇主——软件工程师应当采取行动的方式是最好的客户和雇主的利益与公共利益相一致. 3.产品——软件工程师应确保他们的产品和相关的修改达到可能的最高的专业标准. 4.判断——软件工程师应当保持完整和独立的专业判断. 5.管理——软件工程经理和领导者应当订阅和促进一个道德的管理软件