现代软件工程作业4-7(龙秋娴)

4.Dijkstra曾经提到:“Software engineering, of course,presents itself as another worthy cause,but that is eyewash: if you carefully read its literature and analyse what its devotees actually do,you will discover that software engineering has accepted as its charter ‘How to program if you cannot.’
软件工程是不是教那些不怎么会写程序的人开发软件? 你怎么看?
答:软件工程不是教那些不怎么会写程序的人开发软件,学习、掌握软件产品开发理论知识、软件开发方法论,并在实践中理解、应用软件产品的分析、设计、实现思想来解决具体的软件产品研发问题,才是真正的软件工程。
从人们对软件工程的定义来看,软件工程概念实际存在两层含义,从狭义概念看,软件工程着重体现在软件过程中所采用的工程方法和管理体系,例如,引入成本核算、质量管理和项目管理等,即将软件产品开发看作是一项工程项目所需要的系统工程学和管理学。从广义概念看,软件工程涵盖了软件生命周期中所有的工程方法、技术和工具,包括需求工程、设计、编程、测试和维护的全部内容,即完成一个软件产品所必备的思想、理论、方法、技术和工具。
让不会写程序的人开发软件,不是软件工程的目标。软件工程目标:生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。这些目标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及工程方法选取的约束。
开发过程只是软件工程的一部分,软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件工程过程主要包括开发过程、运作过程、维护过程。它们覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。维护活动包括使用过程中的扩充、修改与完善。伴随以上过程,还有管理过程、支持过程、培训过程等。
软件工程的原则是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。
综上所述,软件工程并不是教那些不怎么会写程序的人开发软件这么简单的一门学科,如果从知识领域看,软件工程学科是以软件方法和技术为核心,涉及计算机的硬件体系、系统基础平台等相关领域,同时还要涉及一些应用领域和通用的管理学科、组织行为学科。例如,通过应用领域的知识帮助我们理解用户的需求,从而可以根据需求来设计软件的功能。 在软件工程中必然要涉及组织中应用系统的部署和配置所面临的实际问题,同时又必须不断促进知识的更新和理论的创新。为了真正解决实际问题,需要在理论和应用上获得最佳平衡。
5.你所在的学校有计算机科学专业和软件工程专业么?相关专业的教学计划和毕业出路有什么不同?阅读有关软件工程和计算机科学的区别的文章,谈谈你的看法。文章:http://www.drdobbs.com/architectureand-design/software-engineering-computer-science/217701907
答:我所在的学校有计算机科学专业和软件工程专业,
计算机科学专业的教学计划
培养规格及要求
本专业学生主要学习计算机科学与技术、计算机通信方面的基础理论和基本知识,接受从事科学研究及计算机应用系统开发的基本训练。在此基础上,通过选修计算机科学与技术与相关专业课程,使学生达到所选专业方向的知识结构要求。再通过人文类、经济管理类等课程的学习,使学生素质达到专业培养目标的要求。
毕业生应获得以下几个方面的知识和能力:
1、具有较强的英语应用能力,能够较熟练的阅读专业相关的外文文献;
2、掌握计算机科学与技术的基本理论和基本知识;
3、掌握计算机软件和硬件基本的分析、设计和开发方法;
4、掌握计算机系统的基本的分析和设计方法,具有研究和开发计算机软、  硬件的基本能力;
5、了解计算机学科的发展动态,具有不断更新知识的能力; 6、具有资料查询、文献检索、获取信息、归纳分析资料的能力; 7、具备一定的综合素质的创新精神和科学研究能力。
主干学科与主要课程 主干学科:计算机科学与技术 主要课程:
离散数学、电路与电子学、汇编语言、高级语言程序设计、面向对象技术、数据结构、数字逻辑、计算机原理、微机原理与接口技术、计算机网络、计算机组成与系统结构、操作系统、编译原理、数据库系统、嵌入式系统设计与开发等。
主要实践性教学环节
主要实践性教学环节:计算机软件课程设计、计算机硬件课程设计、计算机网络课程设计、程序设计课程设计、数据库原理及应用课程设计、毕业实习和毕业设计(论文)等。
软件工程专业的教学计划
培养目标和基本规格
(一) 培养目标
软件工程专业本科生的培养目标是:针对国民经济信息化建设和发展的需要,面向软件产业界对软件工程技术人才的需求,培养具有良好的综合素质、良好的职业道德、扎实的软件工程理论知识及较强的英语综合应用能力,掌握自然科学和与软件有关的法律基础知识、具有自主学习和使用先进软件开发技术和工具的能力,具有软件开发实践和项目组织的初步经验,具有创新、创业、竞争意识和团队精神。学生毕业后能从事大型软件项目的开发,具有软件企业所需要的较高层次的软件工程技术和管理人才的素质,能适应技术进步和社会需求变化对高素质软件工程专门人才的基本要求。

