201771030112-刘永胜 实验一 软件工程准备—<软件基础学习>
项目 内容
课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE
这个作业要求链接 https://www.cnblogs.com/nwnu-daizh/p/12369881.html
我的课程学习目标 <(1)学习使用博客园以及Maekdown (2)学习Github的基本操作 (3)阅读《构建之法》,并思考提出问题 >
这个作业在哪些方面帮助我实现学习目标 <大局观,基本理论和实际操作>
1.问题一:什么是软件?
问题描述:在阅读书P1的时候了解到
“几乎所有的程序员都知道“程序 = 数据结构 + 算法。”这句名言。但是在实际的学习和工作中,也有不少人产生了疑问,那么软件行业赖以生存的“软件”,程序员用来安身立命的“程序”是什么?”
根据我查到的资料:
(1)软件是与计算机系统操作有关的程序、规程、规则及任何与之有关的文档及数据的完整集合。
(2)软件是一系列按照特定顺序组织的计算机数据和指令的集合。一般来讲软件被划分为系统软件、应用软件和介于这两者之间的中间件。软件并不只是包括可以在计算机上运行的电脑程序,与这些电脑程序相关的文档一般也被认为是软件的一部分。简单的说软件就是程序加文档的集合体。
在学习软件工程之前我一直对软件存在一些偏见或者是一些误解,认为软件就是程序,只要编完了程序,一切也就OK了,而且我还片面的认为只要我掌握了当下最新的语言和工具,那么我就能写程序了。一个人只要会编程。一个人只要会编程就能写软件,就是一个程序员。而且在我们之前学习软件工程经济学时了解到软件工程的开发需要很多东西,而软件开发过程中的任何一个活动都是为了能够产出优秀的代码。
那么,到底软件和程序的关系是什么?
2.问题二:什么是软件工程?
问题描述:在阅读书P7的时候了解到
“软件工程中的“工程”二字也大有来历,人们把下面的活动称之为工程。创造性的运用科学原理,设计和实现建筑,机器,装置或生产过程:或者是在实践中使用一个或多个上述实体:或者是实现这些时期的过程。”
根据我查到的资料:
(1)软件工程就是一套用于软件的团队开发,以提高软件质量和程序员工作效率为目的的规范。其核心就是,工程就是软件开发的过程,即五个重要组成部分为需求分析,设计,编码,调试和维护。
(2)软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。
在实践中我了解到软件工程的框架可概括为:目标、过程和原则。
(1)软件工程目标:生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。这些目标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及工程方法选取的约束。
(2)软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件工程过程主要包括开发过程、运作过程、维护过程。它们覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。维护活动包括使用过程中的扩充、修改与完善。伴随以上过程,还有管理过程、支持过程、培训过程等。
(3)软件工程的原则:是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。
那么,我有个问题,如果软件开发过程中,不使用软件工程行吗?
3.问题三:怎么样的软件才是足够好?
问题描述:在阅读书P15的时候了解到
“软件工程的目标就是创造足够好的软件。”
根据我查到的资料:
(1)一个软件中bug的多少可以直接衡量一个软件的开发效率,用户满意度,可靠性和可维护性。
(2)好的软件必须有
a、界面友好,无须帮助可以轻松操作。
b、运行效率不能太低,尽量减少报错现象。
c、作为单个软件尽量全功能,不要整天修补,作为需要经常更新的软件必须保证更新服务器流畅。
d、尽量占用系统资源少
e、支持后台运行
在阅读了《构建之法》的概论部分后,我觉得做"足够好"的软件主要应该注重三个方面:
1、用户满意度
如果用户在使用中发现软件存在许多问题,那么会很大程度影响用户的使用效率,用户的满意度自然会下降。而为了提高用户满意度,首先就是要了解用户的需求,研发出符合用户需求的软件是首要目的。通过实际的工作收集、推导、提炼需求,并在软件发布后通过实际数据验证需求的确被满足了。需求来自与实际,而不是自己想象出来的“需求”或者人云亦云的需求。
2、可靠性和软件流程的质量
软件可以正常运行,而不是经常崩溃或者无法正常使用,这也会影响用户对软件的评价。软件团队和开发流程的问题太多,会导致团队内部无法正常相互协作,延长软件开发周期,会影响用户的时间,也不能称作好的软件。软件开发不是一个人的事情,也不是几天完成的。而应该是一个团队一段时间的精诚合作完成的,每个人都有不可取代的地位和作用,每个人都是软件的一部分,不能有个人英雄主义,一切必须以团队为主题,一切把团队价值放在第一位。团队必须全面协调一致,才能在预定时间内做出相对好的软件。
3、可维护性
如果一个软件完成后不可更改,那么就不是一个好的软件,应该可以根据实际中的问题随时进行更新和维护,不断解决存在的问题。应该根据用户需求建立需求分析的文档说明,包括对将来发展的分析和计划。主要动能的设计文档说明和软件的实际行为一致。源代码完整,能用软件管理软件看到源代码的每次修改记录,Bug的修改过程。关键模块设立修改权限,并且配套可以正常执行的单元测试、压力测试的脚本,以适应随时可能进行的维护。
那么,软件工程真的能做到足够好,也就是完美的软件吗?