第1章 软件开发与程序设计
1.1 任务一:软件的开发
软件被应用于世界的各个领域,对人们的生活和工作产生了深远的影响。近年来,软件开发作为现代科学研究和解决工程问题的基础,成为当今世界不可缺少的一部分。在不久的将来,软件将成为驱动社会发展的新动力。
任务描述
软件开发的目标:以客户与市场为导向、理解软件真正的需求,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并满足用户需要的软件产品,获取最大的商业利益。
任务分析与设计
如果硬件是人的身体,那么软件就是人的思维。在开发软件过程中,开发的步骤、方法甚至技巧和习惯都会直接影响软件成品的质量。软件开发项目的成功有以下几个主要的目标作为验证标准:
(1)付出较低的开发成本。
(2)达到要求的软件功能。
(3)取得较好的软件性能。
(4)开发的软件易于移植。
(5)需要较低的维护费用。
(6)能按时完成开发工作,即时交付使用。
任务实现
1.初识“软件”
软件(software)是一系列按照特定顺序组织的计算机数据和指令的集合。
凡是能看见、能摸到的都是硬件,如键盘、显示器、鼠标、主机等。
运行于硬件上的、我们常用的瑞星、Office、操作系统等都是软件!没有软件的计算机是“裸机”,相当于废铁一堆。软件和计算机密不可分,计算机软件是为了解除人们繁重、重复的工作而产生的。软件是为了告诉计算机要做什么、如何做而编写的,是计算机能够理解的一串指令、代码、程序。
2.软件的分类
1)按功能划分
(1)贴近计算机硬件的小软件。通常“固化”在只读存储器芯片中,因此称为固件。
(2)系统软件。包括操作系统和编译器等软件,如Windows、Linux、UNIX、Mac OS。系统软件与硬件共同搭建起一个操作“平台”,可以管理和优化计算机硬件资源的使用。
(3)支撑软件。是支撑各种软件的开发与维护的软件,又称为软件开发环境,如Microsoft Visual C、Microsoft Visual Studio、Maromedia Dreamweaver等。
(4)应用软件。它的种类最多,如办公软件、电子商务软件、通信软件、行业软件,游戏软件等。根据用户和所服务的领域提供不同的功能,是为了某种特定的用途而开发的软件。本书开发实例的方向就是应用软件。
2)按软件规模划分
根据开发软件所需的人员数量、时间期限以及完成的源程序(有效)行数,划分出6种不同规模的软件,如表1.1所示。
表1.1 软件规模的分类
3.软件生命周期与开发阶段
软件生命周期是按时间分程的思想方法描述软件的产生直到报废的生命周期。软件生命周期包含制订计划、需求分析、系统设计、程序编码、软件测试、运行维护6个开发阶段,如表1.2所示。
表1.2 软件生命周期的6个开发阶段
4.各个开发阶段之间的交接——开发文档
软件并非只包括可以在计算机上运行的程序,与这些程序相关的文件一般也被认为是软件的一部分。软件文档是软件工程实施中的重要成分,它不仅是软件开发各阶段的重要依据,而且也影响软件的可维护性。
各个开发阶段之间的交接实际上就是文档与文档之间的交接。换句话说,每个开发阶段都应该产生相应的开发文档。文档是开发团队中技术人员的交流工具,可以快速地找到相关的位置,避免重复阅读程序。
一份合格的开发文档应该全面,要有条理地诠释软件开发流程,要包含技术难点的解释、逻辑判断、重要算法,要包括部分业务流程的说明。技术人员通过看文档可迅速了解程序的流程、调用关系,测试人员可以知道开发人员对用户需求了解的程度、是否有偏差,以快速定位错误,提高开发效率和开发质量。
5.软件的开发方法
1)开发方法的分类
(1)功能分解法——计算任务。
(2)结构化法——以数据为中心。
(3)面向对象法——以对象为中心。
(4)组件法——以组件为中心。
2)结构化系统开发方法(Structured System Development Methodology)
结构化系统开发方法是由E.Yourdon和L.L.Constantine提出的,首先对软件进行需求分析,然后进行总体设计,最后结构化编程(SP)。
按照程序设计方法的发展,程序设计方法可以分为:
(1)功能分解法,以计算任务为中心。
(2)结构化程序设计,以数据为中心。
(3)面向对象程序设计,以对象为中心。
(4)组件程序设计,以组件为中心。
初学者更容易理解结构化(模块化)的理念,即自顶向下对系统进行分析与设计。这种开发方法能产生清晰、易懂的程序代码,使用程序易于维护。
按用户至上的原则,将系统开发过程划分为若干个相对独立的阶段,然后再考虑局部实现。实施阶段坚持自底向上地逐步实施,即从最基层的模块做起(编程),然后按照系统设计的结构,将模块一个个拼接到一起进行调试,自底向上、逐步地构成整个系统。
引导文献
软件工程是随着软件的发展而诞生的学科。软件工程由程序、数据和文档组成,其中程序是主体,数据是使程序能正常操纵信息的数据结构,文档是与软件的开发、维护和使用有关的材料。软件开发方法应规范化。
1.软件开发的主要环节
软件开发的主要环节如图1.1所示。
图1.1 软件开发的主要环节
2.软件开发的策略与步骤
软件开发有三种基本策略:“复用”、“分而治之”、“优化—折中”。
(1)复用是指“利用现成的东西”。
(2)分而治之是指把一个复杂的问题分解成若干个简单的问题,然后逐个解决,如图1.2所示。
图1.2 分而治之
软件人员在分而治之时应考虑:问题分解后能否用程序实现?程序能否集成为一个软件系统以解决问题?
(3)优化—折中。优化工作不是可有可无的事情,而是必须要做的事情。当优化工作成为一种责任时,程序员才会不断改进软件中的算法、数据结构和程序组织,从而提高软件质量。折中策略是指通过协调各个质量因素,实现整体质量的最优。
3.软件开发模型
软件开发模型是软件开发全部过程、活动和任务的结构框架。最早出现的软件开发模型是于1970年由W.Royce提出的瀑布模型,而后随着软件工程学科的发展和软件开发的实践,相继提出了演化模型、螺旋模型、增量模型、喷泉模型、智能模型等。
软件也有一个孕育、诞生、成长、成熟、衰亡的生存过程。根据这一思想,可以得到软件生命周期的6个开发阶段,即制订计划、需求分析、设计、程序编码、测试、运行与维护。
软件生命周期模型是从软件项目需求定义直至软件经使用后废弃为止,跨越整个生命周期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。
(1)瀑布模型:制订计划,进行需求分析和说明、软件设计、程序编码、软件测试、运行与维护,固定次序、自上而下、相互衔接。瀑布模型如图1.3所示。
图1.3 瀑布模型
(2)演化模型:在项目开发的初始阶段,对软件的需求认识不够清晰,可以先做试验开发与探索可行性,弄清软件需求;在此基础上获得较为满意的软件产品。第一次得到的试验性产品称为“原型”。
(3)螺旋模型:开发复杂的大型软件时,结合瀑布模型与演化模型沿着螺线旋转,自内原型处向外拓展,每旋转一圈便更新完善一个新的版本。螺旋模型如图1.4所示。
图1.4 螺旋模型
① 制订计划——确定软件目标,选定实施方案,弄清项目开发的限制条件。
② 风险分析——分析所选方案,考虑如何识别和消除风险。
③ 实施工程——实施软件开发。测试验收产品。
④ 客户评估——评价开发工作,提出修正建议。
(4)喷泉模型:主要支持面向对象的开发方法。分析、设计和编码之间不存在明显的边界。喷泉模型如图1.5所示。
图1.5 喷泉模型
(5)智能模型:基于知识的软件开发模型,综合以上模型,结合专家系统,采用归约和推理机制,帮助软件人员完成开发工作。
即时训练
1.软件工程实现的目标
(1)付出较低的开发成本。
(2)实现要求的软件功能。
(3)获取较好的软件性能。
(4)提高软件的可移植性。
(5)降低系统的维护费用。
(6)按时交付软件的使用。
2.软件工程工作的内容
(1)分阶段实施系统的开发。
(2)控制调整开发的进度。
(3)控制优化资金的使用。
(4)提交阶段性文档。
拓展任务
(1)较常见应用软件如下。
① 行业管理软件:如计算机行业管理软件开龙IT200商软ERP等。
② 文字处理软件:如Office、WPS等。
③ 信息管理软件:如Access数据库。
④ 辅助设计软件:如AutoCAD、Photoshop。
⑤ 媒体播放软件:如暴风影音、豪杰超级解霸、Windows Media Player、RealPlayer等。
⑥ 系统优化软件:如Windows优化大师、超级兔子魔法设置。
⑦ 图形图像软件:Coreldraw、Painter、MAX,MAYA等。
⑧ 数学软件:Mathematica、Maple、Matlab、MathCad等。
⑨ 统计软件:SAS、SPSS等。
⑩ 后期合成软件:After Effects、Combustion、Digital Fusion、Shake、Flame等。
⑪杀毒软件:如瑞星、金山毒霸、卡巴斯基、江民等。
(2)列举出更多的软件并归类。