构建之法:part1

    具体实现可用的语言或工具:Excel,C/C++,C#,VB,Unix Shell,Emacs,Powershell/VBScript,JavaScript,Perl,Python..

软件开发过程中的难题:

1.Complexity复杂性

2.Invisibility不可见性

   软件工程师能直接看到源代码,但是源代码不是软件本身。

   工程师能看到程序在出错的一瞬间留下的一些痕迹(错误代号、大致的目标代码位置、错误信息),但是几乎无法完整重现到底程序出现了什么问题。

3.Changeability易变性

   人们自然地期待软件能在下面两种情况下“改变”:a.让软件做新的事情;b.让软件适应新的硬件.

4.Conformity服从性  

   服从系统,服从用户要求,行业系统要求等。

5.Discontinuity非连续性

 以上特性由软件的本质决定,软件还有其他特性。

 

软工&&CS的关系:

软工在于“工程”。例如希腊雅典的帕特农神庙、古罗马帝国的罗马水道、中国的长城等由人们互相协作建成的工程奇迹,该过程牵涉大量因素。

CS:可以追溯到Charles Babbage(1791-1871),AdaLovelace(1815-1852),AlanTuring(1912-1954)等计算机科学的先驱,但这个学科名1959年才正式提出。二者侧重点不同。

对于CS子领域的划分:

学术领域(理论研究部分大多从形式上证明,与数学、离散数学、数理逻辑密切相关):

计算理论Theoretical Computing

信息和编码理论Information and Coding Theory

算法和数据结构Algorithm and Data structure

形式化方法Formal Methods

程序设计语言Programming Language

偏实践的领域(都和数据以及其他学科发生关系,软工则和人的行为、现实社会的需求息息相关):

计算机体系结构Computer Architecture

并行计算和分布式系统Concurrent,Parallel and Distributed System

实时系统和嵌入式系统Real Time and Embedded System

操作系统Operating System

计算机网络Networking

科学计算Scientific Computing

安全和密码学Security and Cryptography

人工智能Artificial Intelligence(涵盖的相关领域:模式识别Pattern Recognition、机器学习MachineLearning、Data Mining、信息提取Information Retrieval等)

计算机图形学Computer Graphics、计算机视觉Computer Vision

多媒体Multimedia

数据库和大规模数据处理Database and Large Scale Data Processing

万维网World Wide Web

自然语言处理和语音Natural Language Processing and Speech

人工交互Human Computer Interaction

软件工程Softwarengineering

人类的发展离不开思考、发现、构建。不必再纠结“科学”和“工程”的问题,在不同的学习与工作阶段,投入到最适合的项目类型中去。

不同项目特点:

Build to Learn:开发软件,构建系统的目的是为了进一步试验,试图发现客观规律或探索某方法的优劣。这些项目通常是科研论文的基础工作。

Build to Show:为突出展现某个技术的作用

Build to Serve:例如公开的SDK形式发布的软件

Build to Win:商业软件。

软件工程包含的15个知识领域:

1.Software Requirements

2.Software Design

3.Software Construction

4.Software Testing

5.Software Maintenance

6.Software Configuratio

n Management

7.Software Engineering Management

8.Software Engineering Process

9.Software Engineering Models and Methods

10.Software Quality

11.Software Engineering Professional Practice

12.Software Engneering Economics

13.Computing Foundations

14.Mathematical Foundations

15.Engineering Foundations

软件的行为和用户的期望值不一样,就叫Bug.需求来自于实际,而不是自己想象出来的“需求”或者人云亦云的需求(例如:图书馆管理系统)..(所以做课设有P实用性?..)

主要功能都有设计文档,源代码完整,有修改记录,并有最后版本。关键模块有可以执行的单元测试、压力测试脚本等。对于已知的Bug和将来的工作都有详细的记录。做到以上3点,就是初步学会了软件工程。

posted @ 2016-09-22 21:43  lttra  阅读(200)  评论(3)    收藏  举报