分享

第一次作业

 新进小设计 2022-10-23 发布于北京

软件工程的学习心得

什么是软件工程?

 1968年秋季,北约的科技委员会召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。在那次会议上第一次提出了软件工程这个概念,研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。其后的几十年里,各种有关软件工程的技术、思想、方法和概念不断被提出,软件工程逐步发展为一门独立的科学。1993年,电气电子工程师学会(IEEE)给出了一个更加综合的定义:"将系统化的、规范的、可度量的方法用于软件的开发、运行和维护的过程,即将工程化应用于软件开发中"。此后,IEEE多次给出软件工程的定义。

 

为什么要学习软件工程?

工程,是利用技术来克服人自身的限制。软件工程很大程度上就是解决我们智力上限制的问题,软件工程师在面对不知所谓的kernel dump的时候、在面对无休止的接口变动的时候、面对改一行代码系统就全挂的窘境束手无策,所以我们需要微内核、微服务这样的框架来约束系统,降低系统的复杂性,让我们所有犯的错误都能保持在可控的范围内,让我们写出的有bug的代码也能运行起来。可以多人开发这件事情在软件工程上是至关重要的,如果一个工程必须每个程序员都完全理解整个工程的架构才能着手开发,那这个工程一定做不成,不说完全理解一个庞大项目本身不可能这个问题,大家理解也会有偏差,写出来代码合不到一起,这就是为什么需要有严格的模块拆分,而且接口必须控制在解耦的、可以理解的、数量尽量少的范围内,而且通过框架来避免错误相互扩散。在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件、嵌入式系统、人机界面、办公包、操作系统、网页、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,提高人们的工作效率,同时提升了生活质量

 

软件工程学习心得:

在我看来,软件工程与其说是一门课程,不如说是一门思想。是一个如何去分析和处理问题的过程、能够解决问题的思想集合。要学习软件工程,就必须学会如何系统的思考,以及养成良好的编码习惯。本学期主要讲的是需求分析,所以我简单总结一下上学期软件工程导论中学习的需求分析部分的学习心得。

·需求分析的重要性
一款成功的软件是建立在成功的需求分析之上的,而高质量的需求来源于用户与开发人员之间有效的沟通与合作。需求获取可能是最困难、最关键、最易出错及最需要沟通交流的活动。对需求的获取往往有错误的认识:用户知道需求是什么,我们所要做的就是和他们交谈从他们那里得到需求,明白什么是要完成的,什么样的系统能适合商业需要就可以了,但是实际上需求获取并不是想象的这样简单。首先需求获取要定义问题范围,系统的边界往往是很难明确的,用户不了解技术实现的细节,这样造成了系统目标的混淆。其次是对问题的理解,用户对计算机系统的能力和限制缺乏了解,他们需要开发人员的协助和指导,开发人员要尽量避免在于用户的交流时出现障碍,更不要忽略那些被认为是"很明显"的信息。最后是需求的确认,因为需求的不稳定性往往随着时间的推移产生变动,使之难以确认。为了克服以上的问题,必须有组织的执行需求的获取活动

·需求分析的原则
  (1)需求分析必须能够表达和理解问题的数据域和功能域。数据域包括数据流、数据内容和数据结构,而功能域反映上述三方面的控制信息。
  (2)需求分析要把一个复杂问题按功能进行分解并逐层细化。通常,软件系统要处理的问题如果太大、太复杂就很难理解,若划分成几部分,并确定各部分间的接口,就可完成整体的功能。在需求分析过程中,软件系统的用户需求中的数据、功能和行为都应细化
  (3)需求建模。模型可以帮助系统分析人员更好地理解软件系统的数据、功能和行为,这些模型是软件工程中下一阶段进行系统设计的基础。

