20世纪60年代,由于软件本身的特点以及开发方法等多方面的问题,软件的发展速度远远滞后于硬件的发展速度,难以满足社会日益增长的软件需求。软件开发周期长、成本高、质量差、维护困难等问题直接导致了软件危机的爆发。为了应对这一危机,人们提出了“软件工程”的概念,试图以工程化的方法解决软件危机问题。
那什么是“软件工程”呢?这个在业界还没有统一的定义,但大抵意思就是:运用现代科学技术知识来设计并构造计算机程序并为开发、运行和维护这些程序提供相关资料。因此现代的软件定义就变成了这么个样子:软件=程序+相关文档。
具体的讲就是用工程化原则和思想来一步步指导你去完成一个软件的定义、开发、测试、发布和维护。那下面我们就开始进行一个真正的软件过程喽(也可以说成是生命周期,都OK啦)。
1.需求分析,
开发一个软件首先你要弄清楚的肯定是要我做什么,也就是拿到用户的需求。一般采用的做法是直接与资深业界人士交谈或者实地考察一番结合邮件的交互,完了回来开些内部会议,然后去做一系列的分析,比如我拿到的needs是完整的吗、需求是不是正确(比如歧义)、然后各项需求是否合理最后在综合考虑时间金钱能力等因素后是否可行?最后就是把拿到的信息做一个综合考察,拿出整理后的结果跟用户一起来验证,形成相关的需求文档。
那在这一块我们主要采取的是结构化的分析方法(SA)进行建模,具体就用到用数据流图(DFD)来完成功能建模,用实体-关系图(ER图)来用于数据建模,用状态迁移图(STD)来用于行为建模。这一块还想补充一个比较重要的内容就是数据字典,它用来保存关于数据的数据,它主要包含四类元素:数据流、数据元素、数据存储和加工。然后具体包含的就是这样一些信息:一般信息(名字,别名,描述...),定义(数据类型、结构、长度等),使用特点(值的范围、使用频率、使用方式)以及控制、分组信息(具体包括来源去向、用户程序、物理位置等信息)。
2.总体设计
确定了需求分析以后,我们要进入的就是总体化设计阶段了。这一阶段主要任务就是:1.概括来讲,系统应该怎样来实现;2.设计软件的结构,也就是确定系统中的每个程序是由哪些模块组成的,这些模块之间的有哪些联系。
具体来讲可能就是基于前面结构化的分析(SA)结果来进行我们的结构化设计(SD),然后采取系列原则实行模块化。系列原则主要包括:高内聚,低耦合,大小适中 ,适当深度、宽度、扇入和扇出以及尽量简化模块接口复杂度。然后我们通常会采用采用层次图、层次性输入处理输出图(HIPO)抑或结构图(SC)来描述整个的软件结构。这主要是解决怎么做的问题,接下来要做的就是设计软件的结构了,这里我们采用的是基于数据流的设计方法,我们前面在需求分析里面不是已经画出了数据流图吗?这里就派上了用场,所以你会发现前面所做的工作基本都是为后面真正地实现来做准备的。这一块主要有两个方面的内容:1.换型数据流图和变换型系统结构;2.事务性映射方法。最后我们做一个整体的优化就基本OK了。
3.详细设计
这一块最重要的,莫过于结构化程序设计了。讲到结构化程序,它的意思究竟是什么呢?我们直接来看定义:在使用顺序选择和循环的结构时(只是用这三种结构时我们一般称为经典结构程序设计)尽可能少的使用goto语句进行设计和实现的程序。然后顺带说下衡量代码好坏的标准不仅是看它的逻辑是否正确,性能是否满足需求更主要的是它是否易于阅读和理解(这样实际上是为测试、维护、升级当然还有别人学习打基础)。在这一块主要用到的工具是:程序流程图、盒图(就是N-S图)、PAD图(problem analysis diagram)、判定树、判定表和过程设计语言。最后莫要忘了给出详细设计文档哦。
4.编码
有了前面的工作后,这一部分就不是那么的纠结了。只需要根据对性能、效率等的要求以及系统特点选择合适的语言按照相关语言的规范编码就OK了,对了,注释很重要哦。
5.测试和维护
测试主要是采取系统的方法对整个软件系统进行全方位分层次多角度的探测工作,分为单元测试和系统测试。个人觉得这块比较有现实指导意义,因此将单独系统的讨论测试方法。维护就是软件运行过程中出了问题或将要出现问题时采取的一系列动作的总称。怎么说呢?一般的软件可能都是出了问题,OK我请或者有一帮人
解决这个问题,比较正规或者说比较重要的则通常是将运维作为整个系统的一部分,通过对系统的工作状况的分析,进行预判,然后自动采取合适的方案解决将要后者已经发生的问题。
本文介绍了软件工程的起源,及其应对软件危机的重要性。软件工程涵盖了需求分析、总体设计、详细设计、编码、测试和维护六个阶段。在需求分析中,通过结构化分析方法(如数据流图、实体-关系图和状态迁移图)进行建模。总体设计阶段确定系统实现方式和软件结构。详细设计涉及结构化程序设计,编码则依据详细设计文档进行。测试和维护是确保软件质量的关键步骤,包括单元测试、系统测试和持续的软件维护工作。

973

被折叠的 条评论
为什么被折叠?