(二) 培养规格
本专业学生应掌握软件工程领域坚实的基础理论和宽广的专业知识,具有良好的系统分析、设计及软件工程项目的组织与管理能力,具备运用先进软件开发技术、方法和工具的能力,具备与软件有关的法律知识,具备独立工作能力和团队精神。
毕业生应获得以下几方面的知识和能力:
1、掌握软件工程专业的基本理论、基本知识和基本技能,特别是软件项目管理与开发技术、信息系统的分析与设计技术、网络数据库开发技术、网络信息安全和嵌入式软件开发技术;
2、熟练掌握需求分析和建模、软件设计和实现、软件评审与测试、软件过程改进与项目管理、设计人机交互界面的基本方法,能运用先进软件技术和开发工具进行软件系统的开发与维护工作。
3、掌握与软件有关的法律法规、国际惯例,具备自觉运用法律知识进行软件知识产权保护的素质。
4、具有创业意识、创新精神和良好的职业素质,具有良好的人际沟通能力和团队精神。
5、了解软件工程领域的最新成果、发展动态和法律法规;
6、具有良好的英语写作和交际能力,外语水平达到规定的等级要求
课程类别
本专业课程设置为公共必修课(政治理论课、通识文化课)、专业必修课(学科基础课、专业基础课)、专业模块课程(分计算机网络、信息安全、信息系统、嵌入式软件)、专业任意选修课和公共选修课(公共限制选修课、公共任意向选修课)。
本专业主要课程
离散数学、C++语言程序设计、汇编语言程序设计、计算机组成原理、数据结构、计算方法、操作系统、计算机通信与网络、编译原理、面向对象程序设计、面向对象分析与设计、数据库系统原理、软件工程、软件项目管理与CMM、数据仓库与数据挖掘、软件测试技术、大型软件系统构造与体系结构、统一建模语言UML等。
主要专业实验:程序设计、计算机组成原理、数据结构、操作系统、数据库、编译原理、软件系统建模与UML、系统分析与设计、分布式数据库、计算机通信与网络等。
综上所述,对于软件工程和计算机科学的分界线就是能否直接涉及人的活动,软件工程的科目都具有这个属性,而传统的计算机科学则不具有这个属性,计算机科学的可过可以被人们使用,但不一定会受到人的影响。正如那篇文章的作者所说”Software engineering will never be a rigorous discipline with proven results, because it involves human activity. 【1】”软件工程不是严格的证明结果,但是却是人类最关注问题的研究.软件工程不是以计算机科学为基础的,如果这样认为,是会远离等待我们发现的进步的.
软件工程专业毕业生主要在各大软件公司、企事业单位、高等院校、各大研究所、国防等重要部门从事软件设计、开发、应用与研究工作。软件工程就业方向为计算机办公应用,网络系统管理,图形图像制作,网络构建技术,可视化编程,WEB应用程序设计,软件测试,数据库管理。计算机科学专业的就业方向为网络工程方向,软件工程方向,通信方向,网络与信息安全方向。两个专业的就业方向的工作地点会有些重合,但是具体的工作性质和内容并不完全相同。
软件工程和计算机科学是两个学科,研究的内容紧密联系,但不相同,两种学科可以互相促进,共同发展。
      参考文献:Software Engineering ≠ Computer Science.