·需求分析的注意事项
  (1)确定详细的需求,否则经费就算不准。经费估计错误的原因多为:用户需求频繁变动、遗漏重要需求、与用户交流不够、需求规格说明书质量低劣、需求分析不充分等。
  (2)在编写需求规格说明书之前,应明确要解决的问题。在试图解决问题之前,要保证已考察了全部可替代的方案。要明白真正的问题出在哪里。这样,在编写需求规格说明书时做到有的放矢,把存在的问题暴露出来。
  (3)立即确定需求,并记录下该需求的背景。没有明确问题,就进行下一步的设计,想回避矛盾,可能会带来更大的问题。用户不确定需求,软件设计人员自己决定需求,将会带来严重的问题。为了避免将来可能出现的问题和软件工程项目能够尽快地进入到下一个阶段的系统设计中,要尽可能迅速地把用户需求确定下来。任何决定总比没有决定要好。
  (4)一旦在需求规格说明书中发现问题,立即改正。如果把存在的问题拖延到系统设计阶段去改正,就可能要花数倍的时间和精力才能纠正同一错误。
  (5)在众多用户需求中确定各个需求的优先顺序,并确定可能存在的子集,以便为软件设计、实施和项目管理等后续阶段提供有利条件。
  (6)需求分析时,不要进行系统设计的工作。需求分析的主要目的是确定软件系统的外部特征,充分反映软件系统应有的面貌,便于让软件设计人员根据用户需求,去全面地考虑软件系统的体系结构、算法等。在需求分析阶段要集中精力解决用户需求存在的问题,尽可能避免产生遗留问题。
  (7)对于复杂的软件系统,要从多种视角进行需求分析。根据软件系统的本质,切合实际地组织多种视角的需求。例如,可从根据用户的类型,或根据响应的类型,或根据对象的软件工程案例教程类型,或根据系统的模式等视角来组织用户需求。通过多个视角来研究用户需求问题,把可得到的不同的“投影”组合起来形成完整系统的描述。当试图从整体观点来描述软件系统发生困难,或者有可能发生错误,或者很有可能遗失软件系统的某些特性。而从不同的视角来 描述软件系统,因为每个视角限制了研究的范围并能够将注意力集中于此,所以很容易保证所研究的问题是真正完整的。
  (8)重视形式化方法,但不放弃自然语言。为了用户需求表达的精确性和方便用户的可理解性,一个好方法是把自然语言的表达与形式化规格说明并立,互相对照,而且在一般情况下,先用自然语言写出,再给出它的形式模型。
  (9)用户需求中不应存在“待确定”的条款。如若有这种需要,应同时说明何时由谁来解决该问题。

·用户需求的类型
  需求分析是从用户最初的非形式化需求到满足用户要求的软件产品的映射过程。它实际上是一个对用户意图不断进行揭示和判断的过程,其目的在于细化、精化软件的作用范围,确定拟开发软件的功能和性能、约束、环境等。可将用户的需求分为两大类:功能性需求和非功能性需求。
  (1)功能性需求。功能性需求主要说明了系统各功能部件与环境之间的相互作用的本质,即拟开发软件在职能上实际应做到什么。一般来说,它是用户最主要的需求,通常包括系统的输入、系统能完成的功能、系统的输出以及其他反应。在功能性需求中还应包括备选功能的定义识别。
  (2)非功能性需求。非功能性要求主要从各个角度对所考虑的可能的解决方案起约束和限制作用

·需求分析的方法
  在软件工程中,常用的需求分析方法有面向数据流的结构化分析方法和面向对象的分析方法。此外,还有以用户为中心的需求分析方法。这些方法都采用图文结合的方式,可以直观地描述软件的逻辑模型。

 

软件工程发展方向:

“敏捷开发”被认为是软件工程的一个重要的发展。它强调软件开发应当是能够对未来可能出现的变化和不确定性作出全面反应的。敏捷开发被认为是一种“轻量级”的方法。在轻量级方法中最负盛名的应该是“极限编程”。而与轻量级方法相对应的是“重量级方法”的存在。重量级方法强调以开发过程为中心,而不是以人为中心。重量级方法的例子比如CMM/PSP/TSP。面向方面的程序设计被认为是近年来软件工程的另外一个重要发展。这里的方面指的是完成一个功能的对象和函数的集合。在这一方面相关的内容有泛型编程和模板。

 

(将持续更新和完善)

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多