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. 软件工程学科的研究内容
根据软件工程这一框架,软件工程学科的研究内容主要包括:
软件架构
软件设计方法
软件领域建模
软件工程决策支持
软件工程教育
软件测试技术
自动化的软件设计和合成
基于组件的软件工程
计算机支持的协同工作
编程语言和软件工程
计算机网络
信息与通信安全
计算机图形学与人机交互
多媒体技术应用
人工智能与识别
嵌入式软件与应用
自动控制
分布式计算与网格计算
云计算技术
存储技术
数据库技术研究
计算机辅助设计与应用技术
大数据分析与处理