http://www.drdobbs.com/architectureand-design/software-engineering-computer-science/217701907
6. 有学生提到,在大学选课的时候,可以写一个“刷课机”的程序,利用学校选课系统的弱点或漏洞,帮助某些人选到某些课程。或者帮助用户刷购票网站,先买到火车票。这些软件合法么?符合道德规范么?是在“软件工程”的研究范围么? 请大家讨论。
    答: “刷课机”程序是利用学校选课系统的弱点或漏洞,帮助某些人选到某些课程,很明显是存在一定问题的,帮助用户刷购票网站,先买到火车票也是不符合我们的道德规范的,我们希望人人平等,先来后到,社会遵守道德,才能井然有序。
    软件工程 (Software Engineering,简称为SE)是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。软件工程研究的范围应该是软件的可用性和有效性,在现代社会中,软件应用于多个方面。典型的软件有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,也提高了工作效率和生活效率 。
    软件工程师随着现代科学技术的迅猛发展,各类软件的应运而生出现的一门新的学科,软件工程的应用范围在不断扩大,其规模和复杂性也在逐渐提高,所以对软件工程的学习和研究更为重要,运用软件工程成产出低成本高质量的软件产品。
    软件产品是复杂的人造系统,具有复杂性、不可见性和易变性,难以处理。软件工程师带动信息科技技术发展的关键技术,是计算机技术的基础。软件工程研究的是用工程化的方法去构建和维护软件的学科,并不会对软件存在的意义进行判断,软件的合法性以及是否符合道德不在软件工程的研究范围内,这软件工程的起点是软件产生,研究的是软件产生过程中用工程化的方法去构建和维护。

7. 有人认为,“中文编程”, 是解决中国程序员编程效率一个秘密武器,请问它是一个 “银弹” 么?
    答:银色子弹(英文:Silver Bullet),或者称“银弹”“银质子弹”,指由纯银质或镀银的子弹。在欧洲民间传说及19世纪以来哥特小说风潮的影响下,银色子弹往往被描绘成具有驱魔功效的武器,是针对狼人等超自然怪物的特效武器。后来银色子弹常被用做致命武器的代言词。被比喻为具有极端有效性的解决方法,作为杀手锏、最强杀招、王牌等的代称。  IBM大型机之父佛瑞德·布鲁克斯(Frederick P. Brooks, Jr.)在1986年发表的一篇关于软件工程的经典论文,便以《没有银弹:软件工程的本质性与附属》 (No Silver Bullet — Essence and Accidents of Software Engineering)为标题。其中的“银弹”是指一项可使软件工程的生产力在十年内提高十倍的技术或方法。该论文强调由于软件的复杂性本质,而使这样 “真正的银弹”并不存在。
  中文编程(或者称为中文编程语言)是指使用中文来书写的程序设计语言.
我不认为“中文编程”是解决中国程序员编程效率的秘密武器,并不是一个“银弹”.
对于中国程序员来说,中文输入确实比英文输入要快,但是对于效率不能仅仅只考虑程序员书写代码的速度,还要考虑编程本身。从软件开发生命周期中,问题分析定义、可行性分析、需求分析、概要设计、详细说合计、编码、测试、运维这8个阶段中就在开发过程中进行了科学的管理和软件危机的消除,在各个阶段所用到的瀑布模型,原型模型,螺旋模型,增量模型,喷泉模型等极大的额改善了软件开发过程中管理质量问题,编程的起点是解决需求,需求日益多变,程序的生命周期也越来越短,编程的的效率依赖算法和数据结构来解决问题,算法和数据结构分析应用,运算速度是影响编程的重要影响因素;
编程的不仅仅是一个人的工作,往往是一个团队,代码如果是开源的,那就要考虑全球化的问题,编程语言的通用性的问题是需要考虑的重要问题,如果就这个因素而言,中文和英文相比就有局限性,对于软件产品的可修改性,有效性,可靠性,可理解性,可维护性,可重用性、可适应性、可移植性、可追踪性和可互操作性都会有折扣,这个时候中文编程就不合适了;
编程的语言不仅仅是让程序员看懂,真正运行的是计算机,占用的计算机资源就是响应速度的关键因素,中文字符比用数量下的英文字符占用的存储空间要多很多,访问的时间效率是很有差距的。
综上所述,中文编程是“银弹”是不现实的,提高编程效率的问题不能只考虑对程序员的敲字符速度,应该从软件工程的专业角度,在软件开发生命周期中,从问题分析定义、可行性分析、需求分析、概要设计、详细说合计、编码、测试、运维这8个阶段中就在开发过程中进行思考,将编程中涉及的元素都纳入考虑的内容,包括计算机的资源,编程人员的体验等,不能只考虑表面,更应该从本质上去改善,才能切实的提升编程的效率。

posted @ 2016-09-10 15:52  杨杨&  阅读(225)  评论(0编辑  收藏  举报