前面几篇文章是我对软件工程一些宏观上的认识,现在和大家分享下我对软件工程细节上的认识。还是老样子和大家分享下自己对软件工程细节的整体认知。
整体认识
Mind Map
阐述
从上面的Mind Map 不难看出,软件生存周期一般可以分为问题定义、可行性研究、需求分析、概要设计、详细设计、编码、测试和运行&维护这八部分构成。我们需要注意的是,软件生存周期理论主要是服务大型系统的开发,我们要灵活应用软件生存周期的理论。即如果开发的系统业务流程比较简单,工作量比较小,我们就可以省去其中的一些过程。
软件生命阶段
问题定义
该阶段主要是开发人员和需求人员为了讨论关于现有系统和目标系统这两个方面的问题。对与现有系统,我们需要确定现有系统的现状、出现的问题以及开发的理由;对于目标系统,我们需要确定目标系统的开发运行环境要求和功能要求和人员素质要求。最终开发人员和需求人员达成共识,形成文档《问题定义报告》。
问题定义报告(参考)
1、引言
1.1 问题
1.2 实现条件
1.3 约束条件
2、管理
2.1 重要发现
2.2 注释
2.3 建议
2.4 效果
3、方案选择
3.1 选择系统配置
3.2 方案选择的标准
4、系统描述
4.1 缩写词
4.2 各子系统的可行性
5、成本效益分析
6、技术风险分析
7、有关法律问题
8、用户使用可能性
9、其他
可行性研究
可行性研究主要是对问题定义阶段分析的问题做进一步细化并且着重经济效益方面的分析。
Mind Map
解读阐述
可行性研究的一般步骤:
1、复查目标系统期望:在《问题研究报告的基础上》,开发人员和业务关键人员进行进一步交流:确定新系统的规模以及目标、明确系统目标的限制和约束。
2、现有系统研究:研究现有系统的相关文档,分析现有系统的优缺点,总结新系统的雏形。
3、导出目标系统的高层逻辑模型:从现有系统的物理模型出发,导出现有系统的逻辑模型。参考现有系统的逻辑模型,借助数据流图等工具,做出新系统的逻辑模型。
4、重新定义问题:再次对新系统的期望进行确认。
5、制定以及评价方案:着重对每个方案进行成本/效益分析。
6、推荐方案
7、推荐行动方针
8、做出《可行性研究报告》
9、审查
注:在这一过程中,要从经济可行性、技术可行性、社会环境可行性以及法律可行性等方面对新系统进行可行性分析。期间着重进行经济可行性分析,即进行成本/效益分析。
需求分析
Mind Map
解读阐述:
软件需求分析就是分析用户对软件的各种要求,包括功能性的和非功能性的。也就是分析用户希望软件做什么事情,完成什么样的功能,实现什么样的性能。在这一过程中,我们通常会借助数据流图辅以数据字典、层次方框图、E-R图等工具对软件需求进行形象的表达。在开发人员和客户达成一致并对需求进行验证后,将分析结果形成文档,即《需求规格说明书》。
概要设计和详细设计
概要设计和详细设计就是我们通常所说的软件设计了。软件的需求分析解决了软件要做什么的问题,而软件的设计则是进一步解决软件怎么做的问题。其中概要设计主要是为了解决软件的总体框架和数据库设计的问题,而软件的详细设计主要是为了解决具体的软件编码以及用户界面的设计问题。
Mind Map(概要设计):
解读阐述:
从图上可以看出,软件的概要设计主要是为了解决软件的总体框架搭建问题以及软件所用数据库的设计。在这一过程中,我们主要是采用面向对象的设计思想,通过模块化的设计方法设计出一个个内聚性和耦合性良好的模块实现软件的功能设计。通常我们会借助层次方框图、IPO图及HIPO图对数据的层次结构、数据流的输入输出处理以及系统结构和模块内部处理功能进行描述。最终,将以上成果整理成文档《概要设计说明书》。
Mind Map(详细设计):
解读阐述:
详细设计的主要任务有两点,其一是确定软件结构图(SC图或者HC图)中的模块使用的算法和块内数据结构;其二是设计用户界面。在确定模块算法和数据结构时,我们要遵循以下几点原则:尽量不用GOTO语句以确保程序结构的独立性;使用单进单出的控制结构;力争结构的简洁;自顶向下、逐步求精。在该过程中,我们常用程序流程图、盒图(N-S)和PAD图等图形工具对数据的逻辑进行表达,并使用伪代码和PDL语言对程序内部的代码进行逻辑性表达。在我们设计用户界面时,要先对用户进行科学合理的分析,确定用户的知识水平和操作能力。并在易控制、少记忆和一致性的理论指导下对用户界面进行设计,力求界面的简洁方便美观。最终将结果整理成文档《详细设计说明书》
。
编码
Mind Map:
解读阐述:
在没有接触软工时,总以为一个软件的开发的重头戏在于编码。学习过软件工程的视频后才发现,编码在一个软件开发的过程中只占很小的一部分比重。软件开发更多的精力放在了软件的需求分析设计以及软件的维护和调试这两方面。但是这不并是不代表着编码就可以不被开发人员重视了。在进行编码工作时,我们首先要对程序语言有一个比较全面的认识,了解尽可能多的程序语言以为软件开发提供更多的选择性。选择程序语言时,我们不要追求使用最新最复杂看起来最高大上的语言,而是要选择最适合多开发软件的语言。而在编写代码时,我们要实现源代码的文档化,对其中使用到的数据类型、控件以及语句结构进行统一的说明;对那些看起来性能很好但是对程序稳定性影响较大的语句,尽量少使用或者不适用。最后,将所有的注意事项整理成文档《编码规范说明》。
测试&调试
Mind Map:
解读阐述:
在学习软件测试的内容时,自己明白了一些道理:做人,切忌自以为是,事情也许并不是你想象的那样;做人,要学会先倾听,然后再去学习说话。开始的时候,由测试的字面意思认为软件测试就是为了向客户证明自己的软件是可以流畅完美的运行的。看了软工视频后才发现并不是自己想的那样。软件测试是在一定方法的指导下,运用一定的技术对软件进行试验,从而发现其中存在的问题,并且估算出那些没有被发现的问题的情况。一般来说,大家现在比较提倡尽早开始对软件的不断的测试,以尽早发现问题并将解决问题的代价控制在尽可能小的范围内。新进行单元测试然后进行集成测试,清楚的掌握软件模块的运行情况以及各功能模块之间的衔接是否流畅。而现在经常使用到的软件测试方法主要有黑盒测试、白盒测试、静态分析、动态测试、代码走查等方法。在测试过程中,我们要重点测试各模块的接口、数据结构、重要执行路径以及边界值等方面。最终将整个测试流畅和测试调试结果整理归档,形成《测试报告》。
运行&维护
Mind Map:
解读阐述:
软件的运行和维护是相濡以沫的吧,毕竟他俩谁也离不开谁。运行的话,咱们就不用说了,咱们来看看软件的维护是怎么样的。软件的维护的唯一目的就是软件更好的运行。听起来很像唯美的爱情……软件的维护主要可以分为改正性、完善性、适应性和预防性这四种类型,他们的使命依次是:消除开发环境下没有别发现的软件的错误;满足用户对软件功能以及性能的修改甚至扩增腰求;使软件适应硬件设备、操作系统、数据环境、网络环境(比方说网速啦~~~)和业务环境等;完善软件的配置管理、设计可扩充的体系结构等。实际上软件维护受软件的需求分析、软件设计以及软件编码的影响非常大,可以说如果软件开发过程中这是哪部分做的不规范,那么后续的软件维护工作将难如登天甚至无法进行。所以说我们需要在软件的生存周期各个阶段都要专注认真,切忌大意失荆州,从而使软件的可维护性满足我们对软件维护的需要。当然了,我们要时刻完善软件维护的文档《软件维护报告》。Last but not least,注意啦注意啦,各位想当老板的童鞋注意啦~~~~~~通常情况下,软件维护阶段投入的人力、时间和财力是对多的哦,嘿嘿当老板的你一定要注意这个提高利润的关键点啊。
结束语:
到此,我对软件工程视频的总结算是告一段落了。当然这并不是结束,这只是个开始。我相信在以后不断的学习下,我对软件工程的理解会逐渐的加深,我的能力一定会像老师说的那样达到那种专业文章写的农民都能看懂的教授境界~嘿嘿再也不会写出这种自己都感觉天书一样的东西了。
最后,感谢您的宝贵时间~~~